1 | using System; |
---|
2 | using System.Collections.Generic; |
---|
3 | using Jypeli; |
---|
4 | using Jypeli.Assets; |
---|
5 | using Jypeli.Controls; |
---|
6 | using Jypeli.Effects; |
---|
7 | using Jypeli.Widgets; |
---|
8 | |
---|
9 | public class Pelaaja : PhysicsObject |
---|
10 | { |
---|
11 | public SoundEffect tankkiAani; |
---|
12 | public DoubleMeter healthit; |
---|
13 | public bool savuttaa = false; |
---|
14 | public bool boosti = true; |
---|
15 | public AssaultRifle Ase; |
---|
16 | public bool telaJaljetLimit; |
---|
17 | public bool voiLiikkua = true; |
---|
18 | public bool liikkuu = false; |
---|
19 | public double vahinkoKerroin = 1; |
---|
20 | public GamePad kontrolleri; |
---|
21 | |
---|
22 | |
---|
23 | public Pelaaja(double leveys, double korkeus, int valinta, Image pelaajanKuva, Image tykkiTorninKuva, Image rajahdysKuva, Image liekkiKuva, SoundEffect aani) |
---|
24 | : base(leveys, korkeus) |
---|
25 | { |
---|
26 | this.tankkiAani = aani; |
---|
27 | this.Image = pelaajanKuva; |
---|
28 | this.healthit = new DoubleMeter(100, 0, 100); |
---|
29 | this.LinearDamping = 0.95; |
---|
30 | this.telaJaljetLimit = true; |
---|
31 | this.Tag = "pelaaja"; |
---|
32 | this.healthit.LowerLimit += delegate () |
---|
33 | { |
---|
34 | |
---|
35 | Explosion rajahdys = new Explosion(200); |
---|
36 | rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject pelaajaJohonPaineaaltoOsui, Vector voima) |
---|
37 | { |
---|
38 | if (pelaajaJohonPaineaaltoOsui.Tag.Equals("pelaaja")) |
---|
39 | { |
---|
40 | (pelaajaJohonPaineaaltoOsui as Pelaaja).healthit.Value -= 1000; |
---|
41 | SavuLiekki(); |
---|
42 | } |
---|
43 | }; |
---|
44 | rajahdys.Image = rajahdysKuva; |
---|
45 | rajahdys.Tag = "rajahdys"; |
---|
46 | rajahdys.Position = this.Position; |
---|
47 | ((IMBT)Game.Instance).Add(rajahdys); |
---|
48 | |
---|
49 | this.Ase.Ammo.Value = 0; |
---|
50 | this.Ase.Destroy(); |
---|
51 | this.Destroy(); |
---|
52 | kontrolleri.Vibrate(1, 1, 0, 0, 2); |
---|
53 | }; |
---|
54 | |
---|
55 | ((IMBT)Game.Instance).AddCollisionHandler(this, "perusAmmus", delegate (PhysicsObject a, PhysicsObject b) |
---|
56 | { |
---|
57 | this.healthit.Value -= 3.5* vahinkoKerroin; |
---|
58 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
59 | SavuLiekki(); |
---|
60 | }); |
---|
61 | ((IMBT)Game.Instance).AddCollisionHandler(this, "raketti", delegate (PhysicsObject a, PhysicsObject b) |
---|
62 | { |
---|
63 | this.healthit.Value -= 12* vahinkoKerroin; |
---|
64 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.3); |
---|
65 | SavuLiekki(); |
---|
66 | }); |
---|
67 | ((IMBT)Game.Instance).AddCollisionHandler(this, "pallo", delegate (PhysicsObject a, PhysicsObject b) |
---|
68 | { |
---|
69 | this.healthit.Value -= 18* vahinkoKerroin; |
---|
70 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
71 | SavuLiekki(); |
---|
72 | }); |
---|
73 | ((IMBT)Game.Instance).AddCollisionHandler(this, "rajahdys", delegate (PhysicsObject a, PhysicsObject b) |
---|
74 | { |
---|
75 | this.healthit.Value -= 1000* vahinkoKerroin; |
---|
76 | SavuLiekki(); |
---|
77 | }); |
---|
78 | ((IMBT)Game.Instance).AddCollisionHandler(this, "laser", delegate (PhysicsObject a, PhysicsObject b) |
---|
79 | { |
---|
80 | this.healthit.Value -= 2.5*vahinkoKerroin; |
---|
81 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
82 | SavuLiekki(); |
---|
83 | }); |
---|
84 | ((IMBT)Game.Instance).AddCollisionHandler(this, "haulikko", delegate (PhysicsObject a, PhysicsObject b) |
---|
85 | { |
---|
86 | this.healthit.Value -= 3.5 * vahinkoKerroin; |
---|
87 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
88 | SavuLiekki(); |
---|
89 | }); |
---|
90 | |
---|
91 | int[] tykkienKoot = { 30, 30, 30, 50 }; |
---|
92 | |
---|
93 | this.Ase = new AssaultRifle(tykkienKoot[valinta], tykkienKoot[valinta]); |
---|
94 | this.Ase.Image = tykkiTorninKuva; |
---|
95 | |
---|
96 | Game.Instance.Add(Ase, 1); |
---|
97 | |
---|
98 | Timer ajastin = new Timer(); |
---|
99 | ajastin.Interval = 0.01; |
---|
100 | ajastin.Timeout += delegate |
---|
101 | { |
---|
102 | Ase.Position = this.Position; |
---|
103 | }; |
---|
104 | ajastin.Start(); |
---|
105 | |
---|
106 | |
---|
107 | } |
---|
108 | |
---|
109 | public void SavuLiekki() |
---|
110 | { |
---|
111 | if (this.healthit.Value < this.healthit.MaxValue / 2) |
---|
112 | { |
---|
113 | if (this.savuttaa == false) |
---|
114 | { |
---|
115 | Smoke savu = new Smoke(); |
---|
116 | Game.Instance.Add(savu); |
---|
117 | savu.Position = this.Position; |
---|
118 | Timer seuraajaAjastin = new Timer(); |
---|
119 | seuraajaAjastin.Interval = 0.1; |
---|
120 | seuraajaAjastin.Timeout += delegate |
---|
121 | { |
---|
122 | savu.Position = this.Position; |
---|
123 | }; |
---|
124 | seuraajaAjastin.Start(); |
---|
125 | this.savuttaa = true; |
---|
126 | } |
---|
127 | } |
---|
128 | |
---|
129 | if (this.healthit.Value < this.healthit.MaxValue / 4) |
---|
130 | { |
---|
131 | |
---|
132 | Flame liekki = new Flame(((IMBT)Game.Instance).liekkiKuva); |
---|
133 | liekki.MinScale = 25.0; |
---|
134 | liekki.MaxScale = 50.0; |
---|
135 | liekki.ScaleAmount = 0.8; |
---|
136 | Game.Instance.Add(liekki); |
---|
137 | kontrolleri.Vibrate(0.1, 0.1, 0, 0, 1000); |
---|
138 | liekki.Position = this.Position; |
---|
139 | Timer seuraajaAjastin = new Timer(); |
---|
140 | seuraajaAjastin.Interval = 0.1; |
---|
141 | seuraajaAjastin.Timeout += delegate |
---|
142 | { |
---|
143 | liekki.Position = this.Position; |
---|
144 | }; |
---|
145 | seuraajaAjastin.Start(); |
---|
146 | this.savuttaa = true; |
---|
147 | |
---|
148 | } |
---|
149 | |
---|
150 | } |
---|
151 | |
---|
152 | |
---|
153 | } |
---|
154 | public class IMBT : PhysicsGame |
---|
155 | { |
---|
156 | |
---|
157 | static Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1"); |
---|
158 | static Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1"); |
---|
159 | static Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1"); |
---|
160 | static Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1"); |
---|
161 | static Image pelaaja1Kone2 = LoadImage("Pelaaja1Kone2"); |
---|
162 | static Image pelaaja2Kone2 = LoadImage("Pelaaja2Kone2"); |
---|
163 | static Image pelaaja3Kone2 = LoadImage("Pelaaja3Kone2"); |
---|
164 | static Image pelaaja4Kone2 = LoadImage("Pelaaja4Kone2"); |
---|
165 | static Image palikkaKuva = LoadImage("Palikka"); |
---|
166 | static Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki"); |
---|
167 | static Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki"); |
---|
168 | static Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki"); |
---|
169 | static Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki"); |
---|
170 | static Image pelaaja1Kone2Tykki = LoadImage("Pelaaja1Kone2Tykki"); |
---|
171 | static Image pelaaja2Kone2Tykki = LoadImage("Pelaaja2Kone2Tykki"); |
---|
172 | static Image pelaaja3Kone2Tykki = LoadImage("Pelaaja3Kone2Tykki"); |
---|
173 | static Image pelaaja4Kone2Tykki = LoadImage("Pelaaja4Kone2Tykki"); |
---|
174 | static Image pelaaja1Kone3Tykki = LoadImage("Pelaaja1Kone3Tykki"); |
---|
175 | static Image pelaaja2Kone3Tykki = LoadImage("Pelaaja2Kone3Tykki"); |
---|
176 | static Image pelaaja3Kone3Tykki = LoadImage("Pelaaja3Kone3Tykki"); |
---|
177 | static Image pelaaja4Kone3Tykki = LoadImage("Pelaaja4Kone3Tykki"); |
---|
178 | static Image pelaaja1Kone3 = LoadImage("Pelaaja1Kone3"); |
---|
179 | static Image pelaaja2Kone3 = LoadImage("Pelaaja2Kone3"); |
---|
180 | static Image pelaaja3Kone3 = LoadImage("Pelaaja3Kone3"); |
---|
181 | static Image pelaaja4Kone3 = LoadImage("Pelaaja4Kone3"); |
---|
182 | static Image pelaaja1Kone4 = LoadImage("Pelaaja1Kone4"); |
---|
183 | static Image pelaaja1Kone4Tykki = LoadImage("Pelaaja1Kone4Tykki"); |
---|
184 | static Image pelaaja2Kone4 = LoadImage("Pelaaja2Kone4"); |
---|
185 | static Image pelaaja2Kone4Tykki = LoadImage("Pelaaja2Kone4Tykki"); |
---|
186 | static Image pelaaja3Kone4 = LoadImage("Pelaaja3Kone4"); |
---|
187 | static Image pelaaja3Kone4Tykki = LoadImage("Pelaaja3Kone4Tykki"); |
---|
188 | static Image pelaaja4Kone4 = LoadImage("Pelaaja4Kone4"); |
---|
189 | static Image pelaaja4Kone4Tykki = LoadImage("Pelaaja4Kone4Tykki"); |
---|
190 | |
---|
191 | static Image[] pelaaja1Koneet = { pelaaja1Kone1, pelaaja1Kone2, pelaaja1Kone3, pelaaja1Kone4 }; |
---|
192 | static Image[] pelaaja2Koneet = { pelaaja2Kone1, pelaaja2Kone2, pelaaja2Kone3, pelaaja2Kone4 }; |
---|
193 | static Image[] pelaaja3Koneet = { pelaaja3Kone1, pelaaja3Kone2, pelaaja3Kone3, pelaaja3Kone4 }; |
---|
194 | static Image[] pelaaja4Koneet = { pelaaja4Kone1, pelaaja4Kone2, pelaaja4Kone3, pelaaja4Kone4 }; |
---|
195 | |
---|
196 | static Image[] pelaaja1Tykit = { pelaaja1Kone1Tykki, pelaaja1Kone2Tykki, pelaaja1Kone3Tykki, pelaaja1Kone4Tykki }; |
---|
197 | static Image[] pelaaja2Tykit = { pelaaja2Kone1Tykki, pelaaja2Kone2Tykki, pelaaja2Kone3Tykki, pelaaja2Kone4Tykki }; |
---|
198 | static Image[] pelaaja3Tykit = { pelaaja3Kone1Tykki, pelaaja3Kone2Tykki, pelaaja3Kone3Tykki, pelaaja3Kone4Tykki }; |
---|
199 | static Image[] pelaaja4Tykit = { pelaaja4Kone1Tykki, pelaaja4Kone2Tykki, pelaaja4Kone3Tykki, pelaaja4Kone4Tykki }; |
---|
200 | |
---|
201 | Image[][] pelaajienKoneet = { pelaaja1Koneet, pelaaja2Koneet, pelaaja3Koneet, pelaaja4Koneet }; |
---|
202 | Image[][] pelaajienTykit = { pelaaja1Tykit, pelaaja2Tykit, pelaaja3Tykit, pelaaja4Tykit }; |
---|
203 | |
---|
204 | static Image perusAmmus1 = LoadImage("Kone1PerusAmmus"); |
---|
205 | static Image perusAmmus2 = LoadImage("Kone2PerusAmmus"); |
---|
206 | static Image perusAmmus3 = LoadImage("Kone3PerusAmmus"); |
---|
207 | static Image perusAmmus4 = LoadImage("Kone4PerusAmmus"); |
---|
208 | |
---|
209 | Image[] perusAmmus = { perusAmmus1, perusAmmus2, perusAmmus3, perusAmmus4 }; |
---|
210 | |
---|
211 | Image hakeutuvaRakettikuva = LoadImage("HakeutuvaRaketti"); |
---|
212 | Image paineAaltoKuva = LoadImage("PaineAalto"); |
---|
213 | Image rakettiKuva = LoadImage("Raketti"); |
---|
214 | Image palloKuva = LoadImage("KimpoilevaPallo"); |
---|
215 | Image telaJaljetKuva = LoadImage("RenkaidenJäljet"); |
---|
216 | Image rajahdysKuva = LoadImage("Rajahdys"); |
---|
217 | Image laser1Kuva = LoadImage("LaserAnimaatio1"); |
---|
218 | Image laser2Kuva = LoadImage("LaserAnimaatio2"); |
---|
219 | Image laser3Kuva = LoadImage("LaserAnimaatio3"); |
---|
220 | Image laser4Kuva = LoadImage("LaserAnimaatio4"); |
---|
221 | Image suojaKilpiKuva = LoadImage("Suojakilpi"); |
---|
222 | Image suojaKilpiTykkiKuva = LoadImage("TykkiSuojaKilpi"); |
---|
223 | Image haulikkoAmmusKuva = LoadImage("haulikkoAmmus"); |
---|
224 | Image superSniperAmmus = LoadImage("SuperSniperAmmus"); |
---|
225 | Image tahtain = LoadImage("Tahtain"); |
---|
226 | Image tahtain2 = LoadImage("Tahtain2"); |
---|
227 | public Image liekkiKuva = LoadImage("Liekki"); |
---|
228 | SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni"); |
---|
229 | SoundEffect raketinAani = LoadSoundEffect("RakettiAani"); |
---|
230 | SoundEffect palloAani = LoadSoundEffect("PalloAani"); |
---|
231 | SoundEffect boostiAani = LoadSoundEffect("BoostiAani"); |
---|
232 | SoundEffect laserAani = LoadSoundEffect("LaserAani"); |
---|
233 | SoundEffect laserAmmusAani = LoadSoundEffect("LaserAmmusAani"); |
---|
234 | SoundEffect shieldAani = LoadSoundEffect("ShieldAani2"); |
---|
235 | SoundEffect haulikkoAani = LoadSoundEffect("HaulikkoAani"); |
---|
236 | SoundEffect tankkiAaniMuokattu = LoadSoundEffect("TankkiAaniMuokattu"); |
---|
237 | SoundEffect tankkiAani = LoadSoundEffect("TankkiAani"); |
---|
238 | SoundEffect rajahdysAani = LoadSoundEffect("RajahdysAani"); |
---|
239 | Pelaaja pelaaja1; |
---|
240 | MultiSelectWindow alkuValikko; |
---|
241 | int pelaajienMaara = 2; |
---|
242 | double maxNopeus = 1000.0; |
---|
243 | |
---|
244 | List<Pelaaja> pelaajat = new List<Pelaaja>(); |
---|
245 | |
---|
246 | public override void Begin() |
---|
247 | { |
---|
248 | Alkuvalikko(); |
---|
249 | //LuoKentta(); |
---|
250 | PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); |
---|
251 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
252 | |
---|
253 | } |
---|
254 | |
---|
255 | void Alkuvalikko() |
---|
256 | { |
---|
257 | alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", |
---|
258 | "Pelaa", "Lopeta"); |
---|
259 | Add(alkuValikko); |
---|
260 | alkuValikko.AddItemHandler(0, PelaajaMaara); |
---|
261 | alkuValikko.AddItemHandler(1, Exit); |
---|
262 | |
---|
263 | |
---|
264 | } |
---|
265 | |
---|
266 | void PelaajaMaara() |
---|
267 | { |
---|
268 | alkuValikko.Destroy(); |
---|
269 | alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa"); |
---|
270 | Add(alkuValikko); |
---|
271 | alkuValikko.AddItemHandler(0, LuoKentta); |
---|
272 | alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); }); |
---|
273 | alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); }); |
---|
274 | } |
---|
275 | |
---|
276 | void LuoKentta() |
---|
277 | { |
---|
278 | |
---|
279 | alkuValikko.Destroy(); |
---|
280 | string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4", "Kenttä5", "Kenttä6", "Kenttä7", "Kenttä8", "Kenttä9"); |
---|
281 | ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä); |
---|
282 | |
---|
283 | |
---|
284 | ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1); |
---|
285 | ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2); |
---|
286 | if (pelaajienMaara >= 3) |
---|
287 | { |
---|
288 | ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3); |
---|
289 | } |
---|
290 | if (pelaajienMaara == 4) |
---|
291 | { |
---|
292 | ruudut.SetTileMethod(Color.Rose, LuoPelaaja4); |
---|
293 | } |
---|
294 | ruudut.SetTileMethod(Color.Black, LuoPalikka); |
---|
295 | Level.Background.Color = Color.LightGray; |
---|
296 | |
---|
297 | ruudut.Execute(80, 80); |
---|
298 | Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)); |
---|
299 | Camera.ZoomToLevel(); |
---|
300 | } |
---|
301 | |
---|
302 | Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr) |
---|
303 | { |
---|
304 | int valinta = RandomGen.NextInt(pelaaja1Koneet.Length); |
---|
305 | //int valinta = 2; |
---|
306 | |
---|
307 | Pelaaja pelaaja = new Pelaaja(leveys * 0.8, korkeus * 0.8, valinta, pelaajienKoneet[pelaajanr - 1][valinta], pelaajienTykit[pelaajanr - 1][valinta], rajahdysKuva, liekkiKuva, LoadSoundEffect("TankkiAani")); |
---|
308 | pelaaja.AngularDamping = 0.95; |
---|
309 | pelaaja.Position = paikka; |
---|
310 | |
---|
311 | GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour }; |
---|
312 | |
---|
313 | kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja); |
---|
314 | kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja); |
---|
315 | kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta); |
---|
316 | kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta); |
---|
317 | kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta); |
---|
318 | kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Boosti, "", pelaaja, valinta); |
---|
319 | |
---|
320 | pelaaja.kontrolleri = kontrollerit[pelaajanr - 1]; |
---|
321 | |
---|
322 | return pelaaja; |
---|
323 | } |
---|
324 | |
---|
325 | void LuoPelaaja1(Vector paikka, double leveys, double korkeus) |
---|
326 | { |
---|
327 | pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, 1); |
---|
328 | |
---|
329 | |
---|
330 | Add(pelaaja1); |
---|
331 | pelaajat.Add(pelaaja1); |
---|
332 | } |
---|
333 | |
---|
334 | void LuoPalikka(Vector paikka, double leveys, double korkeus) |
---|
335 | { |
---|
336 | PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
337 | palikka.Shape = Shape.Rectangle; |
---|
338 | palikka.Position = paikka; |
---|
339 | palikka.Image = palikkaKuva; |
---|
340 | Add(palikka); |
---|
341 | } |
---|
342 | |
---|
343 | |
---|
344 | void LuoPelaaja2(Vector paikka, double leveys, double korkeus) |
---|
345 | { |
---|
346 | |
---|
347 | Pelaaja pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, 2); |
---|
348 | |
---|
349 | |
---|
350 | Add(pelaaja2); |
---|
351 | pelaajat.Add(pelaaja2); |
---|
352 | } |
---|
353 | |
---|
354 | void LuoPelaaja3(Vector paikka, double leveys, double korkeus) |
---|
355 | { |
---|
356 | |
---|
357 | Pelaaja pelaaja3 = LuoPelaaja(paikka, leveys, korkeus, 3); |
---|
358 | |
---|
359 | |
---|
360 | Add(pelaaja3); |
---|
361 | pelaajat.Add(pelaaja3); |
---|
362 | } |
---|
363 | |
---|
364 | void LuoPelaaja4(Vector paikka, double leveys, double korkeus) |
---|
365 | { |
---|
366 | |
---|
367 | Pelaaja pelaaja4 = LuoPelaaja(paikka, leveys, korkeus, 4); |
---|
368 | |
---|
369 | |
---|
370 | Add(pelaaja4); |
---|
371 | pelaajat.Add(pelaaja4); |
---|
372 | } |
---|
373 | |
---|
374 | void LuoElamaLaskuri(Pelaaja pelaaja) |
---|
375 | { |
---|
376 | ProgressBar elamaPalkki = new ProgressBar(150, 20); |
---|
377 | elamaPalkki.BindTo(pelaaja.healthit); |
---|
378 | |
---|
379 | Timer ajastin = new Timer(); |
---|
380 | ajastin.Interval = 0.01; |
---|
381 | ajastin.Timeout += delegate |
---|
382 | { |
---|
383 | elamaPalkki.AbsolutePosition = pelaaja.Position; |
---|
384 | }; |
---|
385 | |
---|
386 | ajastin.Start(); |
---|
387 | } |
---|
388 | |
---|
389 | void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja) |
---|
390 | { |
---|
391 | if (pelaaja.voiLiikkua) |
---|
392 | { |
---|
393 | if (!pelaaja.liikkuu) |
---|
394 | { |
---|
395 | pelaaja.tankkiAani.Play(0.5, 0.0, 0.0); |
---|
396 | pelaaja.liikkuu = true; |
---|
397 | } |
---|
398 | if (tatinTila.StateVector.Magnitude < 0.1) |
---|
399 | { |
---|
400 | pelaaja.tankkiAani.Stop(); |
---|
401 | pelaaja.liikkuu = false; |
---|
402 | } |
---|
403 | |
---|
404 | Angle vanhaKulma = pelaaja.Angle; |
---|
405 | pelaaja.Angle = tatinTila.StateVector.Angle; |
---|
406 | |
---|
407 | Angle kulmanMuutos = pelaaja.Angle - vanhaKulma; |
---|
408 | |
---|
409 | if (pelaaja.telaJaljetLimit && pelaaja.IsVisible) |
---|
410 | { |
---|
411 | pelaaja.telaJaljetLimit = false; |
---|
412 | |
---|
413 | GameObject telaJaljet = new GameObject(telaJaljetKuva); |
---|
414 | telaJaljet.Angle = pelaaja.Angle; |
---|
415 | telaJaljet.Position = pelaaja.Position; |
---|
416 | |
---|
417 | Add(telaJaljet, -1); |
---|
418 | |
---|
419 | Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; }); |
---|
420 | |
---|
421 | |
---|
422 | Timer.SingleShot(RandomGen.NextDouble(2.0, 20.0), delegate { telaJaljet.Destroy(); }); |
---|
423 | } |
---|
424 | |
---|
425 | pelaaja.Push(tatinTila.StateVector * maxNopeus); |
---|
426 | } |
---|
427 | |
---|
428 | } |
---|
429 | |
---|
430 | void KaannaTykkia(AnalogState tatinTila, Pelaaja pelaaja) |
---|
431 | { |
---|
432 | //if (pelaaja.voiLiikkua) |
---|
433 | { |
---|
434 | pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle; |
---|
435 | } |
---|
436 | } |
---|
437 | |
---|
438 | void Ammu(Pelaaja pelaaja, String ammusTyyppi, int konenr) |
---|
439 | { |
---|
440 | if (pelaaja.voiLiikkua) |
---|
441 | { |
---|
442 | pelaaja.Ase.AttackSound = null; |
---|
443 | PhysicsObject ammus = pelaaja.Ase.Shoot(); |
---|
444 | if (ammus != null) |
---|
445 | { |
---|
446 | switch (ammusTyyppi) |
---|
447 | { |
---|
448 | case "perus": |
---|
449 | ammusAani.Play(); |
---|
450 | ammus.Image = perusAmmus[konenr]; |
---|
451 | if (konenr == 2) |
---|
452 | { |
---|
453 | ammus.Height = 25; |
---|
454 | } |
---|
455 | ammus.Tag = "perusAmmus"; |
---|
456 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
457 | { |
---|
458 | a.Destroy(); |
---|
459 | }); |
---|
460 | Timer perusAjastin = new Timer(); |
---|
461 | perusAjastin.Interval = 0.1; |
---|
462 | perusAjastin.Timeout += delegate |
---|
463 | { |
---|
464 | ammus = pelaaja.Ase.Shoot(); |
---|
465 | if (ammus != null) |
---|
466 | { |
---|
467 | ammusAani.Play(); |
---|
468 | ammus.Image = perusAmmus[konenr]; |
---|
469 | if (konenr == 2) |
---|
470 | { |
---|
471 | ammus.Height = 25; |
---|
472 | } |
---|
473 | ammus.Tag = "perusAmmus"; |
---|
474 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
475 | { |
---|
476 | a.Destroy(); |
---|
477 | }); |
---|
478 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
479 | } |
---|
480 | }; |
---|
481 | perusAjastin.Start(2); |
---|
482 | pelaaja.Ase.FireRate = 10; |
---|
483 | break; |
---|
484 | case "raketti": |
---|
485 | if (konenr != 2) |
---|
486 | { |
---|
487 | raketinAani.Play(); |
---|
488 | ammus.Image = rakettiKuva; |
---|
489 | ammus.Tag = "raketti"; |
---|
490 | ammus.Size *= 2.5; |
---|
491 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
492 | { |
---|
493 | a.Destroy(); |
---|
494 | Explosion rajahdys = new Explosion(140); |
---|
495 | rajahdys.Sound = rajahdysAani; |
---|
496 | rajahdys.Position = a.Position; |
---|
497 | rajahdys.ShockwaveReachesObject += RajahdysOsuu; |
---|
498 | Add(rajahdys); |
---|
499 | raketinAani.Stop(); |
---|
500 | }); |
---|
501 | pelaaja.Ase.FireRate = 0.45; |
---|
502 | |
---|
503 | if (konenr == 1) |
---|
504 | { |
---|
505 | Pelaaja[] kohdePelaajat = new Pelaaja[pelaajat.Count - 1]; |
---|
506 | for (int i = 0, j = 0; i < pelaajat.Count; i++) |
---|
507 | { |
---|
508 | if (pelaajat[i] != pelaaja) |
---|
509 | { |
---|
510 | kohdePelaajat[j] = pelaajat[i]; |
---|
511 | j++; |
---|
512 | } |
---|
513 | } |
---|
514 | |
---|
515 | ammus.Image = hakeutuvaRakettikuva; |
---|
516 | |
---|
517 | |
---|
518 | FollowerBrain seuraajanAivot = new FollowerBrain(kohdePelaajat); |
---|
519 | seuraajanAivot.TurnSpeed = UnlimitedAngle.FromDegrees(45); |
---|
520 | //seuraajanAivot.TurnWhileMoving = true; |
---|
521 | seuraajanAivot.Speed = 450; |
---|
522 | ammus.Brain = seuraajanAivot; |
---|
523 | |
---|
524 | Timer ajastin = new Timer(); |
---|
525 | ajastin.Interval = 0.1; |
---|
526 | ajastin.Timeout += delegate |
---|
527 | { |
---|
528 | ammus.AbsoluteAngle = ammus.Velocity.Angle; |
---|
529 | if (ammus.IsDestroyed) |
---|
530 | { |
---|
531 | ajastin.Stop(); |
---|
532 | } |
---|
533 | }; |
---|
534 | ajastin.Start(); |
---|
535 | } |
---|
536 | } |
---|
537 | else |
---|
538 | { |
---|
539 | ammus.Velocity = ammus.Velocity * 0.8; |
---|
540 | ammus.Image = haulikkoAmmusKuva; |
---|
541 | ammus.Tag = "haulikko"; |
---|
542 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
543 | { |
---|
544 | a.Destroy(); |
---|
545 | }); |
---|
546 | pelaaja.Ase.FireRate = 10000; |
---|
547 | |
---|
548 | int maara = 10; |
---|
549 | Timer haulikkoajastin = new Timer(); |
---|
550 | haulikkoAani.Play(); |
---|
551 | haulikkoajastin.Interval = 0.01; |
---|
552 | haulikkoajastin.Timeout += delegate |
---|
553 | { |
---|
554 | ammus = pelaaja.Ase.Shoot(); |
---|
555 | if (ammus != null) |
---|
556 | { |
---|
557 | ammus.Velocity = ammus.Velocity * 0.8; |
---|
558 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
559 | ammus.Image = haulikkoAmmusKuva; |
---|
560 | ammus.Tag = "haulikko"; |
---|
561 | Vector suunta = Vector.FromLengthAndAngle(ammus.Velocity.Magnitude, (ammus.Velocity.Angle) + Angle.FromDegrees(RandomGen.NextDouble(-10.0, 10.0))); |
---|
562 | ammus.Velocity = suunta; |
---|
563 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
564 | { |
---|
565 | a.Destroy(); |
---|
566 | }); |
---|
567 | } |
---|
568 | }; |
---|
569 | haulikkoajastin.Start(maara); |
---|
570 | Timer.SingleShot(0.01 * maara + 0.01, delegate |
---|
571 | { |
---|
572 | pelaaja.Ase.FireRate = 0.5; |
---|
573 | }); |
---|
574 | } |
---|
575 | break; |
---|
576 | case "pallo": |
---|
577 | if (konenr == 0) |
---|
578 | { |
---|
579 | palloAani.Play(); |
---|
580 | ammus.Image = palloKuva; |
---|
581 | ammus.Tag = "pallo"; |
---|
582 | ammus.Size *= 5; |
---|
583 | ammus.MaximumLifetime = new TimeSpan(0, 0, 4); |
---|
584 | pelaaja.Ase.FireRate = 0.75; |
---|
585 | } |
---|
586 | // Tähän tulee laser, ei pallo |
---|
587 | else if (konenr == 2) |
---|
588 | { |
---|
589 | Animation ammusAnim = new Animation(new Image[] { laser2Kuva, laser3Kuva, laser4Kuva }); |
---|
590 | laserAmmusAani.Play(); |
---|
591 | pelaaja.voiLiikkua = false; |
---|
592 | pelaaja.Stop(); |
---|
593 | pelaaja.Ase.FireRate = 100; |
---|
594 | ammus.IgnoresCollisionResponse = true; |
---|
595 | ammus.IgnoresExplosions = true; |
---|
596 | ammus.Image = laser1Kuva; |
---|
597 | ammus.Tag = "none"; |
---|
598 | ammus.Size = new Vector(3000, 10); |
---|
599 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1480, 0) + ammus.Angle.Sin * new Vector(0, 1480); |
---|
600 | ammus.Velocity = new Vector(0, 0); |
---|
601 | |
---|
602 | Timer tahtaysAjastin = new Timer(); |
---|
603 | tahtaysAjastin.Interval = 0.1; |
---|
604 | tahtaysAjastin.Timeout += delegate |
---|
605 | { |
---|
606 | ammus.Angle = pelaaja.Ase.Angle; |
---|
607 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
608 | ammus.Velocity = new Vector(0, 0); |
---|
609 | }; |
---|
610 | tahtaysAjastin.Start(1); |
---|
611 | |
---|
612 | Timer.SingleShot(1.5, delegate |
---|
613 | { |
---|
614 | ammus.Destroy(); |
---|
615 | ammus = pelaaja.Ase.Shoot(); |
---|
616 | if (ammus != null) |
---|
617 | { |
---|
618 | pelaaja.voiLiikkua = false; |
---|
619 | pelaaja.Stop(); |
---|
620 | pelaaja.Ase.FireRate = 100; |
---|
621 | ammus.IgnoresCollisionResponse = true; |
---|
622 | ammus.IgnoresExplosions = true; |
---|
623 | ammus.Tag = "laser"; |
---|
624 | ammus.Animation = ammusAnim; |
---|
625 | ammus.Size = new Vector(3000, 40); |
---|
626 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
627 | ammus.Velocity = new Vector(0, 0); |
---|
628 | ammus.Animation.Start(); |
---|
629 | Timer ajastin = new Timer(); |
---|
630 | ajastin.Interval = 0.05; |
---|
631 | ajastin.Timeout += delegate |
---|
632 | { |
---|
633 | if (ammus != null) |
---|
634 | { |
---|
635 | ammus.Destroy(); |
---|
636 | } |
---|
637 | ammus = pelaaja.Ase.Shoot(); |
---|
638 | if (ammus != null) |
---|
639 | { |
---|
640 | laserAani.Play(); |
---|
641 | ammus.IgnoresCollisionResponse = true; |
---|
642 | ammus.IgnoresExplosions = true; |
---|
643 | ammus.Tag = "laser"; |
---|
644 | ammus.Animation = ammusAnim; |
---|
645 | ammus.Size = new Vector(3000, 40); |
---|
646 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
647 | ammus.Velocity = new Vector(0, 0); |
---|
648 | ammus.Animation.Start(); |
---|
649 | } |
---|
650 | }; |
---|
651 | ajastin.Start(40); |
---|
652 | } |
---|
653 | }); |
---|
654 | Timer.SingleShot(3.55, delegate |
---|
655 | { |
---|
656 | if (ammus != null) |
---|
657 | { |
---|
658 | ammus.Destroy(); |
---|
659 | } |
---|
660 | pelaaja.voiLiikkua = true; |
---|
661 | pelaaja.Ase.FireRate = 0.2; |
---|
662 | }); |
---|
663 | } |
---|
664 | else |
---|
665 | { |
---|
666 | ammus.Destroy(); |
---|
667 | Explosion poks = new Explosion(200); |
---|
668 | poks.Position = pelaaja.Position; |
---|
669 | poks.Animation = null; |
---|
670 | poks.Speed = 1000; |
---|
671 | poks.Image = paineAaltoKuva; |
---|
672 | poks.AddShockwaveHandler("raketti", delegate (IPhysicsObject a, Vector v) |
---|
673 | { |
---|
674 | a.Brain.Active = false; |
---|
675 | }); |
---|
676 | pelaaja.IgnoresExplosions = true; |
---|
677 | Add(poks); |
---|
678 | Timer ajastin = new Timer(); |
---|
679 | Timer.SingleShot(0.5, delegate { pelaaja.IgnoresExplosions = false; }); |
---|
680 | pelaaja.Ase.FireRate = 0.5; |
---|
681 | ajastin.Start(); |
---|
682 | |
---|
683 | } |
---|
684 | break; |
---|
685 | default: |
---|
686 | break; |
---|
687 | } |
---|
688 | |
---|
689 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
690 | |
---|
691 | |
---|
692 | } |
---|
693 | } |
---|
694 | |
---|
695 | } |
---|
696 | |
---|
697 | void RajahdysOsuu(IPhysicsObject olio, Vector suunta) |
---|
698 | { |
---|
699 | if (olio.Tag.Equals("pelaaja")) |
---|
700 | { |
---|
701 | ((Pelaaja)olio).healthit.Value -= 4; |
---|
702 | ((Pelaaja)olio).SavuLiekki(); |
---|
703 | } |
---|
704 | } |
---|
705 | |
---|
706 | void Boosti(Pelaaja pelaaja, int konenr) |
---|
707 | { |
---|
708 | // Koneelle 0 pelkkä boosti |
---|
709 | if (pelaaja.boosti) |
---|
710 | { |
---|
711 | int nopeus = 1000; |
---|
712 | |
---|
713 | // Koneelle 1 näkymättömyys |
---|
714 | if (konenr == 1) |
---|
715 | { |
---|
716 | nopeus = 750; |
---|
717 | |
---|
718 | pelaaja.IsVisible = false; |
---|
719 | pelaaja.Ase.IsVisible = false; |
---|
720 | |
---|
721 | Timer.SingleShot(1.75, delegate |
---|
722 | { |
---|
723 | pelaaja.IsVisible = true; |
---|
724 | pelaaja.Ase.IsVisible = true; |
---|
725 | }); |
---|
726 | } |
---|
727 | |
---|
728 | // Koneelle 2 pelkkä shield, ei boostia |
---|
729 | if (konenr == 2) |
---|
730 | { |
---|
731 | GameObject shield = new GameObject(pelaaja.Width+10, pelaaja.Height+10); |
---|
732 | shield.Image = suojaKilpiKuva; |
---|
733 | pelaaja.Add(shield); |
---|
734 | |
---|
735 | GameObject tykkiShield = new GameObject(pelaaja.Ase.Width, pelaaja.Ase.Height); |
---|
736 | tykkiShield.Image = suojaKilpiTykkiKuva; |
---|
737 | pelaaja.Ase.Add(tykkiShield); |
---|
738 | |
---|
739 | pelaaja.IgnoresExplosions = true; |
---|
740 | pelaaja.vahinkoKerroin = 0; |
---|
741 | |
---|
742 | pelaaja.boosti = false; |
---|
743 | shieldAani.Play(); |
---|
744 | |
---|
745 | Timer.SingleShot(1.75, delegate |
---|
746 | { |
---|
747 | pelaaja.IgnoresExplosions = false; |
---|
748 | pelaaja.vahinkoKerroin = 1; |
---|
749 | shield.Destroy(); |
---|
750 | tykkiShield.Destroy(); |
---|
751 | }); |
---|
752 | |
---|
753 | Timer.SingleShot(4.5, delegate |
---|
754 | { |
---|
755 | pelaaja.boosti = true; |
---|
756 | }); |
---|
757 | |
---|
758 | return; |
---|
759 | } |
---|
760 | |
---|
761 | pelaaja.boosti = false; |
---|
762 | pelaaja.Hit(pelaaja.Angle.GetVector() * nopeus); |
---|
763 | boostiAani.Play(); |
---|
764 | Timer.SingleShot(2.5, delegate |
---|
765 | { |
---|
766 | pelaaja.boosti = true; |
---|
767 | }); |
---|
768 | } |
---|
769 | |
---|
770 | } |
---|
771 | |
---|
772 | public void TarkistaTatti() |
---|
773 | { |
---|
774 | /* |
---|
775 | if (pelaaja1 != null && ControllerOne.LeftThumbDirection.Magnitude < 0.001) |
---|
776 | { |
---|
777 | tankkiAani.Stop(); |
---|
778 | pelaaja1.liikkuu = false; |
---|
779 | } |
---|
780 | */ |
---|
781 | |
---|
782 | |
---|
783 | |
---|
784 | for (int i = 0; i < pelaajat.Count; i++) |
---|
785 | { |
---|
786 | if (pelaajat != null && pelaajat.Count > i && pelaajat[i].kontrolleri.LeftThumbDirection.Magnitude < 0.0001) |
---|
787 | { |
---|
788 | Pelaaja pelaaja = pelaajat[i]; |
---|
789 | pelaaja.tankkiAani.Stop(); |
---|
790 | pelaaja.liikkuu = false; |
---|
791 | } |
---|
792 | } |
---|
793 | |
---|
794 | } |
---|
795 | |
---|
796 | protected override void Update(Time time) |
---|
797 | { |
---|
798 | base.Update(time); |
---|
799 | TarkistaTatti(); |
---|
800 | } |
---|
801 | |
---|
802 | } |
---|