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

Revision 5871, 17.0 KB checked in by toolala, 4 years ago (diff)

Paljon sälää. Haulikkoa täydellistetty, rekyyli lisätty

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