projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
a few more opengles changes
[supertux.git]
/
src
/
physic.cpp
diff --git
a/src/physic.cpp
b/src/physic.cpp
index
55b491a
..
cdc3787
100644
(file)
--- a/
src/physic.cpp
+++ b/
src/physic.cpp
@@
-1,7
+1,8
@@
// $Id$
// $Id$
-//
+//
// SuperTux
// Copyright (C) 2004 Tobias Glaesser <tobi.web@gmx.de>
// SuperTux
// Copyright (C) 2004 Tobias Glaesser <tobi.web@gmx.de>
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@@
-12,23
+13,17
@@
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-//
+//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
+#include <config.h>
-#include <cstdio>
-
-#include "scene.h"
-#include "defines.h"
-#include "physic.h"
-#include "timer.h"
-#include "sector.h"
-#include "level.h"
+#include "physic.hpp"
Physic::Physic()
Physic::Physic()
- : ax(0), ay(0), vx(0), vy(0), gravity_enabled
(true
)
+ : ax(0), ay(0), vx(0), vy(0), gravity_enabled
_flag(true), gravity(10 * 100
)
{
}
{
}
@@
-40,7
+35,7
@@
void
Physic::reset()
{
ax = ay = vx = vy = 0;
Physic::reset()
{
ax = ay = vx = vy = 0;
- gravity_enabled = true;
+ gravity_enabled
_flag
= true;
}
void
}
void
@@
-52,36
+47,49
@@
Physic::set_velocity_x(float nvx)
void
Physic::set_velocity_y(float nvy)
{
void
Physic::set_velocity_y(float nvy)
{
- vy =
-
nvy;
+ vy = nvy;
}
void
Physic::set_velocity(float nvx, float nvy)
{
vx = nvx;
}
void
Physic::set_velocity(float nvx, float nvy)
{
vx = nvx;
- vy = -nvy;
+ vy = nvy;
+}
+
+void
+Physic::set_velocity(const Vector& vector)
+{
+ vx = vector.x;
+ vy = vector.y;
}
void Physic::inverse_velocity_x()
{
}
void Physic::inverse_velocity_x()
{
-vx = -vx;
+
vx = -vx;
}
void Physic::inverse_velocity_y()
{
}
void Physic::inverse_velocity_y()
{
-vy = -vy;
+
vy = -vy;
}
float
}
float
-Physic::get_velocity_x()
+Physic::get_velocity_x()
const
{
return vx;
}
float
{
return vx;
}
float
-Physic::get_velocity_y()
+Physic::get_velocity_y()
const
{
{
- return -vy;
+ return vy;
+}
+
+Vector
+Physic::get_velocity() const
+{
+ return Vector(vx, vy);
}
void
}
void
@@
-93,53
+101,66
@@
Physic::set_acceleration_x(float nax)
void
Physic::set_acceleration_y(float nay)
{
void
Physic::set_acceleration_y(float nay)
{
- ay =
-
nay;
+ ay = nay;
}
void
Physic::set_acceleration(float nax, float nay)
{
}
void
Physic::set_acceleration(float nax, float nay)
{
-
ax = nax;
-
ay = -
nay;
+ ax = nax;
+
ay =
nay;
}
float
}
float
-Physic::get_acceleration_x()
+Physic::get_acceleration_x()
const
{
{
-
return ax;
+ return ax;
}
float
}
float
-Physic::get_acceleration_y()
+Physic::get_acceleration_y()
const
{
{
-
return -
ay;
+
return
ay;
}
}
-void
-Physic::
enable_gravity(bool enable_gravity)
+Vector
+Physic::
get_acceleration() const
{
{
-
gravity_enabled = enable_gravity
;
+
return Vector(ax, ay)
;
}
void
}
void
-Physic::
apply(float elapsed_time, float &x, float &
y)
+Physic::
enable_gravity(bool enable_gravit
y)
{
{
- float gravity = Sector::current()->gravity;
- float grav;
- if(gravity_enabled)
- grav = gravity / 100.0;
- else
- grav = 0;
+ gravity_enabled_flag = enable_gravity;
+}
- x += vx * elapsed_time + ax * elapsed_time * elapsed_time;
- y += vy * elapsed_time + (ay + grav) * elapsed_time * elapsed_time;
- vx += ax * elapsed_time;
-
vy += (ay + grav) * elapsed_time
;
+bool
+Physic::gravity_enabled() const
+{
+
return gravity_enabled_flag
;
}
void
}
void
-Physic::apply(Vector& vector, float elapsed_time)
+Physic::set_gravity(float gravity)
+{
+ this->gravity = gravity * 100;
+}
+
+float
+Physic::get_gravity() const
{
{
-
apply(elapsed_time, vector.x, vector.y)
;
+
return gravity / 100
;
}
}
+Vector
+Physic::get_movement(float elapsed_time)
+{
+ float grav = gravity_enabled_flag ? gravity : 0;
+
+ vx += ax * elapsed_time;
+ vy += (ay + grav) * elapsed_time;
+ Vector result(vx * elapsed_time, vy * elapsed_time);
+
+ return result;
+}