source: 2016/27/SimoR/SimplePhysicsTest/SimplePhysics/Object.cs @ 7639

Revision 7639, 3.4 KB checked in by sieerinn, 3 years ago (diff)

Liikkuvat tasanteet toimii

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5namespace SimplePhysics
6{
7    public class Object : GameObject
8    {
9        /// <summary>
10        /// Objektin nopeus.
11        /// </summary>
12        public Vector Velocity { get; set; }
13
14        /// <summary>
15        /// Onko objekti paikallaan ja fysiikasta piittaamaton.
16        /// </summary>
17        public bool IsStatic { get; set; }
18
19        /// <summary>
20        /// Objektin kimmoisuus X-akselilla. Arvo pitää olla väliltä 0.0 - 1.0.
21        /// </summary>
22        public double RestitutionX { get; set; }
23
24        /// <summary>
25        /// Objektin kimmoisuus Y-akselilla. Arvo pitää olla väliltä 0.0 - 1.0.
26        /// </summary>
27        public double RestitutionY { get; set; }
28
29        /// <summary>
30        /// Objektin kitka maata vasten. Arvo pitää olla väliltä 0.0 - 1.0.
31        /// </summary>
32        public double Friction { get; set; }
33
34        /// <summary>
35        /// Voiko objektin läpi hypätä alapuolelta.
36        /// </summary>
37        public bool OneWayPlatform { get; set; }
38
39        /// <summary>
40        /// Jättääkö objekti painovoiman huomiotta.
41        /// </summary>
42        public bool IgnoresGravity { get; set; }
43
44
45        /// <summary>
46        /// Tapahtuu, kun olio murskautuu seinän ja liikkuvan staattisen objektin väliin.
47        /// </summary>
48        public event Action Crushed;
49
50        // Tägejä vastaavat törmäyskäsittelijät.
51        private readonly Dictionary<string, Action<Object, Object>> collisionHandlers;
52
53        // Otetaan talteen viittaus SimplePhysics.Game peliin.
54        protected new Game Game;
55
56        public Object(double width, double height) : base(width, height)
57        {
58            Game = (Game)Jypeli.Game.Instance;
59            Friction = 0.5;
60            collisionHandlers = new Dictionary<string, Action<Object, Object>>();
61            IsUpdated = true;
62            IsStatic = false;
63        }
64
65        /// <summary>
66        /// Lisää uuden törmäyskäsittelijän.
67        /// </summary>
68        public void AddCollisionHandler(string tag, Action<Object, Object> handler)
69        {
70            collisionHandlers.Add(tag, handler);
71        }
72
73        /// <summary>
74        /// Törmäyttää objektia toisen objektin kanssa.
75        /// </summary>
76        public void CollidedWith(Object other)
77        {
78            // Jos törmäyskäsittelijä löytyy, niin kutsutaan sitä.
79            if (collisionHandlers.ContainsKey(other.Tag.ToString()))
80            {
81                collisionHandlers[other.Tag.ToString()].Invoke(this, other);
82            }
83        }
84
85        /// <summary>
86        /// Tarkistaa onko objekti toisen objektin sisällä.
87        /// </summary>
88        public bool IntersectsWith(GameObject other)
89        {
90            return other.Left < Right &&
91                   Left < other.Right &&
92                   other.Bottom < Top &&
93                   Bottom < other.Top;
94        }
95
96        public void OnCrushed()
97        {
98            if (Crushed != null)
99            {
100                Crushed();
101            }
102        }
103
104        public override void Update(Time time)
105        {
106            if (IsStatic) return;
107
108            // Kutsuu SimplePhysics.Game luokan UpdateObject-metodia.
109            Game.UpdateObject(this, time);
110            base.Update(time);
111        }
112    }
113}
Note: See TracBrowser for help on using the repository browser.