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

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