summaryrefslogtreecommitdiff
path: root/mass.cpp
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2010-08-19 13:24:37 +0000
committerIan C <ianc@noddybox.co.uk>2010-08-19 13:24:37 +0000
commitaf34bad8b39e95276b0d4e08ccdc26f89df2d2ec (patch)
tree427e06fe813cd847f96e12ff612d245b2da970c5 /mass.cpp
parent19bbd5822593c7198dd54eb0f5d38fa1ed8d8fb7 (diff)
Updates to maths and added the use of a 3D vector.
Diffstat (limited to 'mass.cpp')
-rw-r--r--mass.cpp79
1 files changed, 23 insertions, 56 deletions
diff --git a/mass.cpp b/mass.cpp
index 20f932c..95a76f9 100644
--- a/mass.cpp
+++ b/mass.cpp
@@ -41,10 +41,6 @@ Mass::Mass()
m_y=0.0;
m_z=0.0;
- m_dx=0.0;
- m_dy=0.0;
- m_dz=0.0;
-
m_r=1.0;
m_g=1.0;
m_b=1.0;
@@ -69,9 +65,10 @@ Mass::Mass()
Mass::Mass(const string& name, double mass, double scale,
- double posx, double posy, double posz,
- double dx, double dy, double dz,
- GLfloat r, GLfloat g, GLfloat b, double rot, int shield)
+ double posx, double posy, double posz,
+ double dx, double dy, double dz,
+ GLfloat r, GLfloat g, GLfloat b, double rot, int shield)
+ : m_delta(dx, dy, dz)
{
m_name=name;
@@ -83,10 +80,6 @@ Mass::Mass(const string& name, double mass, double scale,
m_y=posy;
m_z=posz;
- m_dx=dx;
- m_dy=dy;
- m_dz=dz;
-
m_r=r;
m_g=g;
m_b=b;
@@ -128,8 +121,8 @@ Mass::~Mass()
// ---------------------------------------- PUBLIC MEMBERS
//
void Mass::setRing(double from, double to,
- GLfloat r, GLfloat g, GLfloat b, GLfloat alpha,
- double rot, double ang)
+ GLfloat r, GLfloat g, GLfloat b, GLfloat alpha,
+ double rot, double ang)
{
m_ring=true;
m_ring_from=from;
@@ -217,9 +210,9 @@ void Mass::getPreviousPosition(double& x, double& y, double& z) const
void Mass::getDelta(double& dx, double& dy, double& dz) const
{
- dx=m_dx;
- dy=m_dy;
- dz=m_dz;
+ dx = m_delta.dx();
+ dy = m_delta.dy();
+ dz = m_delta.dz();
}
@@ -235,9 +228,8 @@ void Mass::reset(double mass, double dx, double dy, double dz)
{
m_mass=mass;
calcSize();
- m_dx=dx;
- m_dy=dy;
- m_dz=dz;
+
+ m_delta.Set(dx, dy, dz);
if (m_mass<=0.0)
{
@@ -296,39 +288,13 @@ bool Mass::calcAttraction(Mass& m, double gr_const)
collide=false;
}
- // ga=((gr_const*m.m_mass)*(gr_const*m_mass))/(dist*gr_const);
+ ga = gr_const * (m.m_mass / (dist * dist));
- ga=gr_const * (m_mass / dist);
-
- if (m_x<m.m_x)
- {
- m_dx+=ga/(m_mass/dx);
- }
+ Vec3D force(dx, dy, dz);
- if (m_x>m.m_x)
- {
- m_dx-=ga/(m_mass/dx);
- }
+ force.SetLength(ga);
- if (m_y<m.m_y)
- {
- m_dy+=ga/(m_mass/dy);
- }
-
- if (m_y>m.m_y)
- {
- m_dy-=ga/(m_mass/dy);
- }
-
- if (m_z<m.m_z)
- {
- m_dz+=ga/(m_mass/dz);
- }
-
- if (m_z>m.m_z)
- {
- m_dz-=ga/(m_mass/dz);
- }
+ m_delta.Add(force);
return collide && !m_massless;
}
@@ -340,9 +306,9 @@ void Mass::move()
m_prevy=m_y;
m_prevz=m_z;
- m_x+=m_dx;
- m_y+=m_dy;
- m_z+=m_dz;
+ m_x+=m_delta.dx();
+ m_y+=m_delta.dy();
+ m_z+=m_delta.dz();
m_ang+=m_rot;
m_ring_ang+=m_ring_rot;
@@ -462,9 +428,9 @@ void Mass::draw(bool solid, bool texture, Mass::DrawItem item) const
//
double Mass::calcDistance2(Mass& m, double& dx, double& dy, double& dz)
{
- dx=abs(m_x-m.m_x);
- dy=abs(m_y-m.m_y);
- dz=abs(m_z-m.m_z);
+ dx = m.m_x-m_x;
+ dy = m.m_y-m_y;
+ dz = m.m_z-m_z;
return sqrt((dx*dx)+(dy*dy)+(dz*dz));
}
@@ -489,7 +455,8 @@ ostream& operator<<(ostream& os, const Mass& m)
os << "Name " << m.m_name << " (mass " << m.m_mass
<< ", size " << m.m_size << ", shield " << m.m_shield << ")" << endl
<< " P (" << m.m_x << ", " << m.m_y << ", " << m.m_z << ")" << endl
- << " D (" << m.m_dx << ", " << m.m_dy << ", " << m.m_dz << ")" << endl
+ << " D (" << m.m_delta.dx() << ", " << m.m_delta.dy()
+ << ", " << m.m_delta.dz() << ")" << endl
<< " R (" << m.m_rot << ", " << m.m_ang << ")" << endl
<< " T (" << m.m_textured << ", " << m.m_texture_id << ")" << endl
<< " Ring (" << m.m_ring << ", " << m.m_ring_from