X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fphysic.h;h=86114eb8cc8bdc235a18e03b9a84e88bbab69554;hb=51bbae5942895f6efdd36a7ff3ae28ce897fb3c0;hp=37b6302ffa2103682964eb794baeff1c7c45890a;hpb=2398b134147461d9b4e096f1c15dbf889c0f2d41;p=supertux.git diff --git a/src/physic.h b/src/physic.h index 37b6302ff..86114eb8c 100644 --- a/src/physic.h +++ b/src/physic.h @@ -1,57 +1,77 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2004 Tobias Glaesser // -// C++ Interface: physic +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. // -// Description: -// -// -// Author: Tobias Glaesser , (C) 2004 -// -// Copyright: See COPYING file that comes with this distribution -// -// - +// This program is distributed in the hope that it will be useful, +// 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. #ifndef SUPERTUX_PHYSIC_H #define SUPERTUX_PHYSIC_H +#include "math/vector.h" + +/// Physics engine. /** This is a very simplistic physics engine handling accelerated and constant * movement along with gravity. */ class Physic { public: - Physic(); - ~Physic(); + Physic(); + ~Physic(); + + /// Resets all velocities and accelerations to 0. + void reset(); + + /// Sets velocity to a fixed value. + void set_velocity(float vx, float vy); + + void set_velocity_x(float vx); + void set_velocity_y(float vy); + + /// Velocities invertion. + void inverse_velocity_x(); + void inverse_velocity_y(); - /** resets all velocities and accelerations to 0 */ - void reset(); + float get_velocity_x(); + float get_velocity_y(); - /** sets velocity to a fixed value */ - void set_velocity(float vx, float vy); + /// Set acceleration. + /** Sets acceleration applied to the object. (Note that gravity is + * eventually added to the vertical acceleration) + */ + void set_acceleration(float ax, float ay); - float get_velocity_x(); - float get_velocity_y(); - - /** sets acceleration applied to the object. (Note that gravity is - * eventually added to the vertical acceleration) - */ - void set_acceleration(float ax, float ay); + void set_acceleration_x(float ax); + void set_acceleration_y(float ay); - float get_acceleration_x(); - float get_acceleration_y(); + float get_acceleration_x(); + float get_acceleration_y(); - /** enables or disables handling of gravity */ - void enable_gravity(bool gravity_enabled); + /// Enables or disables handling of gravity. + void enable_gravity(bool gravity_enabled); - /** applies the physical simulation to given x and y coordinates */ - void apply(float frame_ratio, float &x, float &y); + Vector get_movement(float elapsed_time); private: - /// horizontal and vertical acceleration - float ax, ay; - /// horizontal and vertical velocity - float vx, vy; - /// should we respect gravity in out calculations? - bool gravity_enabled; + /// horizontal and vertical acceleration + float ax, ay; + /// horizontal and vertical velocity + float vx, vy; + /// should we respect gravity in out calculations? + bool gravity_enabled; }; -#endif /*SUPERTUX_PHYSIC_H*/ +#endif