using System; using Jypeli; using Jypeli.Widgets; using Jypeli.Assets; using Jypeli.Controls; using Physics2DDotNet.Ignorers; public class Pelaaja : PlatformCharacter { public bool voikoPoimiaAseen { get; set; } public Explosion ViimeisinRajahdys { get; set; } public DoubleMeter HPLaskuri { get; set; } public Pelaaja(double width, double height, Shape shape) : base(width, height, shape) { voikoPoimiaAseen = true; } } // Yksinkertainen tasohyppely. public class Kynari : PhysicsGame { #region Muuttujat const double LIIKEVOIMA = 400; const double HYPPYVOIMA = 850; const double RUUDUNLEVEYS = 30; const double RUUDUNKORKEUS = 30; string Aseet = "Kaikki aseet"; string PowerUpit = "Päällä"; string SailytaAse = "Kyllä"; int PISTEMAARA_JOLLA_VOITTAA_PELIN = 3; int kentta = 1; Pelaaja pelaaja1 = new Pelaaja(40, 40, Shape.Circle); Pelaaja pelaaja2 = new Pelaaja(40, 40, Shape.Circle); //DoubleMeter hpLaskuri1 = new DoubleMeter(100); //DoubleMeter hpLaskuri2 = new DoubleMeter(100); Image kranaatinheittimenkuva = LoadImage("grenadelauncher"); Image kranaatinheittimenkuva2 = LoadImage("grenadelauncher2"); Image kranaatinheittimenkuva3 = LoadImage("grenadelauncher3"); Image kranaatinheittimenkuva4 = LoadImage("grenadelauncher4"); Image kranaatinkuva = LoadImage("grenade"); Image kranaatinkuva2 = LoadImage("grenade2"); Image kranaatinkuva3 = LoadImage("grenade3"); Image kranaatinkuva4 = LoadImage("grenade4"); Image magnumkuva = LoadImage("magnum"); Image magnumkuva2 = LoadImage("magnum2"); Image magnumkuva3 = LoadImage("magnum3"); Image magnumkuva4 = LoadImage("magnum4"); Image norsu = LoadImage("norsu"); Image haulikonkuva = LoadImage("shotgun"); Image haulikonkuva2 = LoadImage("shotgun2"); Image haulikonkuva3 = LoadImage("shotgun3"); Image haulikonkuva4 = LoadImage("shotgun4"); Image pistoolinkuva = LoadImage("pistol"); Image pistoolinkuva2 = LoadImage("pistol2"); Image pistoolinkuva3 = LoadImage("pistol3"); Image pistoolinkuva4 = LoadImage("pistol4"); Image kivaarinkuva = LoadImage("assaultrifle"); Image kivaarinkuva2 = LoadImage("assaultrifle2"); Image kivaarinkuva3 = LoadImage("assaultrifle3"); Image kivaarinkuva4 = LoadImage("assaultrifle4"); Image raketinheittimenkuva = LoadImage("rocketlauncher"); Image raketinheittimenkuva2 = LoadImage("rocketlauncher2"); Image raketinheittimenkuva3 = LoadImage("rocketlauncher3"); Image raketinheittimenkuva4 = LoadImage("rocketlauncher4"); Image raketinkuva = LoadImage("rocket"); Image raketinkuva2 = LoadImage("rocket2"); Image raketinkuva3 = LoadImage("rocket3"); Image raketinkuva4 = LoadImage("rocket4"); Image sniperinkuva = LoadImage("sniper"); Image sniperinkuva2 = LoadImage("sniper2"); Image sniperinkuva3 = LoadImage("sniper3"); Image sniperinkuva4 = LoadImage("sniper4"); Image powerupinkuva = LoadImage("upgrade"); bool saaAmpua = false; //bool peliohi = false; SoundEffect hyppyAani = LoadSoundEffect("hyppays"); ProgressBar hpNaytto; ProgressBar hpNaytto2; IntMeter pelaajan1Pisteet; IntMeter pelaajan2Pisteet; #endregion #region Alustukset public override void Begin() { pelaajan1Pisteet = new IntMeter(0); pelaajan2Pisteet = new IntMeter(0); DrawPerimeter = false; // ei haluta piirtää kentän reunoja LuoAlkuValikko(); } void AloitaUusiPeli() { MessageDisplay.Clear(); // ladataan kenttä //seuraavaKentta(); LuoKentta(); lisaaNappaimet(); LisaaLaskurit(); LisaaHPNaytot(); naytaTiedot(); //peliohi = false; saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); } #endregion #region KentanLataus void LuoKentta() { ClearAll(); TileMap ruudut = TileMap.FromLevelAsset("kentta"+kentta); ruudut.SetTileMethod('x', LuoReuna); ruudut.SetTileMethod('t', LuoTaso); ruudut.SetTileMethod('l', LuoLyhytTaso); ruudut.SetTileMethod('p', LuoPitkaTaso); ruudut.SetTileMethod('k', LuoKeskipitkaTaso); ruudut.SetTileMethod('j', LuoLyhytPystyTaso); ruudut.SetTileMethod('z', LuoLattia); ruudut.SetTileMethod('c', LuoSeina); if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva); } if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva); } if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva); } if (Aseet != "Ei aseita") { ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); } if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('A', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); } if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('S', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); } if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva); } if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva); } if (PowerUpit == "Päällä") { ruudut.SetTileMethod('+', LuoPowerUp, new Vector(16, 20), "Power Up", powerupinkuva); } ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, pelaaja1); }); ruudut.SetTileMethod('2', delegate(Vector paikka, double leveys, double korkeus) { pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, pelaaja2); }); ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS); Level.Background.CreateGradient(Color.White, Color.Gray); Gravity = new Vector(0, -1500); Timer timer = new Timer(); timer.Interval = 0.1; timer.Timeout += delegate { TarkistaReunat(Level.Right - 1.5 * RUUDUNLEVEYS, Level.Top - 1.5 * RUUDUNKORKEUS); }; timer.Start(); } void LuoReuna(Vector paikka, double leveys, double korkeus) { PhysicsObject reuna = new PhysicsObject(leveys, korkeus); reuna.Position = paikka; reuna.Color = Color.Gray; reuna.Tag = "reuna"; reuna.MakeStatic(); Add(reuna); } void LuoKeskipitkaTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = new PhysicsObject(leveys * 4, korkeus); taso.Position = paikka + new Vector(leveys * 1.5, 0); taso.Color = Color.Gray; taso.Tag = "taso"; taso.MakeStatic(); Add(taso); } void LuoLyhytPystyTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = new PhysicsObject(leveys, korkeus * 2); taso.Position = paikka + new Vector(0, -korkeus * 0.5); taso.Color = Color.Gray; taso.Tag = "taso"; taso.MakeStatic(); Add(taso); } void LuoLattia(Vector paikka, double leveys, double korkeus) { PhysicsObject reuna = new PhysicsObject(leveys * 58, korkeus); reuna.Position = paikka + new Vector(leveys * 28.5, 0); reuna.Color = Color.Gray; reuna.Tag = "reuna"; reuna.MakeStatic(); Add(reuna); } void LuoSeina(Vector paikka, double leveys, double korkeus) { PhysicsObject reuna = new PhysicsObject(leveys, korkeus * 32); reuna.Position = paikka + new Vector(0, -korkeus * 15.5); reuna.Color = Color.Gray; reuna.Tag = "reuna"; reuna.MakeStatic(); Add(reuna); } void LuoLyhytTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = new PhysicsObject(leveys * 3, korkeus); taso.Position = paikka + new Vector(leveys * 1, 0); taso.Color = Color.Gray; taso.Tag = "taso"; taso.MakeStatic(); Add(taso); } void LuoPitkaTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = new PhysicsObject(leveys * 5, korkeus); taso.Position = paikka + new Vector(leveys * 2, 0); taso.Color = Color.Gray; taso.Tag = "taso"; taso.MakeStatic(); Add(taso); } void LuoTaso(Vector paikka, double leveys, double korkeus) { PhysicsObject taso = new PhysicsObject(leveys, korkeus); taso.Position = paikka; taso.Color = Color.Gray; taso.Tag = "taso"; taso.MakeStatic(); Add(taso); } void TarkistaReunat(double leveys, double korkeus) { if (pelaaja1.Position.X < -leveys) pelaaja1.Position = new Vector(-leveys, pelaaja1.Position.Y); if (pelaaja1.Position.X > leveys) pelaaja1.Position = new Vector(leveys, pelaaja1.Position.Y); if (pelaaja1.Position.Y < -korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.X, -korkeus); if (pelaaja1.Position.Y > korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.Y, korkeus); if (pelaaja2.Position.X < -leveys) pelaaja2.Position = new Vector(-leveys, pelaaja2.Position.Y); if (pelaaja2.Position.X > leveys) pelaaja2.Position = new Vector(leveys, pelaaja2.Position.Y); if (pelaaja2.Position.Y < -korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.X, -korkeus); if (pelaaja2.Position.Y > korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.Y, korkeus); } void LuoAlkuValikko() { ClearAll(); NollaaLaskurit(); MultiSelectWindow alkuValikko = new MultiSelectWindow("Kynäri", "Aloita peli", "Asetukset", "Lopeta"); Add(alkuValikko); alkuValikko.AddItemHandler(0, LuoKenttaValikko); alkuValikko.AddItemHandler(1, LuoAsetukset); alkuValikko.AddItemHandler(2, Exit); alkuValikko.DefaultCancel = 1; alkuValikko.Color = Color.Gray; Level.BackgroundColor = Color.Gray; } void LuoAsetukset() { ClearAll(); MultiSelectWindow asetukset = new MultiSelectWindow("Asetukset", "Voittoon tarvittava pistemäärä: "+ PISTEMAARA_JOLLA_VOITTAA_PELIN, "Kentällä olevat aseet: "+ Aseet, "Power Upit: "+ PowerUpit, "Säilytä aseet erien välissä: "+ SailytaAse,"Takaisin"); asetukset.AddItemHandler(0, AsetaPistemaara); asetukset.AddItemHandler(1, AsetaAseet); asetukset.AddItemHandler(2, AsetaPowerUpit); asetukset.AddItemHandler(3, AsetaSailytaAse); asetukset.AddItemHandler(4, LuoAlkuValikko); asetukset.Color = Color.Gray; asetukset.DefaultCancel = 4; Add(asetukset); } void AsetaSailytaAse() { if (SailytaAse == "Ei") { SailytaAse = "Kyllä"; LuoAsetukset(); return; } if (SailytaAse == "Kyllä") { SailytaAse = "Ei"; LuoAsetukset(); return; } else { SailytaAse = "Kyllä"; } } void AsetaPistemaara() { if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 1) { PISTEMAARA_JOLLA_VOITTAA_PELIN = 3; LuoAsetukset(); return; } if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 3) { PISTEMAARA_JOLLA_VOITTAA_PELIN = 5; LuoAsetukset(); return; } if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 5) { PISTEMAARA_JOLLA_VOITTAA_PELIN = 7; LuoAsetukset(); return; } if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 7) { PISTEMAARA_JOLLA_VOITTAA_PELIN = 10; LuoAsetukset(); return; } if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 10) { PISTEMAARA_JOLLA_VOITTAA_PELIN = 1; LuoAsetukset(); return; } else { PISTEMAARA_JOLLA_VOITTAA_PELIN = 3; LuoAsetukset(); } } void AsetaAseet() { if (Aseet == "Ei aseita") { Aseet = "Vähän aseita"; LuoAsetukset(); return; } if (Aseet == "Vähän aseita") { Aseet = "Paljon aseita"; LuoAsetukset(); return; } if (Aseet == "Paljon aseita") { Aseet = "Kaikki aseet"; LuoAsetukset(); return; } if (Aseet == "Kaikki aseet") { Aseet = "Ei aseita"; LuoAsetukset(); return; } else { Aseet = "Kaikki aseet"; LuoAsetukset(); } } void AsetaPowerUpit() { if (PowerUpit == "Pois") { PowerUpit = "Päällä"; LuoAsetukset(); return; } if (PowerUpit == "Päällä") { PowerUpit = "Pois"; LuoAsetukset(); return; } else { PowerUpit = "Päällä"; LuoAsetukset(); } } void LuoKenttaValikko() { ClearAll(); MultiSelectWindow kenttaValikko = new MultiSelectWindow("Kenttävalikko", "Kenttä 1", "Kenttä 2", "Takaisin"); kenttaValikko.AddItemHandler(0, LuoKentta1); kenttaValikko.AddItemHandler(1, LuoKentta2); kenttaValikko.AddItemHandler(2, LuoAlkuValikko); kenttaValikko.Color = Color.Gray; kenttaValikko.DefaultCancel = 2; Add(kenttaValikko); } void LuoKentta1() { kentta = 1; uusiPeli(); } void LuoKentta2() { kentta = 2; uusiPeli(); } void luoTasot() { PhysicsObject alusta = new PhysicsObject(Level.Width, 300); alusta.Color = Color.Gray; alusta.X = 0; alusta.Y = Level.Bottom - alusta.Height / 2; Add(alusta); lisaaPieniTaso(-200, -350); lisaaPieniTaso(0, -400); lisaaPieniTaso(100, -300); lisaaPieniTaso(400, -350); lisaaPieniTaso(450, -200); lisaaPieniTaso(-500, -400); lisaaPieniTaso(-550, -200); lisaaPieniTaso(-400, -300); lisaaPieniTaso(-150, -150); lisaaPieniTaso(-870, -350); lisaaPieniTaso(-700, -400); lisaaPieniTaso(600, -300); lisaaPieniTaso(850, -300); lisaaPieniTaso(750, -400); lisaaPieniTaso(200, -200); lisaaPieniTaso(-200, -150); lisaaPystyTaso(600, -450); lisaaPystyTaso(-600, -500); lisaaPystyTaso(0, -450); lisaaReuna(-1375, 0); lisaaReuna(1375, 0); } void LisaaHPNaytot() { // luodaan elämänäyttö hpNaytto = new ProgressBar(250, 30); //hpNaytto.Angle = Angle.FromDegrees(90); hpNaytto.BarColor = Color.LightGreen; hpNaytto.Color = Color.Red; hpNaytto.BindTo(pelaaja1.HPLaskuri); hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170); Add(hpNaytto); hpNaytto2 = new ProgressBar(250, 30); //hpNaytto2.Angle = Angle.FromDegrees(90); hpNaytto2.BarColor = Color.LightGreen; hpNaytto2.Color = Color.Red; hpNaytto2.BindTo(pelaaja2.HPLaskuri); hpNaytto2.Position = new Vector(Screen.RightSafe - 300, Screen.TopSafe - 170); Add(hpNaytto2); } void LisaaLaskurit() { LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 175.0, pelaajan1Pisteet); LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 175.0, pelaajan2Pisteet); pelaajan1Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN; pelaajan2Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN; pelaajan1Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet); }; pelaajan2Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet); }; } void NollaaLaskurit() { pelaajan1Pisteet.Reset(); pelaajan2Pisteet.Reset(); } IntMeter LuoPisteLaskuri(double x, double y, IntMeter laskuri) { Label naytto = new Label(); naytto.BindTo(laskuri); naytto.X = x; naytto.Y = y; Add(naytto); return laskuri; } void PelaajaVoittaa(Pelaaja voittaja, String voittajanNimi, Pelaaja haviaja, IntMeter haviajanPisteet) { MessageDisplay.Clear(); if (voittaja.IsDestroying && haviajanPisteet.Value == haviajanPisteet.MaxValue) { MessageDisplay.Add("Tasapeli!"); } else { MessageDisplay.Add(voittajanNimi + " voittaa!"); } } //Vanha void Pelaaja1Voitti() { MessageDisplay.Clear(); if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue) { MessageDisplay.Add("Tasapeli!"); } else { MessageDisplay.Add("Pelaaja 1 voittaa!"); } MessageDisplay.X = 0; } //Vanha void Pelaaja2Voitti() { MessageDisplay.Clear(); if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue) { MessageDisplay.Add("Tasapeli!"); } else { MessageDisplay.Add("Pelaaja 2 voittaa!"); } MessageDisplay.X = 0; } void lisaaPieniTaso(double x, double y) { PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30, Shape.Rectangle); taso.Color = Color.Gray; taso.X = x; taso.Y = y; Add(taso); } void lisaaReuna(double x, double y) { PhysicsObject taso = PhysicsObject.CreateStaticObject(1000, 1000, Shape.Rectangle); taso.Color = Color.Gray; taso.X = x; taso.Y = y; Add(taso); } void lisaaPystyTaso(double x, double y) { PhysicsObject taso = PhysicsObject.CreateStaticObject(30, 100, Shape.Rectangle); taso.Color = Color.Gray; taso.X = x; taso.Y = y; Add(taso); } Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, Pelaaja pelaaja) { string ase = "Pistooli"; if (pelaaja.Weapon != null && SailytaAse == "Kyllä") { ase = pelaaja.Weapon.Tag.ToString(); } pelaaja = new Pelaaja(40, 40, Shape.Circle); pelaaja.Image = norsu; pelaaja.Position = paikka; pelaaja.Tag = "pelaaja"; pelaaja.HPLaskuri = new DoubleMeter(100, 0, 100); pelaaja.HPLaskuri.MaxValue = 100; pelaaja.HPLaskuri.Value = 100; pelaaja.HPLaskuri.LowerLimit += delegate() { PelaajaKuoli(pelaaja); }; Add(pelaaja); LuoAsePelaajalle(ase, pelaaja); return pelaaja; } void PelaajaKuoli(Pelaaja pelaaja) { if (pelaaja.IsDestroying) { return; } pelaaja.Destroy(); PudotaAseenHahmo(pelaaja); MessageDisplay.Clear(); MessageDisplay.X = 0; if (pelaaja == pelaaja1) { pelaajan2Pisteet.Value += 1; if (!(pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue || pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)) { if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue) { MessageDisplay.Clear(); MessageDisplay.Add("Erä tasan!"); } else if (pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue) { MessageDisplay.Add("Pelaaja 2 voitti erän!"); } Timer.SingleShot(3.0, AloitaUusiPeli); } else if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue) { Pelaaja2Voitti(); ClearTimers(); Timer.SingleShot(3.0, LuoAlkuValikko); } } if (pelaaja == pelaaja2) { pelaajan1Pisteet.Value += 1; if (!(pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue || pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue)) { if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value != pelaajan2Pisteet.MaxValue) { MessageDisplay.Clear(); MessageDisplay.Add("Erä tasan!"); } else if (pelaajan1Pisteet.Value != pelaajan2Pisteet.MaxValue) { MessageDisplay.Add("Pelaaja 1 voitti erän!"); } Timer.SingleShot(3.0, AloitaUusiPeli); } else if (pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue) { Pelaaja1Voitti(); ClearTimers(); Timer.SingleShot(3.0, LuoAlkuValikko); } } } void keraaPowerUp(PhysicsObject powerup, Pelaaja pelaaja) { powerup.Destroy(); PaivitaAse(pelaaja.Weapon.Tag.ToString(), pelaaja); naytaTiedot(); } void keraaAse(PhysicsObject ase, Pelaaja pelaaja) { if (!pelaaja.voikoPoimiaAseen) return; ase.Destroy(); PudotaAseenHahmo(pelaaja); // tiputtaa asetta vastaavan fysiikkaolion maahan kerättäväksi uudestaan LuoAsePelaajalle(ase.Tag.ToString(), pelaaja); naytaTiedot(); } private void PudotaAseenHahmo(Pelaaja pelaaja) { if (pelaaja.Weapon == null) return; pelaaja.voikoPoimiaAseen = false; Timer.SingleShot(0.1, delegate { pelaaja.voikoPoimiaAseen = true; }); String aseenTagi = pelaaja.Weapon.Tag.ToString(); Vector koko = pelaaja.Weapon.Size; Vector paikka = pelaaja.Position; PhysicsObject tiputettuAse = new PhysicsObject(koko.X, koko.Y); tiputettuAse.Position = paikka; tiputettuAse.Tag = aseenTagi; tiputettuAse.CollisionIgnoreGroup = 1; pelaaja.CollisionIgnoreGroup = 1; Timer.SingleShot(1.0, delegate { tiputettuAse.CollisionIgnoreGroup = 0; pelaaja.CollisionIgnoreGroup = 0; }); Add(tiputettuAse); tiputettuAse.Image = pelaaja.Weapon.Image; AddCollisionHandler(tiputettuAse, "pelaaja", keraaAse); pelaaja.Weapon = null; } void KranaattiOsui(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (!(kohde is Pelaaja)) return; RajaytaKranaatti(ammus); Pelaaja pelaaja = (Pelaaja)kohde; ammus.Destroy(); pelaaja.HPLaskuri.Value -= 25; } void KranaattiOsui2(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (!(kohde is Pelaaja)) return; RajaytaKranaatti2(ammus); Pelaaja pelaaja = (Pelaaja)kohde; ammus.Destroy(); pelaaja.HPLaskuri.Value -= 35; } void KranaattiOsui3(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (!(kohde is Pelaaja)) return; RajaytaKranaatti3(ammus); Pelaaja pelaaja = (Pelaaja)kohde; ammus.Destroy(); pelaaja.HPLaskuri.Value -= 35; } void RajaytaKranaatti(PhysicsObject ammus) { if (ammus.IsDestroying || ammus.IsDestroyed) return; Explosion rajahdys = new Explosion(100); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); } void RajaytaKranaatti2(PhysicsObject ammus) { if (ammus.IsDestroying || ammus.IsDestroyed) return; Explosion rajahdys = new Explosion(100); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); } void RajaytaKranaatti3(PhysicsObject ammus) { if (ammus.IsDestroying || ammus.IsDestroyed) return; Explosion rajahdys = new Explosion(100); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); } void RakettiOsui(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (kohde.Tag.ToString() != "") { Explosion rajahdys = new Explosion(75); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa. if (!(kohde is Pelaaja)) return; Pelaaja pelaaja = (Pelaaja)kohde; pelaaja.HPLaskuri.Value -= 20; } } void RakettiOsui2(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (kohde.Tag.ToString() != "") { Explosion rajahdys = new Explosion(75); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa. if (!(kohde is Pelaaja)) return; Pelaaja pelaaja = (Pelaaja)kohde; pelaaja.HPLaskuri.Value -= 35; } } void RakettiOsui3(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return; if (kohde.Tag.ToString() != "") { Explosion rajahdys = new Explosion(75); rajahdys.Position = ammus.Position; rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 25.0); }; Add(rajahdys); rajahdys.Force = 25; rajahdys.Speed = 1000; ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa. if (!(kohde is Pelaaja)) return; Pelaaja pelaaja = (Pelaaja)kohde; pelaaja.HPLaskuri.Value -= 15; } } void PaineaaltoOsuu(IPhysicsObject kohde, Vector shokki, Explosion e, double damagenMaara) { if (!(kohde is Pelaaja)) return; Pelaaja p = (Pelaaja)kohde; if (p.ViimeisinRajahdys == e) return; p.ViimeisinRajahdys = e; p.HPLaskuri.Value -= damagenMaara; } bool AmmusVoiOsua(PhysicsObject ammus, PhysicsObject kohde) { if (ammus.IsDestroying) return false; if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy(); if (kohde is Pelaaja) { return true; } else { return false; } } void PistooliOsui(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 15; } } void PistooliOsui2(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 25; } } void PistooliOsui3(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 25; } } void KivaariOsui(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 10; } } void KivaariOsui2(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 15; } } void KivaariOsui3(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 20; } } void SniperOsui(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 80; } } void SniperOsui2(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 90; } } void SniperOsui3(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 40; } } void SniperOsui4(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 75; } } void MagnumOsui(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 35; } } void MagnumOsui2(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 40; } } void MagnumOsui3(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 50; } } void MagnumOsui4(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 100; } } void HaulikkoOsui(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 13; } } void HaulikkoOsui2(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 15; } } void HaulikkoOsui3(PhysicsObject ammus, PhysicsObject kohde) { //if (ammus.IsDestroying) return; //if ((string)kohde.Tag != "ammus") ammus.Destroy(); //if (!(kohde is Pelaaja)) return; if (AmmusVoiOsua(ammus, kohde)) { Pelaaja p = (Pelaaja)kohde; p.HPLaskuri.Value -= 15; } } void LuoPowerUp(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva) { PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y); powerup.Position = paikka; powerup.Tag = tagi; powerup.Image = kuva; Add(powerup); AddCollisionHandler(powerup, "pelaaja", keraaPowerUp); } void LuoAse(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva) { PhysicsObject ase = new PhysicsObject(koko.X, koko.Y); ase.Position = paikka; ase.Tag = tagi; ase.Image = kuva; Add(ase); AddCollisionHandler(ase, "pelaaja", keraaAse); } /// /// /// /// Fysiikkaolio, jonka perusteella laitetaan pelaajalle ase /// Pelaaja jolle ase luodaan /// private void LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja) { if (aseenTag == null) return; // Varsinainen ase Weapon ase = null; if (aseenTag == "Kivääri") { ase = new AssaultRifle(39, 13); ase.FireRate = 7; ase.ProjectileCollision = KivaariOsui; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Kivääri"; ase.Image = kivaarinkuva; } if (aseenTag == "Magnum") { ase = new AssaultRifle(17, 12); ase.FireRate = 1.2; ase.ProjectileCollision = MagnumOsui; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Magnum"; ase.Image = magnumkuva; // Paikka suhteessa pelaajaan ase.X = 10; ase.Y = 10; } if (aseenTag == "Haulikko") { ase = new AssaultRifle(42, 10); ase.FireRate = 0.75; ase.ProjectileCollision = HaulikkoOsui; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4); ase.Tag = "Haulikko"; ase.Image = haulikonkuva; } if (aseenTag == "Sniper") { ase = new AssaultRifle(42, 11); ase.FireRate = 0.4; ase.ProjectileCollision = SniperOsui; ase.Power.Value = 400; ase.Power.DefaultValue = 400; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Sniper"; ase.Image = sniperinkuva; } if (aseenTag == "Kranaatinheitin") { ase = new Cannon(42, 15); ase.FireRate = 0.5; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui(ammus, kohde); }; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3); ase.Tag = "Kranaatinheitin"; ase.Image = kranaatinheittimenkuva; } if (aseenTag == "Raketinheitin") { ase = new AssaultRifle(48, 15); ase.FireRate = 0.5; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui(ammus, kohde); }; ase.Power.Value = 125; ase.Power.DefaultValue = 125; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Raketinheitin"; ase.Image = raketinheittimenkuva; } if (aseenTag == "Pistooli") { ase = new AssaultRifle(16, 11); ase.FireRate = 2; ase.ProjectileCollision = PistooliOsui; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Pistooli"; ase.Image = pistoolinkuva; ase.X = 10; ase.Y = 10; } if (aseenTag == "Kivääri Lv. 2") { ase = new AssaultRifle(39, 16); ase.FireRate = 9; ase.ProjectileCollision = KivaariOsui2; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Kivääri Lv. 2"; ase.Image = kivaarinkuva2; } if (aseenTag == "Magnum Lv. 2") { ase = new AssaultRifle(17, 12); ase.FireRate = 1.5; ase.ProjectileCollision = MagnumOsui2; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Magnum Lv. 2"; ase.Image = magnumkuva2; // Paikka suhteessa pelaajaan ase.X = 10; ase.Y = 10; } if (aseenTag == "Haulikko Lv. 2") { ase = new AssaultRifle(42, 12); ase.FireRate = 1.0; ase.ProjectileCollision = HaulikkoOsui2; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.5); ase.Tag = "Haulikko Lv. 2"; ase.Image = haulikonkuva2; } if (aseenTag == "Sniper Lv. 2") { ase = new AssaultRifle(42, 11); ase.FireRate = 0.75; ase.ProjectileCollision = SniperOsui2; ase.Power.Value = 400; ase.Power.DefaultValue = 400; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Sniper Lv. 2"; ase.Image = sniperinkuva2; } if (aseenTag == "Kranaatinheitin Lv. 2") { ase = new Cannon(42, 16); ase.FireRate = 0.75; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui2(ammus, kohde); }; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3); ase.Tag = "Kranaatinheitin Lv. 2"; ase.Image = kranaatinheittimenkuva2; } if (aseenTag == "Raketinheitin Lv. 2") { ase = new AssaultRifle(48, 15); ase.FireRate = 0.75; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui2(ammus, kohde); }; ase.Power.Value = 165; ase.Power.DefaultValue = 165; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Raketinheitin Lv. 2"; ase.Image = raketinheittimenkuva2; } if (aseenTag == "Pistooli Lv. 2") { ase = new AssaultRifle(17, 11); ase.FireRate = 2; ase.ProjectileCollision = PistooliOsui2; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Pistooli Lv. 2"; ase.Image = pistoolinkuva2; ase.X = 10; ase.Y = 10; } if (aseenTag == "Kivääri Lv. 3") { ase = new AssaultRifle(39, 16); ase.FireRate = 10; ase.ProjectileCollision = KivaariOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Kivääri Lv. 3"; ase.Image = kivaarinkuva3; } if (aseenTag == "Magnum Lv. 3") { ase = new AssaultRifle(17, 12); ase.FireRate = 2.0; ase.ProjectileCollision = MagnumOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Magnum Lv. 3"; ase.Image = magnumkuva3; // Paikka suhteessa pelaajaan ase.X = 10; ase.Y = 10; } if (aseenTag == "Haulikko Lv. 3") { ase = new AssaultRifle(38, 12); ase.FireRate = 2.0; ase.ProjectileCollision = HaulikkoOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.75); ase.Tag = "Haulikko Lv. 3"; ase.Image = haulikonkuva3; } if (aseenTag == "Sniper Lv. 3") { ase = new AssaultRifle(45, 12); ase.FireRate = 4.0; ase.ProjectileCollision = SniperOsui3; ase.Power.Value = 400; ase.Power.DefaultValue = 400; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Sniper Lv. 3"; ase.Image = sniperinkuva3; } if (aseenTag == "Kranaatinheitin Lv. 3") { ase = new Cannon(37, 17); ase.FireRate = 1.0; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); }; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3); ase.Tag = "Kranaatinheitin Lv. 3"; ase.Image = kranaatinheittimenkuva3; } if (aseenTag == "Raketinheitin Lv. 3") { ase = new AssaultRifle(48, 22.5); ase.FireRate = 4.0; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); }; ase.Power.Value = 125; ase.Power.DefaultValue = 125; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Raketinheitin Lv. 3"; ase.Image = raketinheittimenkuva3; } if (aseenTag == "Pistooli Lv. 3") { ase = new AssaultRifle(20, 13); ase.FireRate = 2; ase.ProjectileCollision = PistooliOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Pistooli Lv. 3"; ase.Image = pistoolinkuva3; ase.X = 10; ase.Y = 10; } if (aseenTag == "Kivääri Lv. 4") { ase = new AssaultRifle(39, 16); ase.FireRate = 20; ase.ProjectileCollision = KivaariOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Kivääri Lv. 4"; ase.Image = kivaarinkuva4; } if (aseenTag == "Magnum Lv. 4") { ase = new AssaultRifle(17, 12); ase.FireRate = 2.0; ase.ProjectileCollision = MagnumOsui4; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Magnum Lv. 4"; ase.Image = magnumkuva4; // Paikka suhteessa pelaajaan ase.X = 10; ase.Y = 10; } if (aseenTag == "Haulikko Lv. 4") { ase = new AssaultRifle(38, 12); ase.FireRate = 4.0; ase.ProjectileCollision = HaulikkoOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(2.0); ase.Tag = "Haulikko Lv. 4"; ase.Image = haulikonkuva4; } if (aseenTag == "Sniper Lv. 4") { ase = new AssaultRifle(45, 12); ase.FireRate = 5.0; ase.ProjectileCollision = SniperOsui4; ase.Power.Value = 400; ase.Power.DefaultValue = 400; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Sniper Lv. 4"; ase.Image = sniperinkuva4; } if (aseenTag == "Kranaatinheitin Lv. 4") { ase = new Cannon(37, 17); ase.FireRate = 4.0; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); }; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3); ase.Tag = "Kranaatinheitin Lv. 4"; ase.Image = kranaatinheittimenkuva4; } if (aseenTag == "Raketinheitin Lv. 4") { ase = new AssaultRifle(48, 22.5); ase.FireRate = 8.0; ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); }; ase.Power.Value = 125; ase.Power.DefaultValue = 125; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Raketinheitin Lv. 4"; ase.Image = raketinheittimenkuva4; } if (aseenTag == "Pistooli Lv. 4") { ase = new AssaultRifle(20, 13); ase.FireRate = 4; ase.ProjectileCollision = PistooliOsui3; ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10); ase.Tag = "Pistooli Lv. 4"; ase.Image = pistoolinkuva4; ase.X = 10; ase.Y = 10; } pelaaja.Weapon = ase; } void PaivitaAse(string aseenTag, Pelaaja pelaaja) { if (aseenTag == null) return; //string[] a = "Pistooli-2".Split('-'); if (aseenTag == "Kivääri") { LuoAsePelaajalle("Kivääri Lv. 2", pelaaja); } if (aseenTag == "Magnum") { LuoAsePelaajalle("Magnum Lv. 2", pelaaja); } if (aseenTag == "Haulikko") { LuoAsePelaajalle("Haulikko Lv. 2", pelaaja); } if (aseenTag == "Sniper") { LuoAsePelaajalle("Sniper Lv. 2", pelaaja); } if (aseenTag == "Kranaatinheitin") { LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja); } if (aseenTag == "Raketinheitin") { LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja); } if (aseenTag == "Pistooli") { LuoAsePelaajalle("Pistooli Lv. 2", pelaaja); } if (aseenTag == "Kivääri Lv. 2") { LuoAsePelaajalle("Kivääri Lv. 3", pelaaja); } if (aseenTag == "Magnum Lv. 2") { LuoAsePelaajalle("Magnum Lv. 3", pelaaja); } if (aseenTag == "Haulikko Lv. 2") { LuoAsePelaajalle("Haulikko Lv. 3", pelaaja); } if (aseenTag == "Sniper Lv. 2") { LuoAsePelaajalle("Sniper Lv. 3", pelaaja); } if (aseenTag == "Kranaatinheitin Lv. 2") { LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja); } if (aseenTag == "Raketinheitin Lv. 2") { LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja); } if (aseenTag == "Pistooli Lv. 2") { LuoAsePelaajalle("Pistooli Lv. 3", pelaaja); } if (aseenTag == "Kivääri Lv. 3") { pelaaja.voikoPoimiaAseen = false; LuoAsePelaajalle("Kivääri Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Kivääri Lv. 3", pelaaja); pelaaja.voikoPoimiaAseen = true; naytaTiedot(); } }); } if (aseenTag == "Magnum Lv. 3") { LuoAsePelaajalle("Magnum Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Magnum Lv. 3", pelaaja); naytaTiedot(); ; } }); } if (aseenTag == "Haulikko Lv. 3") { LuoAsePelaajalle("Haulikko Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Haulikko Lv. 3", pelaaja); naytaTiedot(); ; } }); } if (aseenTag == "Sniper Lv. 3") { LuoAsePelaajalle("Sniper Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Sniper Lv. 3", pelaaja); naytaTiedot(); ; } }); } if (aseenTag == "Kranaatinheitin Lv. 3") { LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja); naytaTiedot(); ; } }); } if (aseenTag == "Raketinheitin Lv. 3") { LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja); naytaTiedot(); ; } }); } if (aseenTag == "Pistooli Lv. 3") { LuoAsePelaajalle("Pistooli Lv. 4", pelaaja); Timer.SingleShot(5.0, delegate { if (pelaaja.IsDestroyed == true) { return; } else { saaAmpua = false; Timer.SingleShot(0.1, delegate { saaAmpua = true; }); LuoAsePelaajalle("Pistooli Lv. 3", pelaaja); naytaTiedot(); ; } }); } } #endregion #region Nappaimet // Lisää peliin kaikki näppäimet void lisaaNappaimet() { ClearControls(); //Yleiset näppäimet Keyboard.Listen(Key.F1, ButtonState.Pressed, uusiPeli, "Aloittaa uuden pelin"); // Pelaajan näppäimet Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0)); Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0)); Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA); Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1); Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-LIIKEVOIMA, 0)); Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, new Vector(LIIKEVOIMA, 0)); Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, HYPPYVOIMA); Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu", pelaaja2); Keyboard.Listen(Key.Escape, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin"); lisaaGamePadNappaimet(ControllerOne, pelaaja1); lisaaGamePadNappaimet(ControllerTwo, pelaaja2); } void lisaaGamePadNappaimet(GamePad pelaajaNro, PlatformCharacter pelaaja) { //Yleiset näppäimet pelaajaNro.Listen(Button.Start, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin"); //pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0)); //pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0)); pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0)); pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0)); pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA); pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja); } void PeliPauselle() { Pause(); MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri", "Jatka peliä", "Aloita peli alusta", "Päävalikko", "Lopeta"); Add(PauseValikko); PauseValikko.AddItemHandler(0, Pause); PauseValikko.AddItemHandler(1, delegate { uusiPeli(); Pause(); }); PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); }); PauseValikko.AddItemHandler(3, Exit); PauseValikko.DefaultCancel = 0; PauseValikko.Color = Color.Gray; } // Näppäimiin liitetyt toiminnot alkavat tästä --> void liikuta(PlatformCharacter hahmo, Vector voima) { hahmo.Walk(voima.X); } void naytaTiedot() { MessageDisplay.Clear(); MessageDisplay.X = 0; if (pelaaja1.Weapon != null) { MessageDisplay.Add("Pelaaja 1: " + pelaaja1.Weapon.Tag); } if (pelaaja2.Weapon != null) { MessageDisplay.Add("Pelaaja 2: " + pelaaja2.Weapon.Tag); } } void Ammu(PlatformCharacter hahmo) { if (hahmo.IsDestroyed || !saaAmpua) return; PhysicsObject ammus = hahmo.Weapon.Shoot(); if (ammus == null) return; ammus.Tag = "ammus"; ammus.IgnoresCollisionResponse = true; ammus.IgnoresExplosions = true; if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin") { ammus.Shape = Shape.Circle; ammus.Image = kranaatinkuva; ammus.Restitution = 1; ammus.Mass = 0.2; ammus.KineticFriction = 0.2; ammus.StaticFriction = 0.2; ammus.Position = hahmo.Position; ammus.Size += new Vector(1, 1); Timer.SingleShot(2.0, delegate { RajaytaKranaatti(ammus); }); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; }); } if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 2") { ammus.Shape = Shape.Circle; ammus.Image = kranaatinkuva2; ammus.Restitution = 1; ammus.Mass = 0.2; ammus.KineticFriction = 0.2; ammus.StaticFriction = 0.2; ammus.Position = hahmo.Position; ammus.Size += new Vector(1, 1); Timer.SingleShot(2.0, delegate { RajaytaKranaatti2(ammus); }); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; }); } if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 3") { ammus.Shape = Shape.Circle; ammus.Image = kranaatinkuva3; ammus.Restitution = 1; ammus.Mass = 0.2; ammus.KineticFriction = 0.2; ammus.StaticFriction = 0.2; ammus.Position = hahmo.Position; ammus.Size += new Vector(1, 1); Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); }); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; }); PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.Size = ammus.Size; ammus2.Shape = ammus.Shape; ammus2.Image = ammus.Image; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.Restitution = ammus.Restitution; ammus2.Mass = ammus.Mass; ammus2.KineticFriction = ammus.KineticFriction; ammus2.StaticFriction = ammus.StaticFriction; ammus2.MaximumLifetime = ammus.MaximumLifetime; ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); }); ammus2.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; }); AddCollisionHandler(ammus2, KranaattiOsui3); Add(ammus2); } if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 4") { ammus.Shape = Shape.Circle; ammus.Image = kranaatinkuva4; ammus.Restitution = 1; ammus.Mass = 0.2; ammus.KineticFriction = 0.2; ammus.StaticFriction = 0.2; ammus.Position = hahmo.Position; ammus.Size += new Vector(1, 1); Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); }); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; }); PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.Size = ammus.Size; ammus2.Shape = ammus.Shape; ammus2.Image = ammus.Image; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.Restitution = ammus.Restitution; ammus2.Mass = ammus.Mass; ammus2.KineticFriction = ammus.KineticFriction; ammus2.StaticFriction = ammus.StaticFriction; ammus2.MaximumLifetime = ammus.MaximumLifetime; ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); }); ammus2.IgnoresCollisionResponse = false; Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; }); AddCollisionHandler(ammus2, KranaattiOsui3); Add(ammus2); } if ((string)hahmo.Weapon.Tag == "Raketinheitin") { ammus.Image = raketinkuva; ammus.Size += new Vector(3, 1); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; }); } if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 2") { ammus.Image = raketinkuva2; ammus.Size += new Vector(3, 1); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; }); } if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 3") { ammus.Image = raketinkuva3; ammus.Size += new Vector(3, 1); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; }); } if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 4") { ammus.Image = raketinkuva4; ammus.Size += new Vector(3, 1); ammus.IgnoresCollisionResponse = false; Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; }); } if ((string)hahmo.Weapon.Tag == "Haulikko") { for (int i = 0; i < 5; i++) { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.4); ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-300, 300))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, HaulikkoOsui); Add(ammus2); } } if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 2") { for (int i = 0; i < 5; i++) { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.5); ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, HaulikkoOsui2); Add(ammus2); } } if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 3") { for (int i = 0; i < 3; i++) { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.75); ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-100, 100))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, HaulikkoOsui3); Add(ammus2); } } if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 4") { for (int i = 0; i < 5; i++) { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = TimeSpan.FromSeconds(2.0); ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-50, 50))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, HaulikkoOsui3); Add(ammus2); } } if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 3") { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = ammus.MaximumLifetime; //ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, PistooliOsui3); Timer.SingleShot(0.1, delegate { Add(ammus2); }); } if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 4") { PhysicsObject ammus2 = new PhysicsObject(ammus.Image); ammus2.IgnoresGravity = true; ammus2.Size = ammus.Size; ammus2.Position = ammus.Position; ammus2.Velocity = ammus.Velocity; ammus2.MaximumLifetime = ammus.MaximumLifetime; //ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200))); ammus2.CollisionIgnorer = ammus.CollisionIgnorer; ammus2.Tag = "ammus"; ammus2.IgnoresCollisionResponse = true; ammus2.IgnoresExplosions = true; AddCollisionHandler(ammus2, PistooliOsui3); Timer.SingleShot(0.05, delegate { Add(ammus2); }); } Add(ammus); } void hyppaa(PlatformCharacter hahmo, double voima) { if (hahmo.Jump(voima)) hyppyAani.Play(); } void uusiPeli() { NollaaLaskurit(); pelaaja1.Weapon = null; pelaaja2.Weapon = null; AloitaUusiPeli(); } #endregion }