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

Revision 5862, 9.5 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
16    Image veriLantti = LoadImage ("verilantti");
17    Vector nopeusYlos = new Vector(0, 500);
18    Vector nopeusAlas = new Vector(0, -500);
19    Vector nopeusOikea = new Vector(500, 0);
20    Vector nopeusVasen = new Vector(-500, 0);
21    AssaultRifle pelaajan1Ase;
22    LaserGun pelaajan1Ase2;
23
24    PhysicsObject asetrigger;
25
26    //bool vaihdettujo = false;
27
28    int ammovalue = 45;
29    int ammo2value = 150;
30
31    int ruudunKoko = 40;
32
33    public override void Begin()
34    {
35
36        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
37
38        TileMap kentta = TileMap.FromLevelAsset("kentta");
39        Level.Background.Color = Color.Gray;
40        kentta.SetTileMethod('%', luoPelaaja);
41        kentta.SetTileMethod('#', lisaaTaso1);
42        kentta.Execute(ruudunKoko, ruudunKoko);
43
44        TileMap kentta2 = TileMap.FromLevelAsset("kentta");
45        kentta2.SetTileMethod('&', luoPahis);
46        kentta2.SetTileMethod('/', VaihdaAse2);
47        kentta2.Execute(ruudunKoko, ruudunKoko);
48
49        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, "Ammu", pelaajan1Ase);
50        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu2, "Ammu", pelaajan1Ase2);
51
52        //Mouse.Listen(MouseButton.Middle, ButtonState.Pressed, VaihdaAse, "Vaihda ase");
53
54        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
55        Keyboard.Listen(Key.W, ButtonState.Down, liikutaP, "Liiku ylos", pelaaja1, nopeusYlos);
56        Keyboard.Listen(Key.S, ButtonState.Down, liikutaP, "Liiku alas", pelaaja1, nopeusAlas);
57        Keyboard.Listen(Key.W, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
58        Keyboard.Listen(Key.S, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
59
60        Keyboard.Listen(Key.D, ButtonState.Down, liikutaP, "Liiku oikealle", pelaaja1, nopeusOikea);
61        Keyboard.Listen(Key.D, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
62
63        Keyboard.Listen(Key.A, ButtonState.Down, liikutaP, "Liiku vasemmalle", pelaaja1, nopeusVasen);
64        Keyboard.Listen(Key.A, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
65
66        Keyboard.Listen(Key.R, ButtonState.Pressed, aloitaAlusta, "Aloita alusta");
67
68        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
69        Camera.ZoomFactor = 1.4;
70        Mouse.IsCursorVisible = true;
71        Camera.Follow(pelaaja1);
72    }
73
74    void VaihdaAse2(Vector paikka, double leveys, double korkeus)
75    {
76        LisaaAseTrigger(paikka, leveys, korkeus, "ase2");
77    }   
78    void LisaaAseTrigger(Vector paikka, double leveys, double korkeus, string tagiNimi)
79    {
80        asetrigger = PhysicsObject.CreateStaticObject(leveys, korkeus);
81        asetrigger.IgnoresCollisionResponse = true;
82        asetrigger.Tag = tagiNimi;
83        asetrigger.Position = paikka;
84        Add(asetrigger);
85
86
87       
88    }
89
90    void aloitaAlusta()
91    {
92        ClearAll();
93        Begin();
94        //vaihdettujo = false;
95    }
96
97    void Ammu(AssaultRifle ase)
98    {
99        PhysicsObject ammus = ase.Shoot();
100
101        if (ammus != null)
102        {
103            ase.Power.DefaultValue = 450;
104            ase.FireRate = 10;
105            ammus.Size *= 0.25;
106            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
107           
108        }
109
110    }
111
112    void Ammu2(LaserGun ase2)
113    {
114        PhysicsObject ammus = ase2.Shoot();
115
116        if (ammus != null)
117        {
118            ase2.Power.DefaultValue = 1000;
119            ase2.FireRate = 1000;
120            ammus.Size *= 10;
121        }
122    }
123
124    void lisaaTaso1(Vector paikka, double leveys, double korkeus)
125    {
126        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
127        taso.Position = paikka;
128        taso.Color = Color.Cyan;
129        taso.KineticFriction = 0;
130        Add(taso);
131    }
132
133    void luoPelaaja(Vector paikka, double leveys, double korkeus)
134    {
135        pelaaja1 = new Hyvis(leveys * 0.5, korkeus * 0.5);
136        pelaaja1.Position = paikka;
137        pelaaja1.Image = pelaajanKuva;
138        pelaaja1.Shape = Shape.Circle;
139        pelaaja1.Restitution = 0;
140        pelaaja1.CanRotate = false;
141        pelaaja1.Tag = "hyva";
142
143        pelaajan1Ase2 = new LaserGun(30, 10);
144        pelaajan1Ase2.Ammo.Value = ammo2value;
145        pelaajan1Ase2.ProjectileCollision = AmmusOsui;
146
147        pelaajan1Ase = new AssaultRifle(30, 10);
148        pelaajan1Ase.Ammo.Value = ammovalue;
149        pelaajan1Ase.ProjectileCollision = AmmusOsui;
150
151        AddCollisionHandler(pelaaja1, "ase2", ase2);
152
153        pelaaja1.Add(pelaajan1Ase);
154
155        pelaaja1.Ase = pelaajan1Ase;
156        pelaaja1.Ase2 = pelaajan1Ase2;
157
158        Add(pelaaja1);
159    }
160
161    void ase2(PhysicsObject pelaaja1, PhysicsObject ase2)
162    {
163        /*if (vaihdettujo == false)
164            {
165                pelaaja1.Remove(pelaajan1Ase);
166                pelaaja1.Add(pelaajan1Ase2);
167                pelaajan1Ase2.Ammo.Value = 150;
168                vaihdettujo = true;
169            }
170            else
171            {
172                pelaaja1.Remove(pelaajan1Ase2);
173                pelaaja1.Add(pelaajan1Ase);
174                pelaajan1Ase.Ammo.Value = 300;
175                vaihdettujo = false;
176            }
177        */
178        pelaaja1.Remove(pelaajan1Ase);
179
180        pelaaja1.Add(pelaajan1Ase);
181
182        pelaajan1Ase.Ammo.Value = ammovalue;
183
184        ase2.Destroy();
185       
186
187            Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
188    }
189
190    void luoPahis(Vector paikka, double leveys, double korkeus)
191    {
192        Pahis pahis = new Pahis(leveys * 0.5, korkeus * 0.5);
193        pahis.Position = paikka;
194        pahis.Image = pelaajanKuva;
195        pahis.Shape = Shape.Circle;
196
197        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
198        RandomMoverBrain randomAivot = new RandomMoverBrain();
199        randomAivot.ChangeMovementSeconds = 3;
200
201        AssaultRifle pahisAse = new AssaultRifle(30, 10);
202        pahisAse.Ammo.Value = 100;
203        pahisAse.ProjectileCollision = AmmusOsui;
204        pahisAse.InfiniteAmmo = true;
205        pahis.Ase = pahisAse;
206        pahis.Tag = "paha";
207        pahis.Add(pahisAse);
208
209        pahis.Brain = seuraajaAivot;
210        seuraajaAivot.Active = true;
211        seuraajaAivot.Speed = 500;
212        seuraajaAivot.DistanceClose = 150;
213        seuraajaAivot.DistanceFar = 500;
214
215        seuraajaAivot.FarBrain = randomAivot;
216        seuraajaAivot.TargetClose += delegate { pahisAmpuu(pahisAse, pahis); };
217        seuraajaAivot.StopWhenTargetClose = true;
218        pahis.CollisionIgnoreGroup = 1;
219
220        Add(pahis);
221
222    }
223
224    void pahisAmpuu(AssaultRifle ase, Pahis pahis)
225    {
226        Vector suunta = (pelaaja1.Position - pahis.Position).Normalize();
227
228        if (pelaaja1.Velocity == Vector.Zero)
229        {
230            pahis.Angle = suunta.Angle;
231        }
232        else
233        { 
234            pahis.Angle = suunta.Angle * 1.1;
235        }
236           
237
238
239        PhysicsObject ammus = ase.Shoot();
240
241        if (ammus != null)
242        {
243            ase.Power.DefaultValue = 300;
244            ase.FireRate = 5;
245            ase.CanHitOwner = false;
246            ammus.Size *= 0.45;
247            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
248            ammus.CollisionIgnoreGroup = 1;
249        }
250    }
251
252    void Tahtaa(AnalogState hiirenLiike)
253    {
254        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
255        pelaajan1Ase.Angle = suunta.Angle;
256
257        Vector suunta2 = (Mouse.PositionOnWorld - pelaajan1Ase2.AbsolutePosition).Normalize();
258        pelaajan1Ase2.Angle = suunta2.Angle;
259    }
260
261    void AmmusOsui( PhysicsObject ammus, PhysicsObject kohde)
262    {
263        ammus.Destroy();
264        if (kohde.Tag.Equals("paha"))
265        {
266
267
268            Explosion rajahdys = new Explosion(5000);
269            rajahdys.Image = veriLantti;
270            rajahdys.MaxRadius = 70;
271            rajahdys.Force = 100;
272            rajahdys.Speed = 100;
273            rajahdys.Position = kohde.Position+ new Vector(3,0);
274            rajahdys.ShockwaveColor = new Color(10, 0, 0, 0);
275            Add(rajahdys);
276
277            LisaaAseTrigger(kohde.Position, ruudunKoko, ruudunKoko, "ase2");
278
279           
280
281            GameObject verilantti = new GameObject(30, 30);
282            verilantti.Position = kohde.Position;
283            verilantti.Image = veriLantti;
284            Add(verilantti, -3);
285
286            //verilantti.MaxVelocity = 0;
287            //verilantti.CollisionIgnoreGroup = 1;
288            //verilantti.IgnoresCollisionResponse = true;
289
290            (kohde as Pahis).Ase.Destroy();
291            (kohde as Pahis).Destroy();
292        }
293
294        if (kohde.Tag.Equals("hyva"))
295        {
296            (kohde as Hyvis).Ase.Destroy();
297            (kohde as Hyvis).Destroy();
298        }
299
300    }
301
302    void liikutaP(PhysicsObject pelaaja1, Vector nopeus)
303    {
304        if ((nopeus.Y < 0) && (pelaaja1.Bottom < Level.Bottom))
305        {
306            pelaaja1.Velocity = Vector.Zero;
307            return;
308        }
309
310        if ((nopeus.Y > 0) && (pelaaja1.Top > Level.Top))
311        {
312            pelaaja1.Velocity = Vector.Zero;
313            return;
314        }
315        pelaaja1.Velocity = nopeus;
316    }
317}
Note: See TracBrowser for help on using the repository browser.