source: 2015/23/ToukoA/FatalShot/FatalShot/FatalShot/FatalShot.cs @ 5859

Revision 5859, 7.1 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 FatalShot : 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
23
24   // const int RUUDUN_KOKO = 40;
25
26    public override void Begin()
27    {
28
29        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
30
31        TileMap kentta = TileMap.FromLevelAsset("kentta");
32        Level.Background.Color = Color.Gray;
33        kentta.SetTileMethod('%', luoPelaaja);
34        kentta.SetTileMethod('#', lisaaTaso1);
35        kentta.Execute(40, 40);
36
37        TileMap kentta2 = TileMap.FromLevelAsset("kentta");
38        kentta2.SetTileMethod('&', luoPahis);
39        kentta2.Execute(40, 40);
40
41        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, "Ammu", pelaajan1Ase);
42
43        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
44        Keyboard.Listen(Key.W, ButtonState.Down, liikutaP, "Liiku ylos", pelaaja1, nopeusYlos);
45        Keyboard.Listen(Key.S, ButtonState.Down, liikutaP, "Liiku alas", pelaaja1, nopeusAlas);
46        Keyboard.Listen(Key.W, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
47        Keyboard.Listen(Key.S, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
48
49        Keyboard.Listen(Key.D, ButtonState.Down, liikutaP, "Liiku oikealle", pelaaja1, nopeusOikea);
50        Keyboard.Listen(Key.D, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
51
52        Keyboard.Listen(Key.A, ButtonState.Down, liikutaP, "Liiku vasemmalle", pelaaja1, nopeusVasen);
53        Keyboard.Listen(Key.A, ButtonState.Released, liikutaP, null, pelaaja1, Vector.Zero);
54
55        Keyboard.Listen(Key.R, ButtonState.Pressed, aloitaAlusta, "Aloita alusta");
56
57        Mouse.ListenMovement(0.1, Tahtaa, "Tähtää");
58        Camera.ZoomFactor = 0.9;
59        Mouse.IsCursorVisible = true;
60        Camera.Follow(pelaaja1);
61    }
62
63    void aloitaAlusta()
64    {
65        ClearAll();
66        Begin();
67    }
68
69    void Ammu(AssaultRifle ase)
70    {
71        PhysicsObject ammus = ase.Shoot();
72
73        if (ammus != null)
74        {
75            ase.Power.DefaultValue = 200;
76            ase.FireRate = 8;
77            ammus.Size *= 0.45;
78            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
79           
80        }
81
82    }
83
84    void lisaaTaso1(Vector paikka, double leveys, double korkeus)
85    {
86        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
87        taso.Position = paikka;
88        taso.Color = Color.Cyan;
89        Add(taso);
90    }
91
92    void luoPelaaja(Vector paikka, double leveys, double korkeus)
93    {
94        pelaaja1 = new Hyvis(leveys * 0.5, korkeus * 0.5);
95        pelaaja1.Position = paikka;
96        pelaaja1.Image = pelaajanKuva;
97        pelaaja1.Shape = Shape.Circle;
98        pelaaja1.CanRotate = false;
99        pelaaja1.Tag = "hyva";
100
101        pelaajan1Ase = new AssaultRifle(30, 10);
102        //pelaajan1Ase.Ammo.Value = 100;
103        pelaajan1Ase.InfiniteAmmo = true;
104        pelaajan1Ase.ProjectileCollision = AmmusOsui;
105
106        pelaaja1.Add(pelaajan1Ase);
107        pelaaja1.Ase = pelaajan1Ase;
108
109        Add(pelaaja1);
110    }
111
112    void luoPahis(Vector paikka, double leveys, double korkeus)
113    {
114        Pahis pahis = new Pahis(leveys * 0.5, korkeus * 0.5);
115        pahis.Position = paikka;
116        pahis.Image = pelaajanKuva;
117        pahis.Shape = Shape.Circle;
118
119        FollowerBrain seuraajaAivot = new FollowerBrain(pelaaja1);
120        RandomMoverBrain randomAivot = new RandomMoverBrain();
121        randomAivot.ChangeMovementSeconds = 3;
122
123        AssaultRifle pahisAse = new AssaultRifle(30, 10);
124        pahisAse.Ammo.Value = 100;
125        pahisAse.ProjectileCollision = AmmusOsui;
126        pahisAse.InfiniteAmmo = true;
127        pahis.Ase = pahisAse;
128        pahis.Tag = "paha";
129        pahis.Add(pahisAse);
130
131        pahis.Brain = seuraajaAivot;
132        seuraajaAivot.Active = true;
133        seuraajaAivot.Speed = 500;
134        seuraajaAivot.DistanceClose = 350;
135        seuraajaAivot.DistanceFar = 1000;
136
137        seuraajaAivot.FarBrain = randomAivot;
138        seuraajaAivot.TargetClose += delegate { pahisAmpuu(pahisAse, pahis); };
139        seuraajaAivot.StopWhenTargetClose = true;
140        pahis.CollisionIgnoreGroup = 1;
141
142        Add(pahis);
143
144    }
145
146    void pahisAmpuu(AssaultRifle ase, Pahis pahis)
147    {
148        Vector suunta = (pelaaja1.Position - pahis.Position).Normalize();
149
150        if (pelaaja1.Velocity == Vector.Zero)
151        {
152            pahis.Angle = suunta.Angle;
153        }
154        else
155        { 
156            pahis.Angle = suunta.Angle * 1.1;
157        }
158           
159
160
161        PhysicsObject ammus = ase.Shoot();
162
163        if (ammus != null)
164        {
165            ase.Power.DefaultValue = 300;
166            ase.FireRate = 8;
167            ase.CanHitOwner = false;
168            ammus.Size *= 0.45;
169            ammus.MaximumLifetime = TimeSpan.FromSeconds(4);
170            ammus.CollisionIgnoreGroup = 1;
171        }
172    }
173
174    void Tahtaa(AnalogState hiirenLiike)
175    {
176        Vector suunta = (Mouse.PositionOnWorld - pelaajan1Ase.AbsolutePosition).Normalize();
177        pelaajan1Ase.Angle = suunta.Angle;
178    }
179
180    void AmmusOsui( PhysicsObject ammus, PhysicsObject kohde)
181    {
182        ammus.Destroy();
183        if (kohde.Tag.Equals("paha"))
184        {
185
186            Explosion rajahdys = new Explosion(5000);
187            rajahdys.Image = veriLantti;
188            rajahdys.MaxRadius = 70;
189            rajahdys.Force = 500;
190            rajahdys.Speed = 100;
191            rajahdys.Position = kohde.Position;
192            rajahdys.ShockwaveColor = new Color(0, 0, 0, 0);
193
194            Add(rajahdys);
195
196            GameObject verilantti = new GameObject(30, 30);
197            verilantti.Position = kohde.Position;
198            verilantti.Image = veriLantti;
199            Add(verilantti, -3);
200
201            //verilantti.MaxVelocity = 0;
202            //verilantti.CollisionIgnoreGroup = 1;
203            //verilantti.IgnoresCollisionResponse = true;
204
205            (kohde as Pahis).Ase.Destroy();
206            (kohde as Pahis).Destroy();
207        }
208
209        if (kohde.Tag.Equals("hyva"))
210        {
211            (kohde as Hyvis).Ase.Destroy();
212            (kohde as Hyvis).Destroy();
213        }
214
215    }
216
217    void liikutaP(PhysicsObject pelaaja1, Vector nopeus)
218    {
219        if ((nopeus.Y < 0) && (pelaaja1.Bottom < Level.Bottom))
220        {
221            pelaaja1.Velocity = Vector.Zero;
222            return;
223        }
224
225        if ((nopeus.Y > 0) && (pelaaja1.Top > Level.Top))
226        {
227            pelaaja1.Velocity = Vector.Zero;
228            return;
229        }
230        pelaaja1.Velocity = nopeus;
231    }
232}
Note: See TracBrowser for help on using the repository browser.