]> git.localhorst.tv Git - gworm.git/blob - src/world/World.cpp
219708ecb066749179c08603dc731761318a9837
[gworm.git] / src / world / World.cpp
1 #include "World.h"
2
3 #include "../graphics/const.h"
4
5
6 namespace gworm {
7
8 World::World(Vector<int> size)
9 : size(size)
10 , count(size.x * size.y)
11 , masses(count, 1000000000.0f)
12 , colors(count, Color(0x7F, 0x7F, 0x7F)) {
13
14 }
15
16
17 void World::Update(float dt) {
18
19 }
20
21
22 Vector<float> World::ForceAt(Vector<float> p1, float m1) const {
23         Vector<float> force(0, 0);
24
25         for (int i = 0; i < count; ++i) {
26                 const Vector<float> p2(i % size.y, i / size.y);
27                 if (p1 == p2) continue;
28
29                 const Vector<float> diff(p2 - p1);
30                 const Vector<float> dir(Norm(diff));
31
32                 const float m2 = masses[i];
33                 const float r2 = Dot(diff, diff);
34
35                 const float mag = G * ((m1 * m2) / r2) * 2; // double because m2 is our reference frame
36
37                 force += dir * mag;
38         }
39
40         return force;
41 }
42
43 }