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 GamePad kontrolleri; |
---|
13 | public bool erikoiskyky = true; |
---|
14 | public double vahinkoKerroin = 1; |
---|
15 | public double Nopeus = 1000; |
---|
16 | public bool voiLiikkua = true; |
---|
17 | public bool liikkuu = false; |
---|
18 | public Pelaaja(double leveys, double korkeus, int valinta, Image pelaajanKuva) |
---|
19 | : base(leveys, korkeus) |
---|
20 | { |
---|
21 | this.Image = pelaajanKuva; |
---|
22 | this.LinearDamping = 0.95; |
---|
23 | this.Tag = "pelaaja"; |
---|
24 | |
---|
25 | |
---|
26 | this.healthit = new DoubleMeter(100, 0, 100); |
---|
27 | this.healthit.LowerLimit += delegate () |
---|
28 | { |
---|
29 | |
---|
30 | this.Destroy(); |
---|
31 | kontrolleri.Vibrate(1, 1, 0, 0, 2); |
---|
32 | }; |
---|
33 | } |
---|
34 | |
---|
35 | |
---|
36 | } |
---|
37 | |
---|
38 | public class MonsteriPelaaja : Pelaaja |
---|
39 | { |
---|
40 | public MonsteriPelaaja(double leveys, double korkeus, int valinta, Image pelaajanKuva) |
---|
41 | : base(leveys, korkeus, valinta, pelaajanKuva) |
---|
42 | { |
---|
43 | |
---|
44 | } |
---|
45 | } |
---|
46 | public class Tankkipelaaja : Pelaaja |
---|
47 | { |
---|
48 | public SoundEffect tankkiAani; |
---|
49 | |
---|
50 | public bool savuttaa = false; |
---|
51 | public bool liekittaa = false; |
---|
52 | public AssaultRifle Ase; |
---|
53 | public bool telaJaljetLimit; |
---|
54 | |
---|
55 | public Timer liekkiAjastin; |
---|
56 | public Timer savunSeuraajaAjastin; |
---|
57 | public GameObject tahtain; |
---|
58 | |
---|
59 | public Tankkipelaaja(double leveys, double korkeus, int valinta, Image pelaajanKuva, Image tykkiTorninKuva, Image rajahdysKuva, Image liekkiKuva, SoundEffect aani) |
---|
60 | : base(leveys, korkeus, valinta, pelaajanKuva) |
---|
61 | { |
---|
62 | this.telaJaljetLimit = true; |
---|
63 | this.tankkiAani = aani; |
---|
64 | |
---|
65 | |
---|
66 | this.healthit.LowerLimit += delegate () |
---|
67 | { |
---|
68 | Explosion rajahdys = new Explosion(200); |
---|
69 | |
---|
70 | rajahdys.ShockwaveReachesObject += delegate (IPhysicsObject pelaajaJohonPaineaaltoOsui, Vector voima) |
---|
71 | { |
---|
72 | if (pelaajaJohonPaineaaltoOsui.Tag.Equals("pelaaja")) |
---|
73 | { |
---|
74 | (pelaajaJohonPaineaaltoOsui as Pelaaja).healthit.Value -= 1000; |
---|
75 | |
---|
76 | } |
---|
77 | |
---|
78 | |
---|
79 | |
---|
80 | rajahdys.Image = rajahdysKuva; |
---|
81 | rajahdys.Tag = "rajahdys"; |
---|
82 | rajahdys.Position = this.Position; |
---|
83 | ((IMBT)Game.Instance).Add(rajahdys); |
---|
84 | |
---|
85 | this.Ase.Ammo.Value = 0; |
---|
86 | this.Ase.Destroy(); |
---|
87 | this.Destroy(); |
---|
88 | }; |
---|
89 | }; |
---|
90 | ((IMBT)Game.Instance).AddCollisionHandler(this, "perusAmmus", delegate (PhysicsObject a, PhysicsObject b) |
---|
91 | { |
---|
92 | this.healthit.Value -= 3.5 * vahinkoKerroin; |
---|
93 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
94 | SavuLiekki(); |
---|
95 | }); |
---|
96 | ((IMBT)Game.Instance).AddCollisionHandler(this, "raketti", delegate (PhysicsObject a, PhysicsObject b) |
---|
97 | { |
---|
98 | this.healthit.Value -= 12 * vahinkoKerroin; |
---|
99 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
100 | SavuLiekki(); |
---|
101 | }); |
---|
102 | ((IMBT)Game.Instance).AddCollisionHandler(this, "pallo", delegate (PhysicsObject a, PhysicsObject b) |
---|
103 | { |
---|
104 | this.healthit.Value -= 18 * vahinkoKerroin; |
---|
105 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
106 | SavuLiekki(); |
---|
107 | }); |
---|
108 | ((IMBT)Game.Instance).AddCollisionHandler(this, "rajahdys", delegate (PhysicsObject a, PhysicsObject b) |
---|
109 | { |
---|
110 | this.healthit.Value -= 1000 * vahinkoKerroin; |
---|
111 | SavuLiekki(); |
---|
112 | }); |
---|
113 | ((IMBT)Game.Instance).AddCollisionHandler(this, "laser", delegate (PhysicsObject a, PhysicsObject b) |
---|
114 | { |
---|
115 | this.healthit.Value -= 1.3 * vahinkoKerroin; |
---|
116 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
117 | SavuLiekki(); |
---|
118 | }); |
---|
119 | ((IMBT)Game.Instance).AddCollisionHandler(this, "haulikko", delegate (PhysicsObject a, PhysicsObject b) |
---|
120 | { |
---|
121 | this.healthit.Value -= 3.5 * vahinkoKerroin; |
---|
122 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
123 | SavuLiekki(); |
---|
124 | }); |
---|
125 | ((IMBT)Game.Instance).AddCollisionHandler(this, "superSniperAmmus", delegate (PhysicsObject a, PhysicsObject b) |
---|
126 | { |
---|
127 | this.healthit.Value -= 12.5 * vahinkoKerroin; |
---|
128 | kontrolleri.Vibrate(0.5, 0.5, 10, 10, 0.1); |
---|
129 | SavuLiekki(); |
---|
130 | }); |
---|
131 | |
---|
132 | int[] tykkienKoot = { 30, 30, 30, 50 }; |
---|
133 | |
---|
134 | this.Ase = new AssaultRifle(tykkienKoot[valinta], tykkienKoot[valinta]); |
---|
135 | this.Ase.Image = tykkiTorninKuva; |
---|
136 | |
---|
137 | Game.Instance.Add(Ase, 1); |
---|
138 | |
---|
139 | Timer ajastin = new Timer(); |
---|
140 | ajastin.Interval = 0.01; |
---|
141 | ajastin.Timeout += delegate |
---|
142 | { |
---|
143 | Ase.Position = this.Position; |
---|
144 | }; |
---|
145 | ajastin.Start(); |
---|
146 | |
---|
147 | |
---|
148 | } |
---|
149 | |
---|
150 | public void SavuLiekki() //TODO Liekki ja savu jää paikoilleen kun menee näkymättömäksi. Korjaa |
---|
151 | { |
---|
152 | if (this.healthit.Value < this.healthit.MaxValue / 2) |
---|
153 | { |
---|
154 | if (this.savuttaa == false) |
---|
155 | { |
---|
156 | Smoke savu = new Smoke(); |
---|
157 | Game.Instance.Add(savu); |
---|
158 | savu.Position = this.Position; |
---|
159 | savunSeuraajaAjastin = new Timer(); |
---|
160 | savunSeuraajaAjastin.Interval = 0.1; |
---|
161 | savunSeuraajaAjastin.Timeout += delegate |
---|
162 | { |
---|
163 | savu.Position = this.Position; |
---|
164 | }; |
---|
165 | savunSeuraajaAjastin.Start(); |
---|
166 | this.savuttaa = true; |
---|
167 | } |
---|
168 | } |
---|
169 | |
---|
170 | if (this.healthit.Value < this.healthit.MaxValue / 4) |
---|
171 | { |
---|
172 | if (this.liekittaa == false) |
---|
173 | { |
---|
174 | Flame liekki = new Flame(((IMBT)Game.Instance).liekkiKuva); |
---|
175 | liekki.MinScale = 25.0; |
---|
176 | liekki.MaxScale = 50.0; |
---|
177 | liekki.ScaleAmount = 0.8; |
---|
178 | Game.Instance.Add(liekki); |
---|
179 | liekki.Position = this.Position; |
---|
180 | liekkiAjastin = new Timer(); |
---|
181 | liekkiAjastin.Interval = 0.1; |
---|
182 | liekkiAjastin.Timeout += delegate |
---|
183 | { |
---|
184 | liekki.Position = this.Position; |
---|
185 | }; |
---|
186 | liekkiAjastin.Start(); |
---|
187 | this.liekittaa = true; |
---|
188 | } |
---|
189 | |
---|
190 | |
---|
191 | } |
---|
192 | |
---|
193 | } |
---|
194 | |
---|
195 | |
---|
196 | } |
---|
197 | public class IMBT : PhysicsGame |
---|
198 | { |
---|
199 | |
---|
200 | static Image pelaaja1Kone1 = LoadImage("Pelaaja1Kone1"); |
---|
201 | static Image pelaaja2Kone1 = LoadImage("Pelaaja2Kone1"); |
---|
202 | static Image pelaaja3Kone1 = LoadImage("Pelaaja3Kone1"); |
---|
203 | static Image pelaaja4Kone1 = LoadImage("Pelaaja4Kone1"); |
---|
204 | static Image pelaaja1Kone2 = LoadImage("Pelaaja1Kone2"); |
---|
205 | static Image pelaaja2Kone2 = LoadImage("Pelaaja2Kone2"); |
---|
206 | static Image pelaaja3Kone2 = LoadImage("Pelaaja3Kone2"); |
---|
207 | static Image pelaaja4Kone2 = LoadImage("Pelaaja4Kone2"); |
---|
208 | static Image palikkaKuva = LoadImage("Palikka"); |
---|
209 | static Image pelaaja4Kone1Tykki = LoadImage("Pelaaja4Kone1Tykki"); |
---|
210 | static Image pelaaja3Kone1Tykki = LoadImage("Pelaaja3Kone1Tykki"); |
---|
211 | static Image pelaaja2Kone1Tykki = LoadImage("Pelaaja2Kone1Tykki"); |
---|
212 | static Image pelaaja1Kone1Tykki = LoadImage("Pelaaja1Kone1Tykki"); |
---|
213 | static Image pelaaja1Kone2Tykki = LoadImage("Pelaaja1Kone2Tykki"); |
---|
214 | static Image pelaaja2Kone2Tykki = LoadImage("Pelaaja2Kone2Tykki"); |
---|
215 | static Image pelaaja3Kone2Tykki = LoadImage("Pelaaja3Kone2Tykki"); |
---|
216 | static Image pelaaja4Kone2Tykki = LoadImage("Pelaaja4Kone2Tykki"); |
---|
217 | static Image pelaaja1Kone3Tykki = LoadImage("Pelaaja1Kone3Tykki"); |
---|
218 | static Image pelaaja2Kone3Tykki = LoadImage("Pelaaja2Kone3Tykki"); |
---|
219 | static Image pelaaja3Kone3Tykki = LoadImage("Pelaaja3Kone3Tykki"); |
---|
220 | static Image pelaaja4Kone3Tykki = LoadImage("Pelaaja4Kone3Tykki"); |
---|
221 | static Image pelaaja1Kone3 = LoadImage("Pelaaja1Kone3"); |
---|
222 | static Image pelaaja2Kone3 = LoadImage("Pelaaja2Kone3"); |
---|
223 | static Image pelaaja3Kone3 = LoadImage("Pelaaja3Kone3"); |
---|
224 | static Image pelaaja4Kone3 = LoadImage("Pelaaja4Kone3"); |
---|
225 | static Image pelaaja1Kone4 = LoadImage("Pelaaja1Kone4"); |
---|
226 | static Image pelaaja1Kone4Tykki = LoadImage("Pelaaja1Kone4Tykki"); |
---|
227 | static Image pelaaja2Kone4 = LoadImage("Pelaaja2Kone4"); |
---|
228 | static Image pelaaja2Kone4Tykki = LoadImage("Pelaaja2Kone4Tykki"); |
---|
229 | static Image pelaaja3Kone4 = LoadImage("Pelaaja3Kone4"); |
---|
230 | static Image pelaaja3Kone4Tykki = LoadImage("Pelaaja3Kone4Tykki"); |
---|
231 | static Image pelaaja4Kone4 = LoadImage("Pelaaja4Kone4"); |
---|
232 | static Image pelaaja4Kone4Tykki = LoadImage("Pelaaja4Kone4Tykki"); |
---|
233 | |
---|
234 | static Image[] pelaaja1Koneet = { pelaaja1Kone1, pelaaja1Kone2, pelaaja1Kone3, pelaaja1Kone4 }; |
---|
235 | static Image[] pelaaja2Koneet = { pelaaja2Kone1, pelaaja2Kone2, pelaaja2Kone3, pelaaja2Kone4 }; |
---|
236 | static Image[] pelaaja3Koneet = { pelaaja3Kone1, pelaaja3Kone2, pelaaja3Kone3, pelaaja3Kone4 }; |
---|
237 | static Image[] pelaaja4Koneet = { pelaaja4Kone1, pelaaja4Kone2, pelaaja4Kone3, pelaaja4Kone4 }; |
---|
238 | |
---|
239 | static Image[] pelaaja1Tykit = { pelaaja1Kone1Tykki, pelaaja1Kone2Tykki, pelaaja1Kone3Tykki, pelaaja1Kone4Tykki }; |
---|
240 | static Image[] pelaaja2Tykit = { pelaaja2Kone1Tykki, pelaaja2Kone2Tykki, pelaaja2Kone3Tykki, pelaaja2Kone4Tykki }; |
---|
241 | static Image[] pelaaja3Tykit = { pelaaja3Kone1Tykki, pelaaja3Kone2Tykki, pelaaja3Kone3Tykki, pelaaja3Kone4Tykki }; |
---|
242 | static Image[] pelaaja4Tykit = { pelaaja4Kone1Tykki, pelaaja4Kone2Tykki, pelaaja4Kone3Tykki, pelaaja4Kone4Tykki }; |
---|
243 | |
---|
244 | Image[][] pelaajienKoneet = { pelaaja1Koneet, pelaaja2Koneet, pelaaja3Koneet, pelaaja4Koneet }; |
---|
245 | Image[][] pelaajienTykit = { pelaaja1Tykit, pelaaja2Tykit, pelaaja3Tykit, pelaaja4Tykit }; |
---|
246 | |
---|
247 | static Image perusAmmus1 = LoadImage("Kone1PerusAmmus"); |
---|
248 | static Image perusAmmus2 = LoadImage("Kone2PerusAmmus"); |
---|
249 | static Image perusAmmus3 = LoadImage("Kone3PerusAmmus"); |
---|
250 | static Image perusAmmus4 = LoadImage("Kone4PerusAmmus"); |
---|
251 | |
---|
252 | Image[] perusAmmus = { perusAmmus1, perusAmmus2, perusAmmus3, perusAmmus4 }; |
---|
253 | |
---|
254 | Image hakeutuvaRakettikuva = LoadImage("HakeutuvaRaketti"); |
---|
255 | Image paineAaltoKuva = LoadImage("PaineAalto"); |
---|
256 | Image rakettiKuva = LoadImage("Raketti"); |
---|
257 | Image palloKuva = LoadImage("KimpoilevaPallo"); |
---|
258 | Image telaJaljetKuva = LoadImage("RenkaidenJäljet"); |
---|
259 | Image rajahdysKuva = LoadImage("Rajahdys"); |
---|
260 | Image laser1Kuva = LoadImage("LaserAnimaatio1"); |
---|
261 | Image laser2Kuva = LoadImage("LaserAnimaatio2"); |
---|
262 | Image laser3Kuva = LoadImage("LaserAnimaatio3"); |
---|
263 | Image laser4Kuva = LoadImage("LaserAnimaatio4"); |
---|
264 | Image suojaKilpiKuva = LoadImage("Suojakilpi"); |
---|
265 | Image suojaKilpiTykkiKuva = LoadImage("TykkiSuojaKilpi"); |
---|
266 | Image haulikkoAmmusKuva = LoadImage("haulikkoAmmus"); |
---|
267 | Image superSniperAmmus = LoadImage("SuperSniperAmmus"); |
---|
268 | Image tahtainKuva = LoadImage("Tahtain"); |
---|
269 | Image tahtainKuva2 = LoadImage("Tahtain2"); |
---|
270 | Image tahtainKuva3 = LoadImage("Tahtain3"); |
---|
271 | Image boostKuva1 = LoadImage("BoostKuva1"); |
---|
272 | Image boostKuva2 = LoadImage("BoostKuva2"); |
---|
273 | Image boostKuva3 = LoadImage("BoostKuva3"); |
---|
274 | Image boostKuva4 = LoadImage("BoostKuva4"); |
---|
275 | Image boostKuva5 = LoadImage("BoostKuva5"); |
---|
276 | Image boostKuva6 = LoadImage("BoostKuva6"); |
---|
277 | Image boostKuva7 = LoadImage("BoostKuva7"); |
---|
278 | Image boostKuva8 = LoadImage("BoostKuva8"); |
---|
279 | Image boostKuva9 = LoadImage("BoostKuva9"); |
---|
280 | Image[] boostinKuvat = LoadImages( |
---|
281 | "BoostKuva1", |
---|
282 | "BoostKuva2", |
---|
283 | "BoostKuva3", |
---|
284 | "BoostKuva4", |
---|
285 | "BoostKuva5", |
---|
286 | "BoostKuva6", |
---|
287 | "BoostKuva7", |
---|
288 | "BoostKuva8", |
---|
289 | "BoostKuva9" |
---|
290 | ); |
---|
291 | Image[] pelaaja1MonsterKavelyKuvat = LoadImages( |
---|
292 | "Pelaaja1MonsterKavelyAnimaatio1", |
---|
293 | "Pelaaja1MonsterKavelyAnimaatio2", |
---|
294 | "Pelaaja1MonsterKavelyAnimaatio3" |
---|
295 | ); |
---|
296 | |
---|
297 | Image[] pelaaja2MonsterKavelyKuvat = LoadImages( |
---|
298 | "Pelaaja2MonsterKavelyAnimaatio1", |
---|
299 | "Pelaaja2MonsterKavelyAnimaatio2", |
---|
300 | "Pelaaja2MonsterKavelyAnimaatio3" |
---|
301 | ); |
---|
302 | |
---|
303 | Image[] pelaaja3MonsterKavelyKuvat = LoadImages( |
---|
304 | "Pelaaja3MonsterKavelyAnimaatio1", |
---|
305 | "Pelaaja3MonsterKavelyAnimaatio2", |
---|
306 | "Pelaaja3MonsterKavelyAnimaatio3" |
---|
307 | ); |
---|
308 | |
---|
309 | Image[] pelaaja4MonsterKavelyKuvat = LoadImages( |
---|
310 | "Pelaaja4MonsterKavelyAnimaatio1", |
---|
311 | "Pelaaja4MonsterKavelyAnimaatio2", |
---|
312 | "Pelaaja4MonsterKavelyAnimaatio3" |
---|
313 | ); |
---|
314 | |
---|
315 | |
---|
316 | public Image liekkiKuva = LoadImage("Liekki"); |
---|
317 | SoundEffect ammusAani = LoadSoundEffect("AmmusÄäni"); |
---|
318 | SoundEffect raketinAani = LoadSoundEffect("RakettiAani"); |
---|
319 | SoundEffect palloAani = LoadSoundEffect("PalloAani"); |
---|
320 | SoundEffect boostiAani = LoadSoundEffect("BoostiAani"); |
---|
321 | SoundEffect laserAani = LoadSoundEffect("LaserAani"); |
---|
322 | SoundEffect laserAmmusAani = LoadSoundEffect("LaserAmmusAani"); |
---|
323 | SoundEffect shieldAani = LoadSoundEffect("ShieldAani2"); |
---|
324 | SoundEffect haulikkoAani = LoadSoundEffect("HaulikkoAani"); |
---|
325 | SoundEffect tankkiAaniMuokattu = LoadSoundEffect("TankkiAaniMuokattu"); |
---|
326 | SoundEffect tankkiAani = LoadSoundEffect("TankkiAani"); |
---|
327 | SoundEffect rajahdysAani = LoadSoundEffect("RajahdysAani"); |
---|
328 | SoundEffect laserAani2 = LoadSoundEffect("LaserAani2"); |
---|
329 | SoundEffect aaltoAani = LoadSoundEffect("AaltoAani"); |
---|
330 | SoundEffect tahtainAani = LoadSoundEffect("TahtainAani"); |
---|
331 | SoundEffect tahtainAani2 = LoadSoundEffect("TahtainAani2"); |
---|
332 | SoundEffect valahdysAani = LoadSoundEffect("ValahdysAani"); |
---|
333 | SoundEffect superSniperAani = LoadSoundEffect("superSniperAmmusAani"); |
---|
334 | Pelaaja pelaaja1; |
---|
335 | MultiSelectWindow alkuValikko; |
---|
336 | int pelaajienMaara = 2; |
---|
337 | |
---|
338 | List<Pelaaja> pelaajat = new List<Pelaaja>(); |
---|
339 | |
---|
340 | public override void Begin() |
---|
341 | { |
---|
342 | |
---|
343 | Alkuvalikko(); |
---|
344 | //LuoKentta(); |
---|
345 | PhoneBackButton.Listen(ConfirmExit, "Lopeta peli"); |
---|
346 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); |
---|
347 | |
---|
348 | } |
---|
349 | |
---|
350 | void Alkuvalikko() |
---|
351 | { |
---|
352 | MediaPlayer.Play("MenuMusic"); |
---|
353 | MediaPlayer.IsRepeating = true; |
---|
354 | |
---|
355 | alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", |
---|
356 | "Pelaa", "Lopeta"); |
---|
357 | Add(alkuValikko); |
---|
358 | alkuValikko.AddItemHandler(0, PelaajaMaara); |
---|
359 | alkuValikko.AddItemHandler(1, Exit); |
---|
360 | |
---|
361 | |
---|
362 | } |
---|
363 | |
---|
364 | void PelaajaMaara() |
---|
365 | { |
---|
366 | alkuValikko.Destroy(); |
---|
367 | alkuValikko = new MultiSelectWindow("Pelaajien määrä", "2 Pelaajaa", "3 Pelaajaa", "4 Pelaajaa"); |
---|
368 | Add(alkuValikko); |
---|
369 | alkuValikko.AddItemHandler(0, LuoKentta); |
---|
370 | alkuValikko.AddItemHandler(1, delegate { pelaajienMaara = 3; LuoKentta(); }); |
---|
371 | alkuValikko.AddItemHandler(2, delegate { pelaajienMaara = 4; LuoKentta(); }); |
---|
372 | } |
---|
373 | |
---|
374 | void LuoKentta() |
---|
375 | { |
---|
376 | MediaPlayer.Stop(); |
---|
377 | alkuValikko.Destroy(); |
---|
378 | switch (RandomGen.NextInt(4)) |
---|
379 | { |
---|
380 | case 0: |
---|
381 | MediaPlayer.Play("Music1"); |
---|
382 | MediaPlayer.IsRepeating = true; |
---|
383 | break; |
---|
384 | case 1: |
---|
385 | MediaPlayer.Play("Music2"); |
---|
386 | MediaPlayer.IsRepeating = true; |
---|
387 | break; |
---|
388 | case 2: |
---|
389 | MediaPlayer.Play("Music3"); |
---|
390 | MediaPlayer.IsRepeating = true; |
---|
391 | break; |
---|
392 | case 3: |
---|
393 | MediaPlayer.Play("Music4"); |
---|
394 | MediaPlayer.IsRepeating = true; |
---|
395 | break; |
---|
396 | } |
---|
397 | |
---|
398 | MediaPlayer.Volume = 0.5; |
---|
399 | string Kenttä = RandomGen.SelectOne<string>("Kenttä1", "Kenttä2", "Kenttä3", "Kenttä4", "Kenttä5", "Kenttä6", "Kenttä7", "Kenttä8", "Kenttä9"); |
---|
400 | ColorTileMap ruudut = ColorTileMap.FromLevelAsset(Kenttä); |
---|
401 | |
---|
402 | |
---|
403 | ruudut.SetTileMethod(Color.FromHexCode("0026FF"), LuoPelaaja1); |
---|
404 | ruudut.SetTileMethod(Color.Cyan, LuoPelaaja2); |
---|
405 | if (pelaajienMaara >= 3) |
---|
406 | { |
---|
407 | ruudut.SetTileMethod(Color.BrightGreen, LuoPelaaja3); |
---|
408 | } |
---|
409 | if (pelaajienMaara == 4) |
---|
410 | { |
---|
411 | ruudut.SetTileMethod(Color.Rose, LuoPelaaja4); |
---|
412 | } |
---|
413 | ruudut.SetTileMethod(Color.Black, LuoPalikka); |
---|
414 | Level.Background.Color = Color.LightGray; |
---|
415 | |
---|
416 | ruudut.Execute(80, 80); |
---|
417 | Wind = new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)); |
---|
418 | Camera.ZoomToLevel(); |
---|
419 | } |
---|
420 | |
---|
421 | void OhjaaTahtain(Tankkipelaaja pelaaja, Vector suunta) |
---|
422 | { |
---|
423 | if (pelaaja.tahtain != null && pelaaja.tahtain.Image != tahtainKuva2) |
---|
424 | { |
---|
425 | pelaaja.tahtain.Move(suunta); |
---|
426 | } |
---|
427 | |
---|
428 | } |
---|
429 | |
---|
430 | Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr) |
---|
431 | { |
---|
432 | Pelaaja luotuPelaaja; |
---|
433 | |
---|
434 | //luotuPelaaja = LuoTankkiPelaaja(paikka, leveys, korkeus, pelaajanr); |
---|
435 | luotuPelaaja = LuoMonsteriPelaaja(paikka, leveys, korkeus, pelaajanr); |
---|
436 | return luotuPelaaja; |
---|
437 | } |
---|
438 | |
---|
439 | MonsteriPelaaja LuoMonsteriPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr) |
---|
440 | { |
---|
441 | //int valinta = RandomGen.NextInt(0,3); |
---|
442 | int valinta = 1; |
---|
443 | MonsteriPelaaja pelaaja = new MonsteriPelaaja(leveys, korkeus, valinta, pelaaja1MonsterKavelyKuvat[0]); |
---|
444 | pelaaja.Position = paikka; |
---|
445 | |
---|
446 | GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour }; |
---|
447 | //kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja); |
---|
448 | //kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja); |
---|
449 | |
---|
450 | //kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta); |
---|
451 | //kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta); |
---|
452 | //kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta); |
---|
453 | //kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Erikoiskyky, "", pelaaja, valinta); |
---|
454 | pelaaja.kontrolleri = kontrollerit[pelaajanr - 1]; |
---|
455 | |
---|
456 | return pelaaja; |
---|
457 | } |
---|
458 | |
---|
459 | Tankkipelaaja LuoTankkiPelaaja(Vector paikka, double leveys, double korkeus, int pelaajanr) |
---|
460 | { |
---|
461 | int valinta = RandomGen.NextInt(pelaaja1Koneet.Length); |
---|
462 | //int valinta = 1; |
---|
463 | |
---|
464 | Tankkipelaaja pelaaja = new Tankkipelaaja(leveys * 0.8, korkeus * 0.8, valinta, pelaajienKoneet[pelaajanr - 1][valinta], pelaajienTykit[pelaajanr - 1][valinta], rajahdysKuva, liekkiKuva, LoadSoundEffect("TankkiAani")); |
---|
465 | pelaaja.AngularDamping = 0.95; |
---|
466 | pelaaja.Position = paikka; |
---|
467 | |
---|
468 | |
---|
469 | GamePad[] kontrollerit = { ControllerOne, ControllerTwo, ControllerThree, ControllerFour }; |
---|
470 | kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.RightStick, 0.0, KaannaTykkia, "", pelaaja); |
---|
471 | kontrollerit[pelaajanr - 1].ListenAnalog(AnalogControl.LeftStick, 0.0, KaannaPelaajaa, "", pelaaja); |
---|
472 | kontrollerit[pelaajanr - 1].Listen(Button.RightTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "perus", valinta); |
---|
473 | kontrollerit[pelaajanr - 1].Listen(Button.LeftTrigger, ButtonState.Pressed, Ammu, "", pelaaja, "raketti", valinta); |
---|
474 | kontrollerit[pelaajanr - 1].Listen(Button.RightShoulder, ButtonState.Pressed, Ammu, "", pelaaja, "pallo", valinta); |
---|
475 | kontrollerit[pelaajanr - 1].Listen(Button.LeftShoulder, ButtonState.Pressed, Erikoiskyky, "", pelaaja, valinta); |
---|
476 | |
---|
477 | if (valinta == 3) |
---|
478 | { |
---|
479 | GameObject tahtain = new GameObject(90, 90); |
---|
480 | tahtain.Position = pelaaja.Position; |
---|
481 | tahtain.Image = tahtainKuva; |
---|
482 | Add(tahtain, 3); |
---|
483 | pelaaja.tahtain = tahtain; |
---|
484 | pelaaja.Destroyed += tahtain.Destroy; |
---|
485 | |
---|
486 | Timer ajastin = new Timer(); |
---|
487 | ajastin.Interval = 0.01; |
---|
488 | ajastin.Timeout += () => tahtain.Angle += Angle.FromDegrees(0.5); |
---|
489 | ajastin.Start(); |
---|
490 | |
---|
491 | double tahtainNopeus = 8; |
---|
492 | kontrollerit[pelaajanr - 1].Listen(Button.DPadRight, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(tahtainNopeus, 0)); |
---|
493 | kontrollerit[pelaajanr - 1].Listen(Button.DPadLeft, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(-tahtainNopeus, 0)); |
---|
494 | kontrollerit[pelaajanr - 1].Listen(Button.DPadUp, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(0, tahtainNopeus)); |
---|
495 | kontrollerit[pelaajanr - 1].Listen(Button.DPadDown, ButtonState.Down, OhjaaTahtain, "", pelaaja, new Vector(0, -tahtainNopeus)); |
---|
496 | |
---|
497 | pelaaja.Nopeus = 1200; |
---|
498 | } |
---|
499 | |
---|
500 | if (valinta == 2) |
---|
501 | { |
---|
502 | pelaaja.Nopeus = 800.0; |
---|
503 | } |
---|
504 | |
---|
505 | pelaaja.kontrolleri = kontrollerit[pelaajanr - 1]; |
---|
506 | |
---|
507 | return pelaaja; |
---|
508 | } |
---|
509 | |
---|
510 | void LuoPelaaja1(Vector paikka, double leveys, double korkeus) |
---|
511 | { |
---|
512 | pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, 1); |
---|
513 | |
---|
514 | |
---|
515 | Add(pelaaja1); |
---|
516 | pelaajat.Add(pelaaja1); |
---|
517 | } |
---|
518 | |
---|
519 | void LuoPalikka(Vector paikka, double leveys, double korkeus) |
---|
520 | { |
---|
521 | PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus); |
---|
522 | palikka.Shape = Shape.Rectangle; |
---|
523 | palikka.Position = paikka; |
---|
524 | palikka.Image = palikkaKuva; |
---|
525 | Add(palikka); |
---|
526 | } |
---|
527 | |
---|
528 | |
---|
529 | void LuoPelaaja2(Vector paikka, double leveys, double korkeus) |
---|
530 | { |
---|
531 | |
---|
532 | Pelaaja pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, 2); |
---|
533 | |
---|
534 | |
---|
535 | Add(pelaaja2); |
---|
536 | pelaajat.Add(pelaaja2); |
---|
537 | } |
---|
538 | |
---|
539 | void LuoPelaaja3(Vector paikka, double leveys, double korkeus) |
---|
540 | { |
---|
541 | |
---|
542 | Pelaaja pelaaja3 = LuoPelaaja(paikka, leveys, korkeus, 3); |
---|
543 | |
---|
544 | |
---|
545 | Add(pelaaja3); |
---|
546 | pelaajat.Add(pelaaja3); |
---|
547 | } |
---|
548 | |
---|
549 | void LuoPelaaja4(Vector paikka, double leveys, double korkeus) |
---|
550 | { |
---|
551 | |
---|
552 | Pelaaja pelaaja4 = LuoPelaaja(paikka, leveys, korkeus, 4); |
---|
553 | |
---|
554 | |
---|
555 | Add(pelaaja4); |
---|
556 | pelaajat.Add(pelaaja4); |
---|
557 | } |
---|
558 | |
---|
559 | void LuoElamaLaskuri(Pelaaja pelaaja) |
---|
560 | { |
---|
561 | ProgressBar elamaPalkki = new ProgressBar(150, 20); |
---|
562 | elamaPalkki.BindTo(pelaaja.healthit); |
---|
563 | |
---|
564 | Timer ajastin = new Timer(); |
---|
565 | ajastin.Interval = 0.01; |
---|
566 | ajastin.Timeout += delegate |
---|
567 | { |
---|
568 | elamaPalkki.AbsolutePosition = pelaaja.Position; |
---|
569 | }; |
---|
570 | |
---|
571 | ajastin.Start(); |
---|
572 | } |
---|
573 | |
---|
574 | void KaannaPelaajaa(AnalogState tatinTila, Tankkipelaaja pelaaja) |
---|
575 | { |
---|
576 | if (pelaaja.voiLiikkua) |
---|
577 | { |
---|
578 | if (!pelaaja.liikkuu) |
---|
579 | { |
---|
580 | pelaaja.tankkiAani.Play(0.5, 0.0, 0.0); |
---|
581 | pelaaja.liikkuu = true; |
---|
582 | } |
---|
583 | if (tatinTila.StateVector.Magnitude < 0.1) |
---|
584 | { |
---|
585 | pelaaja.tankkiAani.Stop(); |
---|
586 | pelaaja.liikkuu = false; |
---|
587 | } |
---|
588 | |
---|
589 | Angle vanhaKulma = pelaaja.Angle; |
---|
590 | pelaaja.Angle = tatinTila.StateVector.Angle; |
---|
591 | |
---|
592 | Angle kulmanMuutos = pelaaja.Angle - vanhaKulma; |
---|
593 | |
---|
594 | if (pelaaja.telaJaljetLimit && pelaaja.IsVisible) |
---|
595 | { |
---|
596 | pelaaja.telaJaljetLimit = false; |
---|
597 | |
---|
598 | GameObject telaJaljet = new GameObject(telaJaljetKuva); |
---|
599 | telaJaljet.Angle = pelaaja.Angle; |
---|
600 | telaJaljet.Position = pelaaja.Position; |
---|
601 | |
---|
602 | Add(telaJaljet, -1); |
---|
603 | |
---|
604 | Timer.SingleShot(0.05, delegate { pelaaja.telaJaljetLimit = true; }); |
---|
605 | |
---|
606 | |
---|
607 | Timer.SingleShot(RandomGen.NextDouble(5.0, 30.0), delegate { telaJaljet.Destroy(); }); |
---|
608 | } |
---|
609 | |
---|
610 | pelaaja.Push(tatinTila.StateVector * pelaaja.Nopeus); |
---|
611 | } |
---|
612 | |
---|
613 | } |
---|
614 | void KaannaPelaajaa(AnalogState tatinTila, Pelaaja pelaaja) |
---|
615 | { |
---|
616 | if (pelaaja.voiLiikkua) |
---|
617 | { |
---|
618 | if (!pelaaja.liikkuu) |
---|
619 | { |
---|
620 | |
---|
621 | pelaaja.liikkuu = true; |
---|
622 | } |
---|
623 | if (tatinTila.StateVector.Magnitude < 0.1) |
---|
624 | { |
---|
625 | |
---|
626 | pelaaja.liikkuu = false; |
---|
627 | } |
---|
628 | |
---|
629 | Angle vanhaKulma = pelaaja.Angle; |
---|
630 | pelaaja.Angle = tatinTila.StateVector.Angle; |
---|
631 | |
---|
632 | Angle kulmanMuutos = pelaaja.Angle - vanhaKulma; |
---|
633 | |
---|
634 | |
---|
635 | |
---|
636 | pelaaja.Push(tatinTila.StateVector * pelaaja.Nopeus); |
---|
637 | } |
---|
638 | |
---|
639 | } |
---|
640 | |
---|
641 | void KaannaTykkia(AnalogState tatinTila, Tankkipelaaja pelaaja) |
---|
642 | { |
---|
643 | //if (pelaaja.voiLiikkua) |
---|
644 | { |
---|
645 | pelaaja.Ase.AbsoluteAngle = tatinTila.StateVector.Angle; |
---|
646 | } |
---|
647 | } |
---|
648 | |
---|
649 | void Ammu(Tankkipelaaja pelaaja, String ammusTyyppi, int konenr) |
---|
650 | { |
---|
651 | if (pelaaja.voiLiikkua) |
---|
652 | { |
---|
653 | pelaaja.Ase.AttackSound = null; |
---|
654 | PhysicsObject ammus = pelaaja.Ase.Shoot(); |
---|
655 | if (ammus != null) |
---|
656 | { |
---|
657 | switch (ammusTyyppi) |
---|
658 | { |
---|
659 | case "perus": |
---|
660 | ammusAani.Play(); |
---|
661 | ammus.Image = perusAmmus[konenr]; |
---|
662 | if (konenr == 2) |
---|
663 | { |
---|
664 | ammus.Height = 25; |
---|
665 | } |
---|
666 | ammus.Tag = "perusAmmus"; |
---|
667 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
668 | { |
---|
669 | a.Destroy(); |
---|
670 | }); |
---|
671 | Timer perusAjastin = new Timer(); |
---|
672 | perusAjastin.Interval = 0.1; |
---|
673 | perusAjastin.Timeout += delegate |
---|
674 | { |
---|
675 | ammus = pelaaja.Ase.Shoot(); |
---|
676 | if (ammus != null) |
---|
677 | { |
---|
678 | ammusAani.Play(); |
---|
679 | ammus.Image = perusAmmus[konenr]; |
---|
680 | if (konenr == 2) |
---|
681 | { |
---|
682 | ammus.Height = 25; |
---|
683 | } |
---|
684 | ammus.Tag = "perusAmmus"; |
---|
685 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
686 | { |
---|
687 | a.Destroy(); |
---|
688 | }); |
---|
689 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
690 | } |
---|
691 | }; |
---|
692 | perusAjastin.Start(2); |
---|
693 | pelaaja.Ase.FireRate = 10; |
---|
694 | break; |
---|
695 | case "raketti": |
---|
696 | if (konenr == 0 || konenr == 1) |
---|
697 | { |
---|
698 | raketinAani.Play(); |
---|
699 | ammus.Image = rakettiKuva; |
---|
700 | ammus.Tag = "raketti"; |
---|
701 | ammus.Size *= 2.5; |
---|
702 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
703 | { |
---|
704 | a.Destroy(); |
---|
705 | Explosion rajahdys = new Explosion(140); |
---|
706 | rajahdys.Sound = rajahdysAani; |
---|
707 | rajahdys.Position = a.Position; |
---|
708 | rajahdys.ShockwaveReachesObject += RajahdysOsuu; |
---|
709 | Add(rajahdys); |
---|
710 | raketinAani.Stop(); |
---|
711 | }); |
---|
712 | pelaaja.Ase.FireRate = 0.45; |
---|
713 | |
---|
714 | if (konenr == 1) |
---|
715 | { |
---|
716 | Pelaaja[] kohdePelaajat = new Tankkipelaaja[pelaajat.Count - 1]; |
---|
717 | for (int i = 0, j = 0; i < pelaajat.Count; i++) |
---|
718 | { |
---|
719 | if (pelaajat[i] != pelaaja) |
---|
720 | { |
---|
721 | kohdePelaajat[j] = pelaajat[i]; |
---|
722 | j++; |
---|
723 | } |
---|
724 | } |
---|
725 | |
---|
726 | ammus.Image = hakeutuvaRakettikuva; |
---|
727 | |
---|
728 | |
---|
729 | FollowerBrain seuraajanAivot = new FollowerBrain(kohdePelaajat); |
---|
730 | seuraajanAivot.TurnSpeed = UnlimitedAngle.FromDegrees(45); |
---|
731 | //seuraajanAivot.TurnWhileMoving = true; |
---|
732 | seuraajanAivot.Speed = 525; |
---|
733 | ammus.Brain = seuraajanAivot; |
---|
734 | |
---|
735 | Timer ajastin = new Timer(); |
---|
736 | ajastin.Interval = 0.1; |
---|
737 | ajastin.Timeout += delegate |
---|
738 | { |
---|
739 | ammus.AbsoluteAngle = ammus.Velocity.Angle; |
---|
740 | if (ammus.IsDestroyed) |
---|
741 | { |
---|
742 | ajastin.Stop(); |
---|
743 | } |
---|
744 | }; |
---|
745 | ajastin.Start(); |
---|
746 | } |
---|
747 | } |
---|
748 | else if (konenr == 2) |
---|
749 | { |
---|
750 | ammus.Velocity = ammus.Velocity * 0.8; |
---|
751 | ammus.Image = haulikkoAmmusKuva; |
---|
752 | ammus.Tag = "haulikko"; |
---|
753 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
754 | { |
---|
755 | a.Destroy(); |
---|
756 | }); |
---|
757 | pelaaja.Ase.FireRate = 100; |
---|
758 | |
---|
759 | int maara = 10; |
---|
760 | |
---|
761 | |
---|
762 | Timer haulikkoajastin = new Timer(); |
---|
763 | haulikkoAani.Play(); |
---|
764 | haulikkoajastin.Interval = 0.01; |
---|
765 | haulikkoajastin.Timeout += delegate |
---|
766 | { |
---|
767 | ammus = pelaaja.Ase.Shoot(); |
---|
768 | if (ammus != null) |
---|
769 | { |
---|
770 | ammus.Velocity = ammus.Velocity * 0.8; |
---|
771 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
772 | ammus.Image = haulikkoAmmusKuva; |
---|
773 | ammus.Tag = "haulikko"; |
---|
774 | Vector suunta = Vector.FromLengthAndAngle(ammus.Velocity.Magnitude, (ammus.Velocity.Angle) + Angle.FromDegrees(RandomGen.NextDouble(-10.0, 10.0))); |
---|
775 | ammus.Velocity = suunta; |
---|
776 | AddCollisionHandler(ammus, delegate (PhysicsObject a, PhysicsObject b) |
---|
777 | { |
---|
778 | a.Destroy(); |
---|
779 | }); |
---|
780 | |
---|
781 | |
---|
782 | } |
---|
783 | }; |
---|
784 | haulikkoajastin.Start(maara); |
---|
785 | Timer.SingleShot(0.01 * maara + 0.01, delegate |
---|
786 | { |
---|
787 | pelaaja.Ase.FireRate = 0.4; |
---|
788 | }); |
---|
789 | } |
---|
790 | else if (konenr == 3) |
---|
791 | { |
---|
792 | ammus.Destroy(); |
---|
793 | if (pelaaja.tahtain != null && pelaaja.tahtain.Image == tahtainKuva) |
---|
794 | { |
---|
795 | pelaaja.tahtain.Image = tahtainKuva2; |
---|
796 | tahtainAani.Play(); |
---|
797 | |
---|
798 | Timer.SingleShot(0.75, delegate // aika jonka jälkeen tulee räjähdys |
---|
799 | { |
---|
800 | Explosion rajahdys = new Explosion(140); |
---|
801 | rajahdys.Sound = rajahdysAani; |
---|
802 | rajahdys.Position = pelaaja.tahtain.Position; |
---|
803 | rajahdys.ShockwaveReachesObject += TahtainRajahdysOsuu; |
---|
804 | Add(rajahdys); |
---|
805 | |
---|
806 | pelaaja.tahtain.Image = tahtainKuva3; |
---|
807 | Timer.SingleShot(3.5, delegate // aika jonka jälkeen voi taas ampua |
---|
808 | { |
---|
809 | tahtainAani2.Play(); |
---|
810 | pelaaja.tahtain.Image = tahtainKuva; |
---|
811 | }); |
---|
812 | }); |
---|
813 | } |
---|
814 | } |
---|
815 | break; |
---|
816 | case "pallo": |
---|
817 | if (konenr == 0) |
---|
818 | { |
---|
819 | palloAani.Play(); |
---|
820 | ammus.Image = palloKuva; |
---|
821 | ammus.Tag = "pallo"; |
---|
822 | ammus.Size *= 5; |
---|
823 | ammus.MaximumLifetime = new TimeSpan(0, 0, 4); |
---|
824 | pelaaja.Ase.FireRate = 0.75; |
---|
825 | } |
---|
826 | // Tähän tulee laser, ei pallo |
---|
827 | else if (konenr == 2) |
---|
828 | { |
---|
829 | Animation ammusAnim = new Animation(new Image[] { laser2Kuva, laser3Kuva, laser4Kuva }); |
---|
830 | laserAmmusAani.Play(); |
---|
831 | pelaaja.voiLiikkua = false; |
---|
832 | pelaaja.Stop(); |
---|
833 | pelaaja.Ase.FireRate = 100; |
---|
834 | ammus.IgnoresCollisionResponse = true; |
---|
835 | ammus.IgnoresExplosions = true; |
---|
836 | ammus.Image = laser1Kuva; |
---|
837 | ammus.Tag = "none"; |
---|
838 | ammus.Size = new Vector(3000, 10); |
---|
839 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1480, 0) + ammus.Angle.Sin * new Vector(0, 1480); |
---|
840 | ammus.Velocity = new Vector(0, 0); |
---|
841 | |
---|
842 | Timer tahtaysAjastin = new Timer(); |
---|
843 | tahtaysAjastin.Interval = 0.1; |
---|
844 | tahtaysAjastin.Timeout += delegate |
---|
845 | { |
---|
846 | ammus.Angle = pelaaja.Ase.Angle; |
---|
847 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
848 | ammus.Velocity = new Vector(0, 0); |
---|
849 | }; |
---|
850 | tahtaysAjastin.Start(1); |
---|
851 | |
---|
852 | Timer.SingleShot(1.5, delegate |
---|
853 | { |
---|
854 | ammus.Destroy(); |
---|
855 | ammus = pelaaja.Ase.Shoot(); |
---|
856 | if (ammus != null) |
---|
857 | { |
---|
858 | pelaaja.voiLiikkua = false; |
---|
859 | pelaaja.Stop(); |
---|
860 | pelaaja.Ase.FireRate = 100; |
---|
861 | ammus.IgnoresCollisionResponse = true; |
---|
862 | ammus.IgnoresExplosions = true; |
---|
863 | ammus.Tag = "laser"; |
---|
864 | ammus.Animation = ammusAnim; |
---|
865 | ammus.Size = new Vector(3000, 40); |
---|
866 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
867 | ammus.Velocity = new Vector(0, 0); |
---|
868 | ammus.Animation.Start(); |
---|
869 | Timer ajastin = new Timer(); |
---|
870 | laserAani.Play(); |
---|
871 | ajastin.Interval = 0.05; |
---|
872 | ajastin.Timeout += delegate |
---|
873 | { |
---|
874 | if (ammus != null) |
---|
875 | { |
---|
876 | ammus.Destroy(); |
---|
877 | } |
---|
878 | ammus = pelaaja.Ase.Shoot(); |
---|
879 | if (ammus != null) |
---|
880 | { |
---|
881 | ammus.IgnoresCollisionResponse = true; |
---|
882 | ammus.IgnoresExplosions = true; |
---|
883 | ammus.Tag = "laser"; |
---|
884 | ammus.Animation = ammusAnim; |
---|
885 | ammus.Size = new Vector(3000, 40); |
---|
886 | ammus.Position = pelaaja.Position + ammus.Angle.Cos * new Vector(1550, 0) + ammus.Angle.Sin * new Vector(0, 1550); |
---|
887 | ammus.Velocity = new Vector(0, 0); |
---|
888 | ammus.Animation.Start(); |
---|
889 | } |
---|
890 | }; |
---|
891 | ajastin.Start(40); |
---|
892 | } |
---|
893 | }); |
---|
894 | Timer.SingleShot(3.55, delegate |
---|
895 | { |
---|
896 | if (ammus != null) |
---|
897 | { |
---|
898 | ammus.Destroy(); |
---|
899 | } |
---|
900 | pelaaja.voiLiikkua = true; |
---|
901 | pelaaja.Ase.FireRate = 0.2; |
---|
902 | }); |
---|
903 | } |
---|
904 | else if(konenr == 3) |
---|
905 | { |
---|
906 | ammus.Image = superSniperAmmus; |
---|
907 | ammus.Tag = "superSniperAmmus"; |
---|
908 | superSniperAani.Play(); |
---|
909 | ammus.Width *= 4.0; |
---|
910 | ammus.Height *= 1; |
---|
911 | ammus.IgnoresCollisionResponse = true; |
---|
912 | ammus.Velocity *= 5.0; |
---|
913 | ammus.LifetimeLeft = TimeSpan.FromSeconds(3); |
---|
914 | pelaaja.Ase.FireRate = 0.33; |
---|
915 | } |
---|
916 | else |
---|
917 | { |
---|
918 | ammus.Destroy(); |
---|
919 | Explosion poks = new Explosion(200); |
---|
920 | poks.Position = pelaaja.Position; |
---|
921 | poks.Animation = null; |
---|
922 | poks.Speed = 1000; |
---|
923 | poks.Image = paineAaltoKuva; |
---|
924 | poks.Sound = aaltoAani; |
---|
925 | poks.AddShockwaveHandler("raketti", delegate (IPhysicsObject a, Vector v) |
---|
926 | { |
---|
927 | a.Brain.Active = false; |
---|
928 | }); |
---|
929 | pelaaja.IgnoresExplosions = true; |
---|
930 | Add(poks); |
---|
931 | Timer ajastin = new Timer(); |
---|
932 | Timer.SingleShot(0.5, delegate { pelaaja.IgnoresExplosions = false; }); |
---|
933 | pelaaja.Ase.FireRate = 0.33; |
---|
934 | ajastin.Start(); |
---|
935 | |
---|
936 | } |
---|
937 | break; |
---|
938 | default: |
---|
939 | break; |
---|
940 | } |
---|
941 | |
---|
942 | ammus.Position += pelaaja.Ase.Angle.GetVector() * 70; |
---|
943 | |
---|
944 | |
---|
945 | } |
---|
946 | } |
---|
947 | |
---|
948 | } |
---|
949 | |
---|
950 | void RajahdysOsuu(IPhysicsObject olio, Vector suunta) |
---|
951 | { |
---|
952 | if (olio.Tag.Equals("pelaaja")) |
---|
953 | { |
---|
954 | ((Tankkipelaaja)olio).healthit.Value -= 4; |
---|
955 | ((Tankkipelaaja)olio).SavuLiekki(); |
---|
956 | } |
---|
957 | } |
---|
958 | |
---|
959 | void TahtainRajahdysOsuu(IPhysicsObject olio, Vector suunta) |
---|
960 | { |
---|
961 | if (olio.Tag.Equals("pelaaja")) |
---|
962 | { |
---|
963 | ((Tankkipelaaja)olio).healthit.Value -= 25; |
---|
964 | ((Tankkipelaaja)olio).SavuLiekki(); |
---|
965 | } |
---|
966 | } |
---|
967 | |
---|
968 | void Erikoiskyky(Tankkipelaaja pelaaja, int konenr) |
---|
969 | { |
---|
970 | // Koneelle 0 pelkkä boosti |
---|
971 | if (pelaaja.erikoiskyky) |
---|
972 | { |
---|
973 | int nopeus = 1000; |
---|
974 | GameObject Animaatio = new GameObject(120, 120); |
---|
975 | Animaatio.Position = pelaaja.Position; |
---|
976 | Animaatio.Angle = pelaaja.Angle; |
---|
977 | Add(Animaatio); |
---|
978 | Animation boostAnimaatio = new Animation(boostinKuvat); |
---|
979 | Animaatio.Animation = boostAnimaatio; |
---|
980 | Animaatio.Animation.Start(); |
---|
981 | Animaatio.Animation.FPS = 30; |
---|
982 | Animaatio.Animation.StopOnLastFrame = true; |
---|
983 | Animaatio.Animation.Played += delegate |
---|
984 | { |
---|
985 | Animaatio.Destroy(); |
---|
986 | |
---|
987 | |
---|
988 | }; |
---|
989 | |
---|
990 | // Koneelle 1 näkymättömyys ja boosti |
---|
991 | if (konenr == 1) |
---|
992 | { |
---|
993 | nopeus = 750; |
---|
994 | |
---|
995 | pelaaja.IsVisible = false; |
---|
996 | pelaaja.Ase.IsVisible = false; |
---|
997 | if (pelaaja.savunSeuraajaAjastin != null) pelaaja.savunSeuraajaAjastin.Stop(); |
---|
998 | if (pelaaja.liekkiAjastin != null) pelaaja.liekkiAjastin.Stop(); |
---|
999 | |
---|
1000 | Timer.SingleShot(1.25, delegate |
---|
1001 | { |
---|
1002 | pelaaja.IsVisible = true; |
---|
1003 | pelaaja.Ase.IsVisible = true; |
---|
1004 | if (pelaaja.savunSeuraajaAjastin != null) pelaaja.savunSeuraajaAjastin.Start(); |
---|
1005 | if (pelaaja.liekkiAjastin != null) pelaaja.liekkiAjastin.Start(); |
---|
1006 | }); |
---|
1007 | } |
---|
1008 | |
---|
1009 | //Koneelle 3 välähdys |
---|
1010 | if (konenr == 3) |
---|
1011 | { |
---|
1012 | GameObject valahdys = new GameObject(6000, 6000); |
---|
1013 | valahdys.LifetimeLeft = TimeSpan.FromSeconds(0.6); |
---|
1014 | valahdys.FadeColorTo(Color.Transparent, 0.5); |
---|
1015 | valahdysAani.Play(); |
---|
1016 | Add(valahdys, 3); |
---|
1017 | |
---|
1018 | pelaaja.erikoiskyky = false; |
---|
1019 | |
---|
1020 | Timer.SingleShot(6.0, delegate |
---|
1021 | { |
---|
1022 | pelaaja.erikoiskyky = true; |
---|
1023 | }); |
---|
1024 | |
---|
1025 | foreach (var ammus in GetObjectsWithTag("perusAmmus")) |
---|
1026 | { |
---|
1027 | ammus.Destroy(); |
---|
1028 | } |
---|
1029 | foreach (var ammus in GetObjectsWithTag("raketti")) |
---|
1030 | { |
---|
1031 | ammus.Destroy(); |
---|
1032 | } |
---|
1033 | foreach (var ammus in GetObjectsWithTag("pallo")) |
---|
1034 | { |
---|
1035 | ammus.Destroy(); |
---|
1036 | } |
---|
1037 | foreach (var ammus in GetObjectsWithTag("haulikko")) |
---|
1038 | { |
---|
1039 | ammus.Destroy(); |
---|
1040 | } |
---|
1041 | foreach (var ammus in GetObjectsWithTag("supersniperammus")) |
---|
1042 | { |
---|
1043 | ammus.Destroy(); |
---|
1044 | } |
---|
1045 | return; |
---|
1046 | } |
---|
1047 | |
---|
1048 | // Koneelle 2 pelkkä shield, ei boostia |
---|
1049 | if (konenr == 2) |
---|
1050 | { |
---|
1051 | GameObject shield = new GameObject(pelaaja.Width + 10, pelaaja.Height + 10); |
---|
1052 | shield.Image = suojaKilpiKuva; |
---|
1053 | pelaaja.Add(shield); |
---|
1054 | |
---|
1055 | GameObject tykkiShield = new GameObject(pelaaja.Ase.Width, pelaaja.Ase.Height); |
---|
1056 | tykkiShield.Image = suojaKilpiTykkiKuva; |
---|
1057 | pelaaja.Ase.Add(tykkiShield); |
---|
1058 | |
---|
1059 | pelaaja.IgnoresExplosions = true; |
---|
1060 | pelaaja.vahinkoKerroin = 0; |
---|
1061 | |
---|
1062 | pelaaja.erikoiskyky = false; |
---|
1063 | shieldAani.Play(); |
---|
1064 | |
---|
1065 | Timer.SingleShot(1.75, delegate |
---|
1066 | { |
---|
1067 | pelaaja.IgnoresExplosions = false; |
---|
1068 | pelaaja.vahinkoKerroin = 1; |
---|
1069 | shield.Destroy(); |
---|
1070 | tykkiShield.Destroy(); |
---|
1071 | }); |
---|
1072 | |
---|
1073 | Timer.SingleShot(5.75, delegate |
---|
1074 | { |
---|
1075 | pelaaja.erikoiskyky = true; |
---|
1076 | }); |
---|
1077 | |
---|
1078 | return; |
---|
1079 | } |
---|
1080 | |
---|
1081 | pelaaja.erikoiskyky = false; |
---|
1082 | pelaaja.Hit(pelaaja.Angle.GetVector() * nopeus); |
---|
1083 | boostiAani.Play(); |
---|
1084 | Timer.SingleShot(4.5, delegate |
---|
1085 | { |
---|
1086 | pelaaja.erikoiskyky = true; |
---|
1087 | }); |
---|
1088 | |
---|
1089 | |
---|
1090 | } |
---|
1091 | |
---|
1092 | } |
---|
1093 | |
---|
1094 | |
---|
1095 | public void TarkistaTatti() |
---|
1096 | { |
---|
1097 | /* |
---|
1098 | if (pelaaja1 != null && ControllerOne.LeftThumbDirection.Magnitude < 0.001) |
---|
1099 | { |
---|
1100 | tankkiAani.Stop(); |
---|
1101 | pelaaja1.liikkuu = false; |
---|
1102 | } |
---|
1103 | */ |
---|
1104 | |
---|
1105 | |
---|
1106 | |
---|
1107 | for (int i = 0; i < pelaajat.Count; i++) |
---|
1108 | { |
---|
1109 | if (pelaajat != null && pelaajat.Count > i && pelaajat[i].kontrolleri.LeftThumbDirection.Magnitude < 0.0001) |
---|
1110 | { |
---|
1111 | Pelaaja pelaaja = pelaajat[i]; |
---|
1112 | if (pelaaja is Tankkipelaaja) |
---|
1113 | { |
---|
1114 | ((Tankkipelaaja)pelaaja).tankkiAani.Stop(); |
---|
1115 | } |
---|
1116 | pelaaja.liikkuu = false; |
---|
1117 | } |
---|
1118 | } |
---|
1119 | |
---|
1120 | } |
---|
1121 | |
---|
1122 | protected override void Update(Time time) |
---|
1123 | { |
---|
1124 | base.Update(time); |
---|
1125 | TarkistaTatti(); |
---|
1126 | } |
---|
1127 | |
---|
1128 | } |
---|