ecere: Initial Emscripten support
[sdk] / samples / guiAndGfx / mekano / mekanosimulation.ec
1 import "mekanodisplay"
2
3 class MekanoSimulation : struct
4 {
5 private:
6    List<MekanoObject> m_Objects { };
7
8    float m_fTimeMultiplier;
9    Time m_LastTime;
10
11 public:
12    timeMultiplier = 1.0f;
13    m_LastTime = GetTime();
14
15    property float timeMultiplier
16    {
17       get { return m_fTimeMultiplier; }
18       set { m_fTimeMultiplier=value; }
19    }
20
21    property List<MekanoObject> objectList
22    {
23       get { return m_Objects; }
24    }
25
26    property Time elapsedSeconds
27    {
28       get
29       {
30          Time time = GetTime(), diff=time - m_LastTime;
31          m_LastTime = time;
32          return diff;
33       }
34    }
35
36    void render(MekanoDisplay display)
37    {
38       for(o : m_Objects)
39          o.draw(display);
40    }
41
42    void step(Time dt)
43    {
44       for(o : m_Objects; !o.attributes.steady)
45          o.step(dt);
46    }
47
48    void stepDelta()
49    {
50       step(elapsedSeconds * m_fTimeMultiplier);
51    }
52
53    void exertForces()
54    {
55       for(o : m_Objects)
56          o.exertForces(this);
57    }
58
59    void resetForces()
60    {
61       for(o : m_Objects)
62          o.resetForces();
63    }
64
65    void addObject(MekanoObject object)
66    {
67       incref object;
68       m_Objects.Add(object);
69    }
70
71    void empty()
72    {
73       m_Objects.Free();
74    }
75 }