-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSolver.cpp
More file actions
48 lines (39 loc) · 1006 Bytes
/
Solver.cpp
File metadata and controls
48 lines (39 loc) · 1006 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "Solver.h"
#include "Collider.h"
#include "Vector2D.h"
#include "Rigidbody.h"
Solver::Solver(ColliderShape *collA, ColliderShape *collB, Physicalbody *physA, Physicalbody *physB)
: _collA(collA)
, _collB(collB)
, _physA(physA)
, _physB(physB)
{
CalcDumpScale();
}
void Solver::CalcDumpScale()
{
//めり込みを解消するベクトルを計算
_d = _collA->CalcDump(_collB);
_dB = _d.GetNormalized();
_dA = _dB * -1;
}
void Solver::Solve()
{
//片方だけ動くなら、動く方をめり込み解除
if (!_physA->IsMovable() == MAX_MASS && _physB->IsMovable())
{
_physB->_move += _d;
return;
}
if (!_physB->IsMovable() && _physA->IsMovable())
{
_physA->_move -= _d;
return;
}
double total = _physA->GetMass() + _physB->GetMass();
_physA->_move -= Vector2D(_d * (_physB->GetMass() / total));
_physB->_move += Vector2D(_d * (_physA->GetMass() / total));
}
Solver::~Solver()
{
}