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

Revision 5866, 14.3 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 = 30;
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 = 0.95;
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
171        if (haulikkovalmiina && pelikaynnissa)
172        {
173            for (int i = 0; i < 9; i++)
174            {
175
176
177                PhysicsObject hauli = new PhysicsObject(2, 2);
178                hauli.Shape = Shape.Ellipse;
179                hauli.Color = Color.Yellow;
180                hauli.Position = pelaaja1.Position;
181                //Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition);
182                Vector impulssi = Vector.FromLengthAndAngle(70000, (pelaajan1Ase.Angle + (RandomGen.NextAngle(Angle.FromDegrees(-35), Angle.FromDegrees(35)))));
183                //hauli.Angle = RandomGen.NextAngle(Angle.FromDegrees(-45), Angle.FromDegrees(45));
184                Add(hauli);
185                hauli.MaximumLifetime = TimeSpan.FromSeconds(0.22);
186                AddCollisionHandler(hauli, "paha", AmmusOsui);
187                AddCollisionHandler(hauli, "seina", CollisionHandler.DestroyObject);
188
189                hauli.Push(impulssi);
190                haulikkovalmiina = false;
191            }
192        }
193
194    }
195
196    void Ammu2(LaserGun ase2)
197    {
198        PhysicsObject ammus = ase2.Shoot();
199
200        if (ammus != null)
201        {
202            ase2.Power.DefaultValue = 1000;
203            ase2.FireRate = 1000;
204            ammus.Size *= 10;
205        }
206    }
207
208    void lisaaTaso1(Vector paikka, double leveys, double korkeus)
209    {
210        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
211        taso.Position = paikka;
212        taso.Color = Color.Cyan;
213        taso.KineticFriction = 0;
214        taso.Tag = "seina";
215        Add(taso);
216    }
217
218    void luoPelaaja(Vector paikka, double leveys, double korkeus)
219    {
220        pelaaja1 = new Hyvis(leveys * 0.5, korkeus * 0.5);
221        pelaaja1.Position = paikka;
222        pelaaja1.Image = pelaajanKuva;
223        pelaaja1.Shape = Shape.Circle;
224        pelaaja1.Restitution = 0;
225        pelaaja1.CanRotate = false; ;
226        pelaaja1.Tag = "hyva";
227
228        pelaajan1Ase2 = new AssaultRifle(30, 10);
229        pelaajan1Ase2.Ammo.Value = ammovalue;
230        pelaajan1Ase2.ProjectileCollision = AmmusOsui;
231        //pelaaja1.Aseet.Add(pelaajan1Ase2);
232       
233       
234
235        pelaajan1Ase = new AssaultRifle(30, 10);
236        pelaajan1Ase.Ammo.Value = ammovalue;
237        pelaajan1Ase.ProjectileCollision = AmmusOsui;
238        pelaajan1Ase.Image = pistooli;
239        //pelaaja1.Aseet.Add(pelaajan1Ase);
240        //pelaajan1Ase.X -= 8;
241
242        pelaajan1Ase3 = new AssaultRifle(30, 10);
243        pelaajan1Ase3.Ammo.Value = ammovalue;
244        pelaajan1Ase3.ProjectileCollision = AmmusOsui;
245        pelaajan1Ase3.Image = pistooli;
246
247        //pelaaja1.Aseet.Add(pelaajan1Ase3);
248
249        AddCollisionHandler(pelaaja1, "ase2", ase2);
250
251        AddCollisionHandler(pelaaja1, "ase3", ase3);
252
253        pelaaja1.Add(pelaajan1Ase3);
254
255        pelikaynnissa = false;
256
257        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
258
259        pelaaja1.Ase = pelaajan1Ase;
260        pelaaja1.Ase2 = pelaajan1Ase2;
261        //pelaaja1.Ase3 = pelaajan1Ase3;
262        Add(pelaaja1);
263
264    }
265
266    void ase2(PhysicsObject pelaaja1, PhysicsObject ase2)
267    {
268        /*if (vaihdettujo == false)
269            {
270                pelaaja1.Remove(pelaajan1Ase);
271                pelaaja1.Add(pelaajan1Ase2);
272                pelaajan1Ase2.Ammo.Value = 150;
273                vaihdettujo = true;
274            }
275            else
276            {
277                pelaaja1.Remove(pelaajan1Ase2);
278                pelaaja1.Add(pelaajan1Ase);
279                pelaajan1Ase.Ammo.Value = 300;
280                vaihdettujo = false;
281            }
282        */
283        pelaaja1.Remove(pelaajan1Ase);
284
285        pelaaja1.Add(pelaajan1Ase);
286
287        pelaajan1Ase.Ammo.Value = ammovalue;
288
289        ase2.Destroy();
290       
291
292            Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
293    }
294
295    void ase3(PhysicsObject pelaaja1, PhysicsObject ase3)
296    {
297        pelaaja1.Remove(pelaajan1Ase);
298        pelaaja1.Remove(pelaajan1Ase2);
299
300        pelaaja1.Add(pelaajan1Ase3);
301
302        pelikaynnissa = false;
303
304        pelaajan1Ase3.Ammo.Value = 30;
305
306        ase3.Destroy();
307
308        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
309    }
310
311    void luoPahis(Vector paikka, double leveys, double korkeus)
312    {
313        Pahis pahis = new Pahis(leveys * 0.5, korkeus * 0.5);
314        pahis.Position = paikka;
315        pahis.Image = pelaajanKuva;
316        pahis.Shape = Shape.Circle;
317
318        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
319        RandomMoverBrain randomAivot = new RandomMoverBrain();
320        randomAivot.ChangeMovementSeconds = 3;
321
322        AssaultRifle pahisAse = new AssaultRifle(30, 10);
323        pahisAse.Ammo.Value = 100;
324        pahisAse.ProjectileCollision = AmmusOsui;
325        pahisAse.InfiniteAmmo = true;
326        pahis.Ase = pahisAse;
327        pahis.Tag = "paha";
328        pahis.Add(pahisAse);
329
330        AddCollisionHandler(pahis, seinatormays);
331
332        pahis.Brain = seuraajaAivot;
333        seuraajaAivot.Active = true;
334        seuraajaAivot.Speed = 500;
335        seuraajaAivot.DistanceClose = 150;
336        seuraajaAivot.DistanceFar = 250;
337
338        randomAivot.Speed = 500;
339
340
341
342        LabyrinthWandererBrain labyrinttiAivot = new LabyrinthWandererBrain(ruudunKoko);
343        labyrinttiAivot.Speed = 100.0;
344        labyrinttiAivot.LabyrinthWallTag = "seina";
345
346        seuraajaAivot.FarBrain = labyrinttiAivot;
347        seuraajaAivot.TargetClose += delegate { pahisAmpuu(pahisAse, pahis); };
348        seuraajaAivot.StopWhenTargetClose = true;
349        pahis.CollisionIgnoreGroup = 1;
350
351        Add(pahis);
352
353    }
354
355    void seinatormays(PhysicsObject pahis, PhysicsObject kohde)
356    {
357        //Vector impulssi = new Vector(500.0, 500.0);
358        //pahis.Hit(impulssi);
359    }
360
361    void pahisAmpuu(AssaultRifle ase, Pahis pahis)
362    {
363        Vector suunta = (pelaaja1.Position - pahis.Position).Normalize();
364
365        if (pelaaja1.Velocity == Vector.Zero)
366        {
367            pahis.Angle = suunta.Angle;
368        }
369        else
370        { 
371            pahis.Angle = suunta.Angle * 1.1;
372        }
373           
374
375
376        PhysicsObject ammus = ase.Shoot();
377
378        if (ammus != null)
379        {
380            ase.Power.DefaultValue = 300;
381            ase.FireRate = 5;
382            ase.CanHitOwner = false;
383            ammus.Size *= 0.45;
384            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
385            ammus.CollisionIgnoreGroup = 1;
386        }
387    }
388
389    void Tahtaa(AnalogState hiirenLiike)
390    {
391       
392        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
393        pelaajan1Ase.Angle = suunta.Angle;
394
395        Vector suunta2 = (Mouse.PositionOnWorld - pelaajan1Ase2.AbsolutePosition).Normalize();
396        pelaajan1Ase2.Angle = suunta2.Angle;
397
398        Vector suunta3 = (Mouse.PositionOnWorld - pelaajan1Ase3.AbsolutePosition).Normalize();
399        pelaajan1Ase3.Angle = suunta3.Angle; 
400       
401        /*foreach (Weapon ase in pelaaja1.Aseet)
402        {
403            Vector suunta = (Mouse.PositionOnWorld - ase.AbsolutePosition).Normalize();
404            ase.Angle = suunta.Angle;
405        }*/
406    }
407
408    void AmmusOsui( PhysicsObject ammus, PhysicsObject kohde)
409    {
410        ammus.Destroy();
411        if (kohde.Tag.Equals("paha"))
412        {
413
414
415            Explosion rajahdys = new Explosion(5000);
416            rajahdys.Image = veriLantti;
417            rajahdys.MaxRadius = 70;
418            rajahdys.Force = 100;
419            rajahdys.Speed = 100;
420            rajahdys.Position = kohde.Position+ new Vector(3,0);
421            rajahdys.ShockwaveColor = new Color(10, 0, 0, 0);
422            Add(rajahdys);
423
424            LisaaAseTrigger(kohde.Position, ruudunKoko, ruudunKoko, "ase3", mp5);
425
426           
427
428            GameObject verilantti = new GameObject(30, 30);
429            verilantti.Position = kohde.Position;
430            verilantti.Image = veriLantti;
431            Add(verilantti, -3);
432
433            //verilantti.MaxVelocity = 0;
434            //verilantti.CollisionIgnoreGroup = 1;
435            //verilantti.IgnoresCollisionResponse = true;
436
437            (kohde as Pahis).Ase.Destroy();
438            (kohde as Pahis).Destroy();
439        }
440
441        if (kohde.Tag.Equals("hyva"))
442        {
443            (kohde as Hyvis).Ase.Destroy();
444            (kohde as Hyvis).Destroy();
445            pelikaynnissa = false;
446        }
447
448    }
449
450    void liikutaP(PhysicsObject pelaaja1, Vector nopeus)
451    {
452        if ((nopeus.Y < 0) && (pelaaja1.Bottom < Level.Bottom))
453        {
454            pelaaja1.Velocity = Vector.Zero;
455            return;
456        }
457
458        if ((nopeus.Y > 0) && (pelaaja1.Top > Level.Top))
459        {
460            pelaaja1.Velocity = Vector.Zero;
461            return;
462        }
463        pelaaja1.Velocity = nopeus;
464    }
465}
Note: See TracBrowser for help on using the repository browser.