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