2 import "mekanosimulation"
4 class ObjectAttributes : uint { bool selected:1, steady:1, highlighted:1; };
8 void addPoint(MekanoPoint point)
14 float m_fInertiaMoment;
19 float m_fAppliedTorque;
20 float m_fAngularAcceleration;
21 float m_fAngularSpeed;
23 float m_fAngularFriction;
25 float m_fBoundingRadius;
27 Vector2D m_AppliedForce;
28 Vector2D m_Acceleration;
31 Vector2D m_LastPosition;
33 ObjectAttributes m_Attributes;
34 List<MekanoPoint> m_Points { };
43 property MekanoSimulation simulation { set { value.addObject(this); } }
47 angularFriction = 0.1f;
49 property float cosRotation { get { return m_fCosRotation; } };
50 property float sinRotation { get { return m_fSinRotation; } };
54 set { m_fMass=value; }
55 get { return m_fMass; }
58 property float inertiaMoment
60 set { m_fInertiaMoment=value; }
61 get { return m_fInertiaMoment; }
64 property float boundingRadius
66 set { m_fBoundingRadius=value; }
67 get { return m_fBoundingRadius; }
70 property float angularSpeed
72 set { m_fAngularSpeed=value; }
73 get { return m_fAngularSpeed; }
76 property float angularAcceleration
78 set { m_fAngularAcceleration=value; }
79 get { return m_fAngularAcceleration; }
82 property float angularFriction
84 set { m_fAngularFriction=value; }
85 get { return m_fAngularFriction; }
88 property Vector2D lastPosition
90 set { m_LastPosition=value; }
91 get { value = m_LastPosition; }
94 property Vector2D position
96 set { m_Position=value; }
97 get { value = m_Position; }
100 property Vector2D speed
102 set { m_Speed=value; }
103 get { value = m_Speed; }
106 property Vector2D acceleration
108 set { m_Acceleration=value; }
109 get { value = m_Acceleration; }
112 property Vector2D deltaPosition { get { value.subtract(m_Position, m_LastPosition); } };
114 property ObjectAttributes attributes { set { m_Attributes=value; } get { return m_Attributes; } }
116 property Vector2D AppliedForce
118 set { m_AppliedForce=value; }
119 get { value = m_AppliedForce; }
122 property float appliedTorque
124 set { m_fAppliedTorque=value; }
125 get { return m_fAppliedTorque; }
128 property List<MekanoPoint> points { get { return m_Points; } };
130 property MekanoPoint centerPoint
134 for(p : m_Points; p.type == center)
140 property float rotation
142 get { return m_fRotation; }
146 m_fCosRotation=(float)cos(value);
147 m_fSinRotation=(float)sin(value);
151 virtual void resetForces() { m_AppliedForce = { }, m_fAppliedTorque = 0; };
152 virtual void exertForces(MekanoSimulation sim);
153 virtual void applyForce(Vector2D f, MekanoPoint pt);
154 virtual void draw(MekanoDisplay display);
155 virtual void step(Time dt) { lastPosition = m_Position; }
156 virtual bool isInside(Vector2D v) { return false; }
157 virtual bool isColliding(MekanoPoint pt, Vector2D normal) { return false; }
159 void computeBoundingRadius()
161 for(p : m_Points; p.type == vertex)
162 p.computeBoundingRadius();