source: 2015/23/ToukoA/HotlineVihti/FatalShot/FatalShot/FatalShot.cs @ 5864

Revision 5864, 14.2 KB checked in by toolala, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class HotlineVihti : PhysicsGame
10{
11    Hyvis pelaaja1;
12    Image pelaajanKuva = LoadImage ("pelaajav1");
13    Image poliisiAmpuuKuva = LoadImage ("pelaajav1");
14        Image poliisinKuva = LoadImage ("pelaajav1");
15    Image mp5 = LoadImage ("mp5");
16    Image pistooli = LoadImage ("pistooli");
17
18    Image veriLantti = LoadImage ("verilantti");
19    Vector nopeusYlos = new Vector(0, 500);
20    Vector nopeusAlas = new Vector(0, -500);
21    Vector nopeusOikea = new Vector(500, 0);
22    Vector nopeusVasen = new Vector(-500, 0);
23    AssaultRifle pelaajan1Ase;
24    AssaultRifle pelaajan1Ase2;
25    AssaultRifle pelaajan1Ase3;
26    bool pelikaynnissa = true;
27
28    PhysicsObject asetrigger;
29
30    //bool vaihdettujo = false;
31
32    int ammovalue = 45;
33    //int ammo2value = 150;
34    bool haulikkovalmiina = true;
35    int ruudunKoko = 40;
36
37    public override void Begin()
38    {
39
40        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
41
42        TileMap kentta = TileMap.FromLevelAsset("kentta");
43        Level.Background.Color = Color.Gray;
44        kentta.SetTileMethod('%', luoPelaaja);
45        kentta.SetTileMethod('#', lisaaTaso1);
46       
47        kentta.Execute(ruudunKoko, ruudunKoko);
48
49        TileMap kentta2 = TileMap.FromLevelAsset("kentta");
50        kentta2.SetTileMethod('&', luoPahis);
51        kentta2.SetTileMethod('/', VaihdaAse2);
52        kentta2.SetTileMethod('H', VaihdaAse3);
53        kentta2.Execute(ruudunKoko, ruudunKoko);
54
55        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, "Ammu", pelaajan1Ase);
56        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu3, null, pelaajan1Ase3);
57
58        //Mouse.Listen(MouseButton.Middle, ButtonState.Pressed, VaihdaAse, "Vaihda ase");
59
60        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
61        Keyboard.Listen(Key.W, ButtonState.Down, liikutaP, "Liiku ylos", pelaaja1, nopeusYlos);
62        Keyboard.Listen(Key.S, ButtonState.Down, liikutaP, "Liiku alas", pelaaja1, nopeusAlas);
63        Keyboard.Listen(Key.W, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
64        Keyboard.Listen(Key.S, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
65
66        Keyboard.Listen(Key.D, ButtonState.Down, liikutaP, "Liiku oikealle", pelaaja1, nopeusOikea);
67        Keyboard.Listen(Key.D, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
68
69        Keyboard.Listen(Key.A, ButtonState.Down, liikutaP, "Liiku vasemmalle", pelaaja1, nopeusVasen);
70        Keyboard.Listen(Key.A, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
71
72        Keyboard.Listen(Key.R, ButtonState.Pressed, aloitaAlusta, "Aloita alusta");
73
74        Timer hauliajastin = new Timer();
75        hauliajastin.Interval = 1;
76        hauliajastin.Timeout += delegate()
77        {
78            haulikkovalmiina = true;
79        };
80
81        hauliajastin.Start();
82
83
84        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
85        Camera.ZoomFactor = 1.4;
86        Mouse.IsCursorVisible = true;
87        Camera.Follow(pelaaja1);
88    }
89
90    void VaihdaAse2(Vector paikka, double leveys, double korkeus)
91    {
92        LisaaAseTrigger(paikka, leveys, korkeus, "ase2", mp5);
93    }
94
95    void VaihdaAse3(Vector paikka, double leveys, double korkeus)
96    {
97        LisaaAseTrigger(paikka, leveys, korkeus, "ase3", mp5);
98    }
99
100    void LisaaAseTrigger(Vector paikka, double leveys, double korkeus, string tagiNimi, Image kuva)
101    {
102        asetrigger = PhysicsObject.CreateStaticObject(20, 20);
103        asetrigger.IgnoresCollisionResponse = true;
104        asetrigger.Tag = tagiNimi;
105        asetrigger.Position = paikka;
106        asetrigger.Image = kuva;
107        Add(asetrigger);
108
109
110       
111    }
112
113    void aloitaAlusta()
114    {
115        pelikaynnissa = true;
116        ClearAll();
117        Begin();
118       
119        //vaihdettujo = false;
120    }
121
122    void Ammu3(AssaultRifle ase3)
123    {
124        PhysicsObject ammus = ase3.Shoot();
125
126        if (ammus != null)
127        {
128            ase3.Power.DefaultValue = 350;
129            ase3.FireRate = 5;
130            ammus.Size *= 0.45;
131        }
132        /*if (haulikkovalmiina && pelikaynnissa)
133        {
134            for (int i = 0; i < 6; i++)
135            {
136
137
138                PhysicsObject hauli = new PhysicsObject(2, 2);
139                hauli.Shape = Shape.Ellipse;
140                hauli.Color = Color.Yellow;
141                hauli.Position = pelaaja1.Position;
142                //Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition);
143                Vector impulssi = Vector.FromLengthAndAngle(70000, (pelaajan1Ase.Angle + (RandomGen.NextAngle(Angle.FromDegrees(-15), Angle.FromDegrees(15)))));
144                //hauli.Angle = RandomGen.NextAngle(Angle.FromDegrees(-45), Angle.FromDegrees(45));
145                Add(hauli);
146                hauli.MaximumLifetime = TimeSpan.FromSeconds(0.2);
147                AddCollisionHandler(hauli, "paha", AmmusOsui);
148                AddCollisionHandler(hauli, "seina", CollisionHandler.DestroyObject);
149
150                hauli.Push(impulssi);
151                haulikkovalmiina = false;
152            }
153        }*/
154    }
155
156    void Ammu(AssaultRifle ase)
157    {
158        /*PhysicsObject ammus = ase.Shoot();
159
160        if (ammus != null)
161        {
162            ase.Power.DefaultValue = 450;
163            ase.FireRate = 10;
164
165            ammus.Size *= 0.45;
166            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
167
168        }*/
169
170        if (haulikkovalmiina && pelikaynnissa)
171        {
172            for (int i = 0; i < 10; i++)
173            {
174
175
176                PhysicsObject hauli = new PhysicsObject(2, 2);
177                hauli.Shape = Shape.Ellipse;
178                hauli.Color = Color.Yellow;
179                hauli.Position = pelaaja1.Position;
180                //Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition);
181                Vector impulssi = Vector.FromLengthAndAngle(70000, (pelaajan1Ase.Angle + (RandomGen.NextAngle(Angle.FromDegrees(-35), Angle.FromDegrees(35)))));
182                //hauli.Angle = RandomGen.NextAngle(Angle.FromDegrees(-45), Angle.FromDegrees(45));
183                Add(hauli);
184                hauli.MaximumLifetime = TimeSpan.FromSeconds(0.2);
185                AddCollisionHandler(hauli, "paha", AmmusOsui);
186                AddCollisionHandler(hauli, "seina", CollisionHandler.DestroyObject);
187
188                hauli.Push(impulssi);
189                haulikkovalmiina = false;
190            }
191        }
192
193    }
194
195    void Ammu2(LaserGun ase2)
196    {
197        PhysicsObject ammus = ase2.Shoot();
198
199        if (ammus != null)
200        {
201            ase2.Power.DefaultValue = 1000;
202            ase2.FireRate = 1000;
203            ammus.Size *= 10;
204        }
205    }
206
207    void lisaaTaso1(Vector paikka, double leveys, double korkeus)
208    {
209        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
210        taso.Position = paikka;
211        taso.Color = Color.Cyan;
212        taso.KineticFriction = 0;
213        taso.Tag = "seina";
214        Add(taso);
215    }
216
217    void luoPelaaja(Vector paikka, double leveys, double korkeus)
218    {
219        pelaaja1 = new Hyvis(leveys * 0.5, korkeus * 0.5);
220        pelaaja1.Position = paikka;
221        pelaaja1.Image = pelaajanKuva;
222        pelaaja1.Shape = Shape.Circle;
223        pelaaja1.Restitution = 0;
224        pelaaja1.CanRotate = false; ;
225        pelaaja1.Tag = "hyva";
226
227        pelaajan1Ase2 = new AssaultRifle(30, 10);
228        pelaajan1Ase2.Ammo.Value = ammovalue;
229        pelaajan1Ase2.ProjectileCollision = AmmusOsui;
230        //pelaaja1.Aseet.Add(pelaajan1Ase2);
231       
232       
233
234        pelaajan1Ase = new AssaultRifle(30, 10);
235        pelaajan1Ase.Ammo.Value = ammovalue;
236        pelaajan1Ase.ProjectileCollision = AmmusOsui;
237        pelaajan1Ase.Image = pistooli;
238        //pelaaja1.Aseet.Add(pelaajan1Ase);
239        //pelaajan1Ase.X -= 8;
240
241        pelaajan1Ase3 = new AssaultRifle(30, 10);
242        pelaajan1Ase3.Ammo.Value = 6;
243        pelaajan1Ase3.ProjectileCollision = AmmusOsui;
244        pelaajan1Ase3.Image = pistooli;
245
246        //pelaaja1.Aseet.Add(pelaajan1Ase3);
247
248        AddCollisionHandler(pelaaja1, "ase2", ase2);
249
250        AddCollisionHandler(pelaaja1, "ase3", ase3);
251
252        pelaaja1.Add(pelaajan1Ase);
253
254        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
255
256        pelaaja1.Ase = pelaajan1Ase;
257        pelaaja1.Ase2 = pelaajan1Ase2;
258        //pelaaja1.Ase3 = pelaajan1Ase3;
259        Add(pelaaja1);
260
261    }
262
263    void ase2(PhysicsObject pelaaja1, PhysicsObject ase2)
264    {
265        /*if (vaihdettujo == false)
266            {
267                pelaaja1.Remove(pelaajan1Ase);
268                pelaaja1.Add(pelaajan1Ase2);
269                pelaajan1Ase2.Ammo.Value = 150;
270                vaihdettujo = true;
271            }
272            else
273            {
274                pelaaja1.Remove(pelaajan1Ase2);
275                pelaaja1.Add(pelaajan1Ase);
276                pelaajan1Ase.Ammo.Value = 300;
277                vaihdettujo = false;
278            }
279        */
280        pelaaja1.Remove(pelaajan1Ase);
281
282        pelaaja1.Add(pelaajan1Ase);
283
284        pelaajan1Ase.Ammo.Value = ammovalue;
285
286        ase2.Destroy();
287       
288
289            Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
290    }
291
292    void ase3(PhysicsObject pelaaja1, PhysicsObject ase3)
293    {
294        pelaaja1.Remove(pelaajan1Ase);
295        pelaaja1.Remove(pelaajan1Ase2);
296
297        pelaaja1.Add(pelaajan1Ase3);
298
299        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
300    }
301
302    void luoPahis(Vector paikka, double leveys, double korkeus)
303    {
304        Pahis pahis = new Pahis(leveys * 0.5, korkeus * 0.5);
305        pahis.Position = paikka;
306        pahis.Image = pelaajanKuva;
307        pahis.Shape = Shape.Circle;
308
309        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
310        RandomMoverBrain randomAivot = new RandomMoverBrain();
311        randomAivot.ChangeMovementSeconds = 3;
312
313        AssaultRifle pahisAse = new AssaultRifle(30, 10);
314        pahisAse.Ammo.Value = 100;
315        pahisAse.ProjectileCollision = AmmusOsui;
316        pahisAse.InfiniteAmmo = true;
317        pahis.Ase = pahisAse;
318        pahis.Tag = "paha";
319        pahis.Add(pahisAse);
320
321        AddCollisionHandler(pahis, seinatormays);
322
323        pahis.Brain = seuraajaAivot;
324        seuraajaAivot.Active = true;
325        seuraajaAivot.Speed = 500;
326        seuraajaAivot.DistanceClose = 150;
327        seuraajaAivot.DistanceFar = 250;
328
329        randomAivot.Speed = 500;
330
331
332
333        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(ruudunKoko);
334        labyrinttiAivot.Speed = 100.0;
335        labyrinttiAivot.LabyrinthWallTag = "seina";
336
337        seuraajaAivot.FarBrain = labyrinttiAivot;
338        seuraajaAivot.TargetClose += delegate { pahisAmpuu(pahisAse, pahis); };
339        seuraajaAivot.StopWhenTargetClose = true;
340        pahis.CollisionIgnoreGroup = 1;
341
342        Add(pahis);
343
344    }
345
346    void seinatormays(PhysicsObject pahis, PhysicsObject kohde)
347    {
348        //Vector impulssi = new Vector(500.0, 500.0);
349        //pahis.Hit(impulssi);
350    }
351
352    void pahisAmpuu(AssaultRifle ase, Pahis pahis)
353    {
354        Vector suunta = (pelaaja1.Position - pahis.Position).Normalize();
355
356        if (pelaaja1.Velocity == Vector.Zero)
357        {
358            pahis.Angle = suunta.Angle;
359        }
360        else
361        { 
362            pahis.Angle = suunta.Angle * 1.1;
363        }
364           
365
366
367        PhysicsObject ammus = ase.Shoot();
368
369        if (ammus != null)
370        {
371            ase.Power.DefaultValue = 300;
372            ase.FireRate = 5;
373            ase.CanHitOwner = false;
374            ammus.Size *= 0.45;
375            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
376            ammus.CollisionIgnoreGroup = 1;
377        }
378    }
379
380    void Tahtaa(AnalogState hiirenLiike)
381    {
382       
383        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
384        pelaajan1Ase.Angle = suunta.Angle;
385
386        Vector suunta2 = (Mouse.PositionOnWorld - pelaajan1Ase2.AbsolutePosition).Normalize();
387        pelaajan1Ase2.Angle = suunta2.Angle;
388
389        Vector suunta3 = (Mouse.PositionOnWorld - pelaajan1Ase3.AbsolutePosition).Normalize();
390        pelaajan1Ase3.Angle = suunta3.Angle; 
391       
392        /*foreach (Weapon ase in pelaaja1.Aseet)
393        {
394            Vector suunta = (Mouse.PositionOnWorld - ase.AbsolutePosition).Normalize();
395            ase.Angle = suunta.Angle;
396        }*/
397    }
398
399    void AmmusOsui( PhysicsObject ammus, PhysicsObject kohde)
400    {
401        ammus.Destroy();
402        if (kohde.Tag.Equals("paha"))
403        {
404
405
406            Explosion rajahdys = new Explosion(5000);
407            rajahdys.Image = veriLantti;
408            rajahdys.MaxRadius = 70;
409            rajahdys.Force = 100;
410            rajahdys.Speed = 100;
411            rajahdys.Position = kohde.Position+ new Vector(3,0);
412            rajahdys.ShockwaveColor = new Color(10, 0, 0, 0);
413            Add(rajahdys);
414
415            LisaaAseTrigger(kohde.Position, ruudunKoko, ruudunKoko, "ase2", pistooli);
416
417           
418
419            GameObject verilantti = new GameObject(30, 30);
420            verilantti.Position = kohde.Position;
421            verilantti.Image = veriLantti;
422            Add(verilantti, -3);
423
424            //verilantti.MaxVelocity = 0;
425            //verilantti.CollisionIgnoreGroup = 1;
426            //verilantti.IgnoresCollisionResponse = true;
427
428            (kohde as Pahis).Ase.Destroy();
429            (kohde as Pahis).Destroy();
430        }
431
432        if (kohde.Tag.Equals("hyva"))
433        {
434            (kohde as Hyvis).Ase.Destroy();
435            (kohde as Hyvis).Destroy();
436            pelikaynnissa = false;
437        }
438
439    }
440
441    void liikutaP(PhysicsObject pelaaja1, Vector nopeus)
442    {
443        if ((nopeus.Y < 0) && (pelaaja1.Bottom < Level.Bottom))
444        {
445            pelaaja1.Velocity = Vector.Zero;
446            return;
447        }
448
449        if ((nopeus.Y > 0) && (pelaaja1.Top > Level.Top))
450        {
451            pelaaja1.Velocity = Vector.Zero;
452            return;
453        }
454        pelaaja1.Velocity = nopeus;
455    }
456}
Note: See TracBrowser for help on using the repository browser.