using System; using System.Collections.Generic; using FarseerPhysics.Dynamics.Joints; using Jypeli; using Jypeli.Assets; using Jypeli.Controls; using Jypeli.Widgets; using Silk.NET.SDL; using Color = Jypeli.Color; namespace KelaCombatTesti; /// @author Sakari /// @version 17.02.2025 /// <summary> /// /// </summary> public class KelaCombatTesti : PhysicsGame { PlatformCharacter pelaaja; PhysicsObject Pesari; private Image KelabottiKuva = LoadImage("Kelabotti"); private Image PelaajaKuva = LoadImage("Pelaaja.png"); //private AssaultRifle PelaajanPesismaila; public override void Begin() { LuoKentta(); LuoKelabotti(); //LuoPesismaila(40, 90); //LuoPelaaja(0, 0); //Camera.Follow(pelaaja); //Camera.ZoomFactor = 1.2; //Camera.StayInLevel = true; Keyboard.Listen(Key.A, ButtonState.Down, LiikuVasemmalle, null, new Vector()); Keyboard.Listen(Key.D, ButtonState.Down, LiikuOikealle, null, new Vector()); Keyboard.Listen(Key.W, ButtonState.Down, Hyppaa, null, new Vector()); Keyboard.Listen(Key.Space, ButtonState.Down, LyoMailalla, "", pelaaja); //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000)); Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); Keyboard.Listen(Key.J, ButtonState.Pressed, LuoPesismaila, "", new Vector(90, 10), pelaaja); void LiikuVasemmalle(Vector vektori) { pelaaja.Walk(-100); } void LiikuOikealle(Vector vektori) { pelaaja.Walk(100); } void Hyppaa(Vector vektori) { pelaaja.Jump(300.0); } } void LuoKentta() { Level.BackgroundColor = Color.Pink; Gravity = new Vector(0, -981.0); PhysicsObject vasenReuna = Level.CreateLeftBorder(); vasenReuna.Restitution = 0.0; vasenReuna.KineticFriction = 0.0; vasenReuna.IsVisible = false; PhysicsObject oikeaReuna = Level.CreateRightBorder(); oikeaReuna.Restitution = 0.0; oikeaReuna.KineticFriction = 0.0; oikeaReuna.IsVisible = false; PhysicsObject ylaReuna = Level.CreateTopBorder(); ylaReuna.Restitution = 0.0; ylaReuna.KineticFriction = 0.0; ylaReuna.IsVisible = false; PhysicsObject alaReuna = Level.CreateBottomBorder(); alaReuna.Restitution = 1.0; alaReuna.IsVisible = false; alaReuna.KineticFriction = 0.0; pelaaja = LuoPelaaja(0.0, 0.0); } //Tällä funktiolla luodaan pelaaja, sekä annetaan pelaajalle ase, AssaultRifle. // pelaaja kuuluu CollisionIgnoreGroup = 1. Kaikki fyysiset objektit, jotka on samassa CollisionIgnoreGroupissa // pystyy menemään toistensa läpi. Tarvitaan myöhemmin siihen, että pesismaila ja pelaajahahmo ei törmää toisiinsa //pelaaja.Weapon on turha. Se on korvattu LuoPesismailalla PlatformCharacter LuoPelaaja(double x, double y) { PlatformCharacter pelaaja = new PlatformCharacter(50.0, 100.0); pelaaja.Image = PelaajaKuva; pelaaja.Mass = 1.0; pelaaja.Image = LoadImage("Pelaaja.png"); pelaaja.Shape = Shape.Rectangle; pelaaja.Color = Color.Black; pelaaja.X = x; pelaaja.Y = y; pelaaja.Weapon = new AssaultRifle(20, 20); pelaaja.CollisionIgnoreGroup = 1; pelaaja.Weapon.ProjectileCollision = LyontiOsui; Add(pelaaja); return pelaaja; } // Tässä luodaan Pesismailalla ampumisen systeemi // Pesismailan ampuma luoti eli Lyonti on pieni ja kestää vain 0,01s // Ase on käytännössä pesismailaksi naamioitu AssaultRifle //Tämäkin ampumismekaniikka on turha, koska se on osa turhaa pelaaja.Weaponi -systeemiä void LyoMailalla(PlatformCharacter pelaaja) { PhysicsObject Lyonti = pelaaja.Weapon.Shoot(); if (Lyonti != null) { Lyonti.Size *= 0.1; //Pesismaila.Image Lyonti.MaximumLifetime = TimeSpan.FromSeconds(0.01); } } //Tässä tehdään lyönnin osumisen vaikutukset //Kelabottiin osuessa Lyonti (pesismailan ampuma luoti) ja Kelabotti tuhotaan //tämä osumisen käsittelykin on turha, koska LyoMailalla ja pelaaja.Weapon on turhaa void LyontiOsui(PhysicsObject Lyonti, PhysicsObject Kelabotti) { Lyonti.Destroy(); Kelabotti.Destroy(); } // Tässä luodaan uusi fysiikkaolio, Pesismaila //Tämä toimii pelaajan lyöntinä (samalla määritellään ase) // void LuoPesismaila(Vector koko, PlatformCharacter liitettava) { PhysicsObject Pesari = new PhysicsObject(koko.X, koko.Y); Pesari.Position = liitettava.Position + new Vector(80*liitettava.FacingDirection.GetVector().X, 10); Pesari.CollisionIgnoreGroup = 1; Pesari.Mass = 1; Add(Pesari); Pesari.LifetimeLeft = TimeSpan.FromSeconds(0.075); Pesari.IgnoresGravity = true; } //Tämä funktio luo Kelabotti-vihun ja sille annetaan pelaajan seuraamis aivot PlatformCharacter LuoKelabotti() { PlatformCharacter Kelabotti = new PlatformCharacter(80.0, 80.0); Kelabotti.Color = Color.Orange; Kelabotti.Image = KelabottiKuva; Kelabotti.MirrorImage(); Add(Kelabotti); FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja); seuraajanAivot.Speed = 100; Kelabotti.Brain = seuraajanAivot; return Kelabotti; } }