From 2d8555f3a9be3e5926f45fcfffec879f1f8b6953 Mon Sep 17 00:00:00 2001
From: Pekka Pihlajamaa <pepihlaj@student.jyu.fi>
Date: Mon, 14 Nov 2022 03:54:39 +0200
Subject: [PATCH] Vahan siistimista

---
 Hiko/Hiko/Hiko.cs | 142 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 131 insertions(+), 11 deletions(-)

diff --git a/Hiko/Hiko/Hiko.cs b/Hiko/Hiko/Hiko.cs
index f6d0b5e..e66cb75 100644
--- a/Hiko/Hiko/Hiko.cs
+++ b/Hiko/Hiko/Hiko.cs
@@ -8,13 +8,30 @@ using System.Threading;
 
 namespace Hiko
 {
-    public class Hiko : PhysicsGame
+    /// <summary>
+    /// Tehdään vihuluokka helpottamaan hitpointtien laskussa
+    /// </summary>
+    class Vihu : PlatformCharacter
+    {
+        private IntMeter elamalaskuri = new IntMeter(3, 0, 3);
+        public IntMeter Elamalaskuri { get { return elamalaskuri; } }
+        public Vihu(double leveys, double korkeus)
+            :base(leveys, korkeus)
+        {
+            elamalaskuri.LowerLimit += delegate { this.Destroy(); };
+        }
+    }
+
 
+    public class Hiko : PhysicsGame
     {
         PhysicsObject pelaaja;
         GameObject tahtain;
         Image taustakuva = LoadImage("Testitaustakuva");
 
+        /// <summary>
+        /// Luodaan peliin kenttä
+        /// </summary>
         private static readonly String[] lines =
         {
                   "                        ",
@@ -24,7 +41,15 @@ namespace Hiko
                   "                        ",
                   "                        ",
                   "                        ",
+                  "                   X    ",
+                  "                 ___    ",
+                  "           X            ",
+                  "         _____          ",
+                  "   X                    ",
+                  "  ____                  ",
                   "                        ",
+                  "          X             ",
+                  "       __________       ",
                   "                        ",
                   "                        ",
                   "                        ",
@@ -32,14 +57,6 @@ namespace Hiko
                   "                        ",
                   "                        ",
                   "                        ",
-                  "                        ",
-                  "                        ",
-                  "        X X             ",
-                  "        X  X  X         ",
-                  "        X  X  X         ",
-                  "        X  X  X         ",
-                  "        X  X  X         ",
-                  "        X  X  X         ",
                   };
         private static readonly int tileWidth = 800 / lines[0].Length;
         private static readonly int tileHeight = 480 / lines.Length;
@@ -57,9 +74,17 @@ namespace Hiko
             Gravity = new Vector(0.0, -981.0);
             LuoOhjaimet();
             LuoTahtain();
+            LuoAikalaskuri();
             tiles.SetTileMethod('X',LuoMaavihu);
+            tiles.SetTileMethod('_',LuoTaso);
             tiles.Execute(tileWidth, tileHeight);
         }
+
+
+        /// <summary>
+        /// Luo pelaajamodellin ja antaa sille ominaisuudet
+        /// </summary>
+        /// <returns></returns>
         PhysicsObject LuoPelaaja()
         {
             pelaaja = new PhysicsObject(20, 40);
@@ -71,18 +96,34 @@ namespace Hiko
             Add(pelaaja);
             return pelaaja;
         }
+
+
+        /// <summary>
+        /// Luo vihollisolion
+        /// </summary>
+        /// <param name="paikka"></param>
+        /// <param name="leveys"></param>
+        /// <param name="korkeus"></param>
         void LuoMaavihu(Vector paikka, double leveys, double korkeus)
         {
-            PlatformCharacter maavihu = new PlatformCharacter(leveys, korkeus);
+            //PlatformCharacter maavihu = new PlatformCharacter(leveys, korkeus);
+            Vihu maavihu = new Vihu(leveys, korkeus);
             maavihu.Shape = Shape.Circle;
             maavihu.Color = Color.Blue;
             maavihu.Position = paikka;
+            maavihu.Tag = "maavihu";
             PlatformWandererBrain tasoaivot = new PlatformWandererBrain();
             tasoaivot.Speed = 100;
             maavihu.Brain = tasoaivot;
             maavihu.Image = LoadImage("örkki");
             Add(maavihu);
         }
+
+
+        /// <summary>
+        /// Luo näkyvän indikaattorin tähtäimestä
+        /// </summary>
+        /// <returns></returns>
         GameObject LuoTahtain()
         {
             tahtain = new GameObject(30.0, 30.0, Shape.Circle);
@@ -90,6 +131,11 @@ namespace Hiko
             Add(tahtain);
             return tahtain;
         }
+
+
+        /// <summary>
+        /// Luo tarvittavat ohjaimet pelaajalle
+        /// </summary>
         public void LuoOhjaimet()
         {
             Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
@@ -105,16 +151,32 @@ namespace Hiko
             Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Ammu, null);
 
         }
+
+
+        /// <summary>
+        /// Tämä aliohjelma liikuttaa pelaajaa tiettyyn suuntaan
+        /// </summary>
+        /// <param name="vektori">Minne suuntaan sitä liikutetaan</param>
         void LiikutaPelaajaa(Vector vektori)
         {
             pelaaja.Push(vektori);
         }
+
+
+        /// <summary>
+        /// Tässä kerrotaan missä tähtäin on ruudulla
+        /// </summary>
         void KuunteleLiiketta()
         {
             tahtain.X = Mouse.PositionOnWorld.X;
             tahtain.Y = Mouse.PositionOnWorld.Y;
 
         }
+
+
+        /// <summary>
+        /// Tämä luo projektiilin jolla voi tuhota vihuja 
+        /// </summary>
         void Ammu()
         {
             PhysicsObject luoti = new PhysicsObject(20, 20);
@@ -130,12 +192,70 @@ namespace Hiko
             Add(luoti);
 
             //luoti.Hit(new Vector(pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X, pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y));
-            Vector suunta = new Vector((pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X) * -1, (pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y) * -1);
+            Vector suunta = AnnaLuodinSuunta(pelaaja);
             Angle a = suunta.Angle;
             
             luoti.Hit(Vector.FromLengthAndAngle(200, a));
+            AddCollisionHandler<PhysicsObject, Vihu>(luoti, LuotiOsuuVihuun);
+        }
+
+
+        /// <summary>
+        /// Tässä funktio palauttaa luodin suunnan
+        /// </summary>
+        /// <param name="pelaaja">tarvittava positio mistä se ammutaan</param>
+        /// <returns></returns>
+        public Vector AnnaLuodinSuunta(PhysicsObject pelaaja)
+        {
+            return new Vector((pelaaja.RelativePosition.X - Mouse.PositionOnScreen.X) * -1, (pelaaja.RelativePosition.Y - Mouse.PositionOnScreen.Y) * -1);
+        }
+
+
+        /// <summary>
+        /// Tässä kerrotaan mitä tapahtuu kun luoti osuu pelaajaan
+        /// </summary>
+        /// <param name="luoti">projektiili joka osuu</param>
+        /// <param name="vihu">mihin osuu</param>
+        private void LuotiOsuuVihuun(PhysicsObject luoti, Vihu vihu)
+        {
+            MessageDisplay.Add("luoti osui vihuun");
+            vihu.Elamalaskuri.Value--;
+        }
+
+
+        /// <summary>
+        /// Tämä aliohjelma luo tasanteita kenttään
+        /// </summary>
+        /// <param name="paikka">tason paikka koordinaatistossa</param>
+        /// <param name="leveys">tason leveys</param>
+        /// <param name="pituus">tason korkeus</param>
+        void LuoTaso(Vector paikka, double leveys, double pituus)
+        {
+            Surface taso = new Surface(leveys, pituus);
+            taso.Position = paikka;
+            taso.Color = Color.Orange;
+            Add(taso);
+        }
+
+
+        /// <summary>
+        /// Tässä on aikalaskuri peliin
+        /// </summary>
+        void LuoAikalaskuri()
+        {
+            Jypeli.Timer aikalaskuri = new Jypeli.Timer();
+            aikalaskuri.Start();
+
+            Label aikanaytto = new Label();
+            aikanaytto.TextColor = Color.Orange;
+            aikanaytto.DecimalPlaces = 1;
+            aikanaytto.BindTo(aikalaskuri.SecondCounter);
+            aikanaytto.Position = new Vector(0, 300);
+            Add(aikanaytto);
+            
             
         }
 
+
     }
 }
\ No newline at end of file
-- 
GitLab