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

Revision 7638, 3.1 KB checked in by sieerinn, 4 years ago (diff)

Alkeellinen versio fysiikkamoottorista (jossa liikkuvat tasanteet ei vielä toimi)

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        // Tägejä vastaavat törmäyskäsittelijät.
45        private readonly Dictionary<string, Action<Object, Object>> collisionHandlers;
46
47        // Otetaan talteen viittaus SimplePhysics.Game peliin.
48        protected new Game Game;
49
50        public Object(double width, double height) : base(width, height)
51        {
52            Game = (Game)Jypeli.Game.Instance;
53            Friction = 0.5;
54            collisionHandlers = new Dictionary<string, Action<Object, Object>>();
55            IsUpdated = true;
56            IsStatic = false;
57        }
58
59        /// <summary>
60        /// Lisää uuden törmäyskäsittelijän.
61        /// </summary>
62        public void AddCollisionHandler(string tag, Action<Object, Object> handler)
63        {
64            collisionHandlers.Add(tag, handler);
65        }
66
67        /// <summary>
68        /// Törmäyttää objektia toisen objektin kanssa.
69        /// </summary>
70        public void CollidedWith(Object other)
71        {
72            // Jos törmäyskäsittelijä löytyy, niin kutsutaan sitä.
73            if (collisionHandlers.ContainsKey(other.Tag.ToString()))
74            {
75                collisionHandlers[other.Tag.ToString()].Invoke(this, other);
76            }
77        }
78
79        /// <summary>
80        /// Tarkistaa onko objekti toisen objektin sisällä.
81        /// </summary>
82        public bool IntersectsWith(GameObject other)
83        {
84            return other.Left < Right &&
85                   Left < other.Right &&
86                   other.Bottom < Top &&
87                   Bottom < other.Top;
88        }
89
90        public override void Update(Time time)
91        {
92            if (IsStatic) return;
93
94            // Kutsuu SimplePhysics.Game luokan UpdateObject-metodia.
95            Game.UpdateObject(this, time);
96            base.Update(time);
97        }
98    }
99}
Note: See TracBrowser for help on using the repository browser.