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