using System; using System.Collections.Generic; using Microsoft.Xna.Framework; namespace BouncyCatIsBouncy { class PhysicsBody { public Vector2 Position {get; set;} public float Mass {get; set;} public float CoeffRestitution { get; set; } public Vector2 Velocity { get; internal set; } public bool CollisionResponseEnable { get; set; } public delegate void CollisionEventHandler(PhysicsBody other); public event CollisionEventHandler OnCollision; public Vector2 Gravity { get; set; } public Object Tag; bool m_isColliding, m_wasColliding; public PhysicsBody() { CoeffRestitution = 1.0f; CollisionResponseEnable = true; } //This isn't close to correct, impulses should be gathered and applied during Update public void ApplyImpulse(Vector2 impulse) { Velocity += impulse; } List m_geometry = new List(); public List Geometry { get { return m_geometry; } } public void Update(float dt) { Velocity += Gravity * dt; Position += Velocity * dt; if (m_isColliding) { m_isColliding = false; } else if (m_wasColliding) { m_wasColliding = false; } } public void Collision(PhysicsBody other) { if (!m_wasColliding && OnCollision != null) { OnCollision(other); } m_wasColliding = m_isColliding = true; } } }