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 | // apuva lista: |
---|
10 | |
---|
11 | public class MikonPhysicsObject : PhysicsObject |
---|
12 | { |
---|
13 | private bool broken = false; |
---|
14 | private Protokolla236 game; |
---|
15 | public void Break(int method, int pieceCountX = 2, int pieceCountY = 2) |
---|
16 | { |
---|
17 | if (this.broken) { return; } |
---|
18 | this.Destroy(); |
---|
19 | this.broken = true; |
---|
20 | switch (method) |
---|
21 | { |
---|
22 | case 0://uniform break |
---|
23 | var pieceWidth = this.Width / pieceCountX; |
---|
24 | var pieceHeight = this.Height / pieceCountY; |
---|
25 | if (pieceWidth < 1 || pieceHeight < 1) { return; } |
---|
26 | //loop x and y through |
---|
27 | //calc left corner |
---|
28 | var startCorner = Vector.FromLengthAndAngle(this.Width / 2 - pieceWidth / 2, this.AbsoluteAngle + Angle.StraightAngle) + Vector.FromLengthAndAngle(this.Height / 2 - pieceHeight / 2, this.AbsoluteAngle - Angle.RightAngle); //vasen alakulma |
---|
29 | |
---|
30 | for (int y = 0; y < pieceCountY; y++) |
---|
31 | { |
---|
32 | for (int x = 0; x < pieceCountX; x++) |
---|
33 | { |
---|
34 | MikonPhysicsObject childBox = new MikonPhysicsObject(this.game, pieceWidth, pieceHeight); |
---|
35 | childBox.Color = this.Color; |
---|
36 | childBox.AbsoluteAngle = this.AbsoluteAngle; |
---|
37 | childBox.AngularVelocity = this.AngularVelocity; |
---|
38 | |
---|
39 | childBox.Position = this.Position + startCorner |
---|
40 | + Vector.FromLengthAndAngle(x * pieceWidth, this.AbsoluteAngle) //plus x |
---|
41 | + Vector.FromLengthAndAngle(y * pieceHeight, this.AbsoluteAngle + Angle.RightAngle); //plus y |
---|
42 | |
---|
43 | childBox.Velocity = this.Velocity; |
---|
44 | |
---|
45 | //childBox.Position += offset; |
---|
46 | |
---|
47 | Game.Add(childBox); |
---|
48 | } |
---|
49 | } |
---|
50 | break; |
---|
51 | } |
---|
52 | } |
---|
53 | public MikonPhysicsObject(Protokolla236 game, double w, double h) |
---|
54 | : base(w, h) |
---|
55 | { |
---|
56 | // TODO: Complete member initialization |
---|
57 | //game.AddCollisionHandler(game.level, this, delegate { this.Break(0, 2, 2); }); |
---|
58 | this.game = game; |
---|
59 | } |
---|
60 | } |
---|
61 | |
---|
62 | public class Portti : PhysicsObject |
---|
63 | { |
---|
64 | public int MistaVie { get; set; } |
---|
65 | public int MihinVie { get; set; } |
---|
66 | public string Vari { get; set; } |
---|
67 | |
---|
68 | public Portti(double leveys, double korkeus) |
---|
69 | : base(leveys, korkeus) |
---|
70 | { |
---|
71 | |
---|
72 | } |
---|
73 | |
---|
74 | } |
---|
75 | |
---|
76 | public class Protokolla236 : PhysicsGame |
---|
77 | { |
---|
78 | |
---|
79 | Image tausta = LoadImage("taustakuvastarfield"); |
---|
80 | |
---|
81 | Image pelaajankuva = LoadImage("pelaaja1.0"); |
---|
82 | |
---|
83 | Image taso2 = LoadImage("taso2"); |
---|
84 | Image taso3 = LoadImage("taso3"); |
---|
85 | Image taso4 = LoadImage("taso4"); |
---|
86 | private Image[] tasoanim = LoadImages("taso1", "taso1.1", "taso1.2", "taso1.3", "taso1", "taso1", "taso1.3", "taso1", "taso1.1"); |
---|
87 | private Image[] liekkianim = LoadImages("liekki1.1", "liekki1.2"); |
---|
88 | private Image[] taso5anim = LoadImages("taso5.1", "taso5.2", "taso5.3", "taso5.4", "taso5.5", "taso5.6", "taso5.7"); |
---|
89 | private Image[] porttianim = LoadImages("portti01", "portti02", "portti03", "portti04", "portti03", "portti02"); |
---|
90 | |
---|
91 | Image Block021 = LoadImage("Block2.1"); |
---|
92 | Image BlockMusta = LoadImage("Blockmusta"); |
---|
93 | Image Blocklasi = LoadImage("Blocklasi"); |
---|
94 | Image Block121 = LoadImage("Block121"); |
---|
95 | Image Lasitausta = LoadImage("lasitausta"); |
---|
96 | Image isolasi1 = LoadImage("isolasi1"); |
---|
97 | Image isolasi2 = LoadImage("isolasi2"); |
---|
98 | Image isolasi3 = LoadImage("isolasi3"); |
---|
99 | Image isolasi4 = LoadImage("isolasi4"); |
---|
100 | Image isolasi5 = LoadImage("isolasi5"); |
---|
101 | Image isolasi6 = LoadImage("isolasi6"); |
---|
102 | Image isolasi7 = LoadImage("isolasi7"); |
---|
103 | Image isolasi8 = LoadImage("isolasi8"); |
---|
104 | private Image[] LabRat = LoadImages("Block1.1", "Block1.2", "Block1.3", "Block1.2"); |
---|
105 | private Image[] Block06anim = LoadImages("Block06", "Block061", "Block062", "Block063", "Block064", "Block063", "Block062", "Block063", "Block061"); |
---|
106 | |
---|
107 | private Image[] vihu1 = LoadImages("vihu01", "vihu02"); |
---|
108 | private Image[] vihu2 = LoadImages("vihu05", "vihu051", "vihu052", "vihu053", "vihu054"); |
---|
109 | private Image[] vihu3 = LoadImages("vihu031", "vihu032", "vihu033"); |
---|
110 | private Image[] vihu4 = LoadImages("vihu041", "vihu042", "vihu043", "vihu042"); |
---|
111 | Image sikioanim = LoadImage("sikio03"); |
---|
112 | |
---|
113 | |
---|
114 | |
---|
115 | private Image[] tasoliekkianim = LoadImages("taso23.1", "taso23.2", "taso23.3"); |
---|
116 | |
---|
117 | SoundEffect raketti = LoadSoundEffect("raketti"); |
---|
118 | List<Pelaaja> pelaajat = new List<Pelaaja>(); |
---|
119 | Timer MessageDisplaynAjastin; |
---|
120 | |
---|
121 | SoundEffect laser = LoadSoundEffect("lasershot"); |
---|
122 | private Image[] ammusanim = LoadImages("ammus", "ammus"); |
---|
123 | |
---|
124 | private string[] soitin = { "nitrome - N.M.D", "nitrome - enemy 585 3", "nitrome - bullethead" }; |
---|
125 | |
---|
126 | SoundEffect rajahdysAani = LoadSoundEffect("the"); |
---|
127 | bool joMaalissa = false; |
---|
128 | |
---|
129 | int K = RandomGen.NextInt(0, 2); |
---|
130 | int nopeus = RandomGen.NextInt(3, 5); |
---|
131 | int kenttaNro = 1; |
---|
132 | private string mihinSpawnaaSeuraavaksi = "00FF00"; // ihan ekassa kentässä spawnaa tähän |
---|
133 | |
---|
134 | public override void Begin() |
---|
135 | { |
---|
136 | MessageDisplay.Position += new Vector(Screen.Width / 2, 0); |
---|
137 | |
---|
138 | MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko", |
---|
139 | "yksinpeli tarina (1P)", "selviytyminen (2P):ei toimi", "Lopeta"); |
---|
140 | Add(alkuValikko); |
---|
141 | |
---|
142 | alkuValikko.AddItemHandler(0, AloitaPeli); |
---|
143 | alkuValikko.AddItemHandler(1, selviytyminen); |
---|
144 | alkuValikko.AddItemHandler(2, Exit); |
---|
145 | MediaPlayer.Play(soitin[K]); |
---|
146 | |
---|
147 | } |
---|
148 | void AloitaPeli() |
---|
149 | { |
---|
150 | ClearAll(); |
---|
151 | seuraavakentta(); |
---|
152 | |
---|
153 | MediaPlayer.IsRepeating = true; |
---|
154 | MessageDisplay.Add("Protokolla:236"); |
---|
155 | MessageDisplay.Add("Tehtäväsi on päästä ulos piiritetyn avaruustukikohdan sisältä."); |
---|
156 | MessageDisplay.Add("Kulje vihollis linjojen läpi äläkä jää turhaan odottamaan omaa tuhoasi!!!"); |
---|
157 | Keyboard.Listen(Key.F1, ButtonState.Pressed, Begin, null); |
---|
158 | Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null); |
---|
159 | } |
---|
160 | |
---|
161 | void selviytyminen() |
---|
162 | { |
---|
163 | MediaPlayer.Play(soitin[2]); |
---|
164 | kenttaNro = 5; |
---|
165 | AloitaPeli(); |
---|
166 | } |
---|
167 | |
---|
168 | void luokentta(string kenttakuva) |
---|
169 | { |
---|
170 | ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttakuva); |
---|
171 | |
---|
172 | Pelaaja pelaaja1 = luoPelaaja(50, 50); |
---|
173 | LuoElamaLaskuri(pelaaja1, Screen.Left + 150, Screen.Top - 20, Color.Red); |
---|
174 | pelaaja1.Image = LoadImage("pelaaja1.0"); |
---|
175 | |
---|
176 | //Pelaaja pelaaja2 = luoPelaaja(50, 50); |
---|
177 | //LuoElamaLaskuri(pelaaja2, Screen.Right - 150, Screen.Top - 20, Color.Blue); |
---|
178 | //pelaaja2.Image = LoadImage("pelaaja2.0"); |
---|
179 | |
---|
180 | |
---|
181 | ruudut.SetTileMethod(Color.FromHexCode("00FF00"), AsetaPelaajanPaikka, "00FF00", pelaaja1); |
---|
182 | //ruudut.SetTileMethod(Color.FromHexCode("00FFC5"), LuoPelaaja2); 6DFF54 |
---|
183 | ruudut.SetTileMethod(Color.FromHexCode("6DFF54"), Luomaali); |
---|
184 | ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoTaso, new Animation(tasoanim)); |
---|
185 | ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), LuoTaso, (Animation)taso3); |
---|
186 | ruudut.SetTileMethod(Color.FromHexCode("54FFEB"), LuoTaso, (Animation)taso4); |
---|
187 | ruudut.SetTileMethod(Color.FromHexCode("FF0087"), LuoTaso, new Animation(taso5anim)); |
---|
188 | ruudut.SetTileMethod(Color.FromHexCode("0000FF"), LuoTaso, new Animation(tasoliekkianim)); |
---|
189 | ruudut.SetTileMethod(Color.FromHexCode("D9FF93"), LuoTaso, (Animation)Blocklasi); |
---|
190 | ruudut.SetTileMethod(Color.FromHexCode("FF42C0"), LuoTausta, new Animation(LabRat)); |
---|
191 | ruudut.SetTileMethod(Color.FromHexCode("B7FF9E"), LuoTausta, new Animation(Block06anim)); |
---|
192 | ruudut.SetTileMethod(Color.FromHexCode("42B9FF"), LuoTausta, (Animation)BlockMusta); |
---|
193 | ruudut.SetTileMethod(Color.FromHexCode("00FF90"), LuoTausta, (Animation)Block021); |
---|
194 | ruudut.SetTileMethod(Color.FromHexCode("478DFF"), LuoTausta, (Animation)Block121); |
---|
195 | ruudut.SetTileMethod(Color.FromHexCode("FFDB4C"), LuoTausta, (Animation)Lasitausta); |
---|
196 | ruudut.SetTileMethod(Color.FromHexCode("A72BFF"), LuoTausta, (Animation)isolasi1); |
---|
197 | ruudut.SetTileMethod(Color.FromHexCode("A73AFF"), LuoTausta, (Animation)isolasi2); |
---|
198 | ruudut.SetTileMethod(Color.FromHexCode("A75BFF"), LuoTausta, (Animation)isolasi3); |
---|
199 | ruudut.SetTileMethod(Color.FromHexCode("A746FF"), LuoTausta, (Animation)isolasi4); |
---|
200 | ruudut.SetTileMethod(Color.FromHexCode("A778FF"), LuoTausta, (Animation)isolasi5); |
---|
201 | ruudut.SetTileMethod(Color.FromHexCode("A797FF"), LuoTausta, (Animation)isolasi6); |
---|
202 | ruudut.SetTileMethod(Color.FromHexCode("A788FF"), LuoTausta, (Animation)isolasi7); |
---|
203 | ruudut.SetTileMethod(Color.FromHexCode("A7BAFF"), LuoTausta, (Animation)isolasi8); |
---|
204 | ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LuoVihu, new Animation(vihu2)); |
---|
205 | ruudut.SetTileMethod(Color.FromHexCode("FF5700"), LuoVihu, new Animation(vihu3)); |
---|
206 | ruudut.SetTileMethod(Color.FromHexCode("FF5711"), LuoVihu, new Animation(vihu4)); |
---|
207 | |
---|
208 | ruudut.SetTileMethod(Color.FromHexCode("A860FF"), LuoPortti, 1, 2, "000102"); // kentta1 --> kentta2 |
---|
209 | ruudut.SetTileMethod(Color.FromHexCode("BD87FF"), LuoPortti, 2, 1, "000201"); // kentta2 --> kentta1 |
---|
210 | ruudut.SetTileMethod(Color.FromHexCode("FFA8AC"), LuoPortti, 2, 3, "000203"); // kentta2 --> kentta3 |
---|
211 | ruudut.SetTileMethod(Color.FromHexCode("6DFF81"), LuoPortti, 3, 2, "000302"); // kentta3 --> kentta2 |
---|
212 | ruudut.SetTileMethod(Color.FromHexCode("35FFA7"), LuoPortti, 3, 4, "000304"); // kentta3 --> kentta4 |
---|
213 | ruudut.SetTileMethod(Color.FromHexCode("548DFF"), LuoPortti, 4, 3, "000403"); // kentta4 --> kentta3 |
---|
214 | ruudut.SetTileMethod(Color.FromHexCode("4C70FF"), LuoPortti, 4, 5, "000405"); // kentta4 --> kentta5 |
---|
215 | ruudut.SetTileMethod(Color.FromHexCode("AF87FF"), LuoPortti, 4, 5, "B00405"); // kentta4 --> kentta5 |
---|
216 | ruudut.SetTileMethod(Color.FromHexCode("FF9BAC"), LuoPortti, 5, 4, "B00504"); // kentta5 --> kentta4 |
---|
217 | ruudut.SetTileMethod(Color.FromHexCode("9A02FF"), LuoPortti, 5, 4, "000504"); // kentta5 --> kentta4 |
---|
218 | ruudut.SetTileMethod(Color.FromHexCode("FFCE93"), LuoPortti, 5, 6, "000506"); // kentta5 --> kentta6 |
---|
219 | ruudut.SetTileMethod(Color.FromHexCode("FF4989"), LuoPortti, 6, 5, "000605"); // kentta6 --> kentta5 |
---|
220 | ruudut.SetTileMethod(Color.FromHexCode("79FF3F"), LuoPortti, 6, 1, "000601"); // kentta6 --> kentta1 |
---|
221 | ruudut.SetTileMethod(Color.FromHexCode("35FFDA"), LuoPortti, 1, 6, "000106"); // kentta1 --> kentta6 |
---|
222 | ruudut.SetTileMethod(Color.FromHexCode("FF8797"), LuoPortti, 4, 7, "000407"); // kentta4 --> kentta7 |
---|
223 | ruudut.SetTileMethod(Color.FromHexCode("FF8793"), LuoPortti, 7, 4, "000704"); // kentta7 --> kentta4 |
---|
224 | |
---|
225 | ruudut.SetTileMethod(Color.FromHexCode("000102"), AsetaPelaajanPaikka, "000102", pelaaja1); |
---|
226 | ruudut.SetTileMethod(Color.FromHexCode("000201"), AsetaPelaajanPaikka, "000201", pelaaja1); |
---|
227 | ruudut.SetTileMethod(Color.FromHexCode("000203"), AsetaPelaajanPaikka, "000203", pelaaja1); |
---|
228 | ruudut.SetTileMethod(Color.FromHexCode("000302"), AsetaPelaajanPaikka, "000302", pelaaja1); |
---|
229 | ruudut.SetTileMethod(Color.FromHexCode("000304"), AsetaPelaajanPaikka, "000304", pelaaja1); |
---|
230 | ruudut.SetTileMethod(Color.FromHexCode("000403"), AsetaPelaajanPaikka, "000403", pelaaja1); |
---|
231 | ruudut.SetTileMethod(Color.FromHexCode("000405"), AsetaPelaajanPaikka, "000405", pelaaja1); |
---|
232 | ruudut.SetTileMethod(Color.FromHexCode("000504"), AsetaPelaajanPaikka, "000504", pelaaja1); |
---|
233 | ruudut.SetTileMethod(Color.FromHexCode("000506"), AsetaPelaajanPaikka, "000506", pelaaja1); |
---|
234 | ruudut.SetTileMethod(Color.FromHexCode("000605"), AsetaPelaajanPaikka, "000605", pelaaja1); |
---|
235 | ruudut.SetTileMethod(Color.FromHexCode("000601"), AsetaPelaajanPaikka, "000601", pelaaja1); |
---|
236 | ruudut.SetTileMethod(Color.FromHexCode("000106"), AsetaPelaajanPaikka, "000106", pelaaja1); |
---|
237 | ruudut.SetTileMethod(Color.FromHexCode("000407"), AsetaPelaajanPaikka, "000407", pelaaja1); |
---|
238 | ruudut.SetTileMethod(Color.FromHexCode("000704"), AsetaPelaajanPaikka, "000704", pelaaja1); |
---|
239 | ruudut.SetTileMethod(Color.FromHexCode("B00405"), AsetaPelaajanPaikka, "B00405", pelaaja1); |
---|
240 | ruudut.SetTileMethod(Color.FromHexCode("B00504"), AsetaPelaajanPaikka, "B00504", pelaaja1); |
---|
241 | |
---|
242 | ruudut.Execute(50, 50); |
---|
243 | |
---|
244 | /* taustakuva */ |
---|
245 | GameObject tausta1 = new GameObject(Level.Width, Level.Height); |
---|
246 | tausta1.Image = tausta; |
---|
247 | Add(tausta1, -3); |
---|
248 | Layers[-3].RelativeTransition = new Vector(0.2, 0.2); |
---|
249 | |
---|
250 | |
---|
251 | Gravity = new Vector(0.0, -150.0); |
---|
252 | Level.CreateBorders(0.5, true); |
---|
253 | LisaaNappaimet(pelaajat); |
---|
254 | Camera.Follow(pelaajat.ToArray()); |
---|
255 | } |
---|
256 | |
---|
257 | void AsetaPelaajanPaikka(Vector paikka, double leveys, double korkeus, String mihinSpawnaa, Pelaaja pelaaja) |
---|
258 | { |
---|
259 | if (mihinSpawnaa == this.mihinSpawnaaSeuraavaksi) pelaaja.Position = paikka; |
---|
260 | } |
---|
261 | |
---|
262 | void Luomaali(Vector paikka, double leveys, double korkeus) |
---|
263 | { |
---|
264 | PhysicsObject maali = new PhysicsObject(leveys, korkeus); |
---|
265 | maali.MakeStatic(); |
---|
266 | maali.Position = paikka; |
---|
267 | maali.IsVisible = false; |
---|
268 | |
---|
269 | AddCollisionHandler(maali, "pelaaja", maaliintultiin); |
---|
270 | |
---|
271 | Add(maali); |
---|
272 | |
---|
273 | } |
---|
274 | |
---|
275 | void maaliintultiin(PhysicsObject obj, PhysicsObject toinen) |
---|
276 | { |
---|
277 | if (joMaalissa) { return; } |
---|
278 | joMaalissa = true; |
---|
279 | MessageDisplay.Add("Hyvä!"); |
---|
280 | MessageDisplay.Add("Pääsit pois aluksesta. Ehjänä... Ja..."); |
---|
281 | MessageDisplay.Add("valmiina kostoon!"); |
---|
282 | |
---|
283 | } |
---|
284 | |
---|
285 | void LuoPortti(Vector paikka, double leveys, double korkeus, int mistaVie, int mihinVie, String variHexJohonPelaajaSpawnaa) |
---|
286 | { |
---|
287 | Portti portti = new Portti(leveys, korkeus); |
---|
288 | portti.MakeStatic(); |
---|
289 | portti.Position = paikka; |
---|
290 | //portti.Tag = "portti"; |
---|
291 | portti.MistaVie = mistaVie; |
---|
292 | portti.MihinVie = mihinVie; |
---|
293 | portti.Vari = variHexJohonPelaajaSpawnaa; |
---|
294 | Add(portti); |
---|
295 | portti.Animation = new Animation(porttianim); |
---|
296 | portti.Animation.Start(); |
---|
297 | portti.Animation.FPS = RandomGen.NextDouble(3.0, 7.0); |
---|
298 | } |
---|
299 | |
---|
300 | void seuraavakentta() |
---|
301 | { |
---|
302 | ClearAll(); |
---|
303 | pelaajat.Clear(); |
---|
304 | |
---|
305 | if (kenttaNro == 1) luokentta("Kentta1"); |
---|
306 | else if (kenttaNro == 2) luokentta("Kentta2"); |
---|
307 | else if (kenttaNro == 3) luokentta("Kentta3"); |
---|
308 | else if (kenttaNro == 4) luokentta("Kentta4"); |
---|
309 | else if (kenttaNro == 5) luokentta("Kentta5"); |
---|
310 | else if (kenttaNro == 6) luokentta("Kentta6"); |
---|
311 | else if (kenttaNro == 7) luokentta("Kentta7"); |
---|
312 | |
---|
313 | } |
---|
314 | |
---|
315 | |
---|
316 | |
---|
317 | void TormattiinPorttiin(Pelaaja pelaaja, Portti portti) |
---|
318 | { |
---|
319 | kenttaNro = portti.MihinVie; |
---|
320 | this.mihinSpawnaaSeuraavaksi = portti.Vari; |
---|
321 | seuraavakentta(); |
---|
322 | } |
---|
323 | |
---|
324 | void LuoTaso(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
325 | { |
---|
326 | MikonPhysicsObject taso = new MikonPhysicsObject(this, leveys, korkeus); |
---|
327 | taso.MakeStatic(); |
---|
328 | taso.Position = paikka; |
---|
329 | taso.Tag = "taso"; |
---|
330 | Add(taso); |
---|
331 | taso.Animation = kuva; |
---|
332 | taso.Animation.Start(); |
---|
333 | taso.Animation.FPS = nopeus; |
---|
334 | } |
---|
335 | |
---|
336 | void LuoTausta(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
337 | { |
---|
338 | GameObject Block = new GameObject(50, 50); |
---|
339 | Block.Position = paikka; |
---|
340 | Add(Block, -2); |
---|
341 | Block.Animation = kuva; |
---|
342 | Block.Animation.Start(); |
---|
343 | Block.Animation.FPS = nopeus; |
---|
344 | } |
---|
345 | |
---|
346 | |
---|
347 | void LuoElamaLaskuri(Pelaaja pelaaja, double x, double y, Color vari) |
---|
348 | { |
---|
349 | ProgressBar elamaPalkki = new ProgressBar(200, 10); |
---|
350 | elamaPalkki.X = 0; |
---|
351 | elamaPalkki.BarColor = vari; |
---|
352 | elamaPalkki.Y = y; |
---|
353 | elamaPalkki.BindTo(pelaaja.ElamaLaskuri); |
---|
354 | elamaPalkki.BorderColor = Color.White; |
---|
355 | Add(elamaPalkki); |
---|
356 | } |
---|
357 | |
---|
358 | void PelaajaOsuu(PhysicsObject pel, PhysicsObject kohde, string tyyppi) |
---|
359 | { |
---|
360 | if (!(pel is Pelaaja)) return; |
---|
361 | Pelaaja pelaaja = (Pelaaja)pel; |
---|
362 | |
---|
363 | switch (tyyppi) |
---|
364 | { |
---|
365 | case "sikio": |
---|
366 | pelaaja.ElamaLaskuri.Value -= 1; |
---|
367 | break; |
---|
368 | case "vihu": |
---|
369 | pelaaja.ElamaLaskuri.Value -= 2; |
---|
370 | break; |
---|
371 | case "taso": |
---|
372 | double maxvel = 0; |
---|
373 | if (Math.Abs(pelaaja.Velocity.X) > Math.Abs(pelaaja.Velocity.Y)) { maxvel = Math.Round(pelaaja.Velocity.X); } else { maxvel = Math.Round(pelaaja.Velocity.Y); } |
---|
374 | int arvo = (int)Math.Abs(Math.Round(maxvel / 90)) - 4; |
---|
375 | |
---|
376 | if (arvo > 0) |
---|
377 | { |
---|
378 | pelaaja.ElamaLaskuri.Value -= arvo; |
---|
379 | } |
---|
380 | break; |
---|
381 | } |
---|
382 | |
---|
383 | |
---|
384 | } |
---|
385 | |
---|
386 | |
---|
387 | void ElamaLoppui() |
---|
388 | { |
---|
389 | kenttaNro = 1; |
---|
390 | mihinSpawnaaSeuraavaksi = "00FF00"; |
---|
391 | |
---|
392 | Kuolit(); |
---|
393 | pelaajat.Clear(); |
---|
394 | |
---|
395 | Timer.SingleShot(5.0, seuraavakentta); |
---|
396 | } |
---|
397 | |
---|
398 | void Kuolit() |
---|
399 | { |
---|
400 | Explosion rajahdys = new Explosion(100); |
---|
401 | rajahdys.Position = pelaajat[0].Position; |
---|
402 | rajahdys.Sound = rajahdysAani; |
---|
403 | Add(rajahdys); |
---|
404 | pelaajat[0].Destroy(); |
---|
405 | |
---|
406 | |
---|
407 | } |
---|
408 | |
---|
409 | |
---|
410 | void ElamaLoppuiSurvivalissa() |
---|
411 | { |
---|
412 | foreach (var item in pelaajat) |
---|
413 | { |
---|
414 | if (!item.IsDestroyed) |
---|
415 | item.Destroy(); |
---|
416 | } |
---|
417 | pelaajat.Clear(); |
---|
418 | seuraavakentta(); |
---|
419 | |
---|
420 | |
---|
421 | } |
---|
422 | |
---|
423 | |
---|
424 | Pelaaja alustaPelaaja() |
---|
425 | { |
---|
426 | Pelaaja pelaaja = new Pelaaja(50, 50); |
---|
427 | if (kenttaNro == 5) |
---|
428 | pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppuiSurvivalissa(); }; |
---|
429 | else pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppui(); }; |
---|
430 | pelaaja.CanRotate = false; |
---|
431 | Camera.StayInLevel = true; |
---|
432 | pelaaja.Shape = Shape.FromImage(pelaajankuva); |
---|
433 | pelaaja.Tag = "pelaaja"; |
---|
434 | pelaaja.Restitution = 0.1; |
---|
435 | return pelaaja; |
---|
436 | } |
---|
437 | |
---|
438 | Pelaaja luoPelaaja(double leveys, double korkeus) |
---|
439 | { |
---|
440 | Pelaaja pelaaja = alustaPelaaja(); |
---|
441 | Add(pelaaja); |
---|
442 | |
---|
443 | AddCollisionHandler<Pelaaja, Portti>(pelaaja, TormattiinPorttiin); |
---|
444 | AddCollisionHandler(pelaaja, "vihu", delegate(Pelaaja p, PhysicsObject vihu) { PelaajaOsuu(p, vihu, "vihu"); }); |
---|
445 | AddCollisionHandler(pelaaja, "sikio", delegate(Pelaaja p, PhysicsObject sikio) { PelaajaOsuu(p, sikio, "sikio"); }); |
---|
446 | AddCollisionHandler(pelaaja, "taso", delegate(Pelaaja p, PhysicsObject taso) { PelaajaOsuu(p, taso, "taso"); }); |
---|
447 | |
---|
448 | AssaultRifle pelaajanAse = new AssaultRifle(30, 10); |
---|
449 | pelaajanAse.IsVisible = false; |
---|
450 | pelaajanAse.Angle = Angle.RightAngle; |
---|
451 | pelaajanAse.AttackSound = laser; |
---|
452 | pelaajanAse.InfiniteAmmo = true; |
---|
453 | pelaajanAse.Power.DefaultValue = 200; |
---|
454 | pelaajanAse.FireRate = 8; |
---|
455 | pelaajanAse.ProjectileCollision = AmmusOsui; |
---|
456 | pelaaja.Add(pelaajanAse); |
---|
457 | pelaaja.Ase = pelaajanAse; |
---|
458 | |
---|
459 | GameObject liekki = new GameObject(50, 50); |
---|
460 | liekki.Animation = new Animation(liekkianim); |
---|
461 | liekki.IsVisible = false; |
---|
462 | liekki.Animation.Start(); |
---|
463 | pelaaja.Add(liekki); |
---|
464 | liekki.Y = -25; |
---|
465 | pelaaja.Liekki = liekki; |
---|
466 | |
---|
467 | pelaajat.Add(pelaaja); |
---|
468 | return pelaaja; |
---|
469 | } |
---|
470 | |
---|
471 | |
---|
472 | |
---|
473 | private void LisaaNappaimet(List<Pelaaja> pelaajat) |
---|
474 | { |
---|
475 | Keyboard.Listen(Key.Left, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[0]); |
---|
476 | Keyboard.Listen(Key.Right, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[0]); |
---|
477 | Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, 800.0, pelaajat[0]); |
---|
478 | Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[0].Ase); |
---|
479 | |
---|
480 | //----------------------------------------------------------------- |
---|
481 | |
---|
482 | Keyboard.Listen(Key.Up, ButtonState.Down, liekkianimaatio, null, pelaajat[0].Liekki, true); |
---|
483 | Keyboard.Listen(Key.Up, ButtonState.Released, liekkianimaatio, null, pelaajat[0].Liekki, false); |
---|
484 | |
---|
485 | /* Ei vielä toimi kaksinpeli |
---|
486 | //-2-2-2-2-2-2-2--22-2-2-2-2-22-2-22-2-22-22-2-22-22--22-22-2-2-2-2-2-2-22-22-2---------- |
---|
487 | Keyboard.Listen(Key.A, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[1]); |
---|
488 | Keyboard.Listen(Key.D, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[1]); |
---|
489 | Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaajat[1]); |
---|
490 | Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[1].Ase); |
---|
491 | |
---|
492 | //----------------------------------------------------------------- |
---|
493 | Keyboard.Listen(Key.W, ButtonState.Down, liekkianimaatio, null, pelaajat[1].Liekki, true); |
---|
494 | Keyboard.Listen(Key.W, ButtonState.Released, liekkianimaatio, null, pelaajat[1].Liekki, false); |
---|
495 | * */ |
---|
496 | |
---|
497 | } |
---|
498 | |
---|
499 | void LuoPelaaja2(Vector paikka, double leveys, double korkeus) |
---|
500 | { |
---|
501 | } |
---|
502 | |
---|
503 | void AmmuAseella(AssaultRifle ase) |
---|
504 | { |
---|
505 | PhysicsObject ammus = ase.Shoot(); |
---|
506 | if (ammus != null) |
---|
507 | { |
---|
508 | ammus.Angle = ase.AbsoluteAngle - Angle.RightAngle; |
---|
509 | ammus.Size *= 3; |
---|
510 | |
---|
511 | ammus.Animation = new Animation(ammusanim); |
---|
512 | ammus.Animation.Start(); |
---|
513 | ammus.Animation.FPS = 3; |
---|
514 | } |
---|
515 | } |
---|
516 | |
---|
517 | void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde) |
---|
518 | { |
---|
519 | ammus.Destroy(); |
---|
520 | switch(kohde.Tag.ToString()){ |
---|
521 | case "vihu":case "sikio": |
---|
522 | kohde.Destroy(); |
---|
523 | break; |
---|
524 | case "taso": |
---|
525 | ((MikonPhysicsObject)kohde).Break(0,2,2); |
---|
526 | break; |
---|
527 | } |
---|
528 | } |
---|
529 | |
---|
530 | void liekkianimaatio(GameObject liekki, bool totuus) |
---|
531 | { |
---|
532 | liekki.IsVisible = totuus; |
---|
533 | if (totuus) |
---|
534 | { |
---|
535 | |
---|
536 | if (!raketti.IsPlaying) |
---|
537 | { |
---|
538 | raketti.Play(); |
---|
539 | } |
---|
540 | } |
---|
541 | else |
---|
542 | { |
---|
543 | raketti.Stop(); |
---|
544 | } |
---|
545 | } |
---|
546 | |
---|
547 | void kaannaPelaajaa(double kulmanopeus, PhysicsObject pelaaja) |
---|
548 | { |
---|
549 | pelaaja.Angle += Angle.FromDegrees(kulmanopeus); |
---|
550 | } |
---|
551 | void LiikutaPelaajaa(double nopeus, PhysicsObject pelaaja1) |
---|
552 | { |
---|
553 | pelaaja1.Push(Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle + Angle.RightAngle)); |
---|
554 | } |
---|
555 | |
---|
556 | void LuoVihu(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
557 | { |
---|
558 | PhysicsObject vihu = new PhysicsObject(50, 50); |
---|
559 | vihu.Shape = Shape.Circle; |
---|
560 | vihu.Animation = kuva; |
---|
561 | vihu.Position = paikka; |
---|
562 | vihu.Tag = "vihu"; |
---|
563 | vihu.AngularDamping = 0.1; |
---|
564 | vihu.IgnoresGravity = true; |
---|
565 | Add(vihu, 1); |
---|
566 | |
---|
567 | RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50); |
---|
568 | satunnaisAivot.ChangeMovementSeconds = 5; |
---|
569 | vihu.Brain = satunnaisAivot; |
---|
570 | vihu.Animation.Start(); |
---|
571 | vihu.Animation.FPS = 4; |
---|
572 | |
---|
573 | AddCollisionHandler(vihu, "vihu", luovihuosuma); |
---|
574 | } |
---|
575 | |
---|
576 | void luovihuosuma(PhysicsObject vihu, PhysicsObject kohde) |
---|
577 | { |
---|
578 | if (kohde.Tag.ToString() == "vihu") luosikio(vihu.Position, 50, 50, new Animation(sikioanim)); |
---|
579 | } |
---|
580 | |
---|
581 | void luosikio(Vector paikka, double leveys, double korkeus, Animation kuva) |
---|
582 | { |
---|
583 | PhysicsObject sikio = new PhysicsObject(35, 35); |
---|
584 | sikio.Shape = Shape.Circle; |
---|
585 | sikio.Animation = kuva; |
---|
586 | sikio.Position = paikka; |
---|
587 | sikio.Tag = "sikio"; |
---|
588 | sikio.AngularDamping = 0.1; |
---|
589 | sikio.IgnoresGravity = true; |
---|
590 | |
---|
591 | Add(sikio, 1); |
---|
592 | |
---|
593 | RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50); |
---|
594 | satunnaisAivot.ChangeMovementSeconds = 5; |
---|
595 | sikio.Brain = satunnaisAivot; |
---|
596 | sikio.Animation.Start(); |
---|
597 | sikio.Animation.FPS = 4; |
---|
598 | } |
---|
599 | |
---|
600 | |
---|
601 | } |
---|
602 | |
---|
603 | public class Pelaaja : PhysicsObject |
---|
604 | { |
---|
605 | AssaultRifle ase; |
---|
606 | GameObject liekki; |
---|
607 | DoubleMeter elamaLaskuri; |
---|
608 | public AssaultRifle Ase { get { if (ase != null) return ase; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { ase = value; } } |
---|
609 | public GameObject Liekki { get { if (liekki != null) return liekki; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { liekki = value; } } |
---|
610 | public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } } |
---|
611 | public Pelaaja(double leveys, double korkeus) |
---|
612 | : base(leveys, korkeus) |
---|
613 | { |
---|
614 | elamaLaskuri = new DoubleMeter(25, 0, 25); |
---|
615 | |
---|
616 | } |
---|
617 | |
---|
618 | |
---|
619 | |
---|
620 | } |
---|