X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fphysic.h;h=86114eb8cc8bdc235a18e03b9a84e88bbab69554;hb=fc5dc4864949fc6945153bf2f172cb9c6a02e843;hp=860802161ba5b03fcd678314b575088ca9b624c5;hpb=a2715d2de23913e3bd458cbea162924e2f379495;p=supertux.git diff --git a/src/physic.h b/src/physic.h index 860802161..86114eb8c 100644 --- a/src/physic.h +++ b/src/physic.h @@ -1,60 +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); - /** resets all velocities and accelerations to 0 */ - void reset(); + void set_velocity_x(float vx); + void set_velocity_y(float vy); - /** sets velocity to a fixed value */ - void set_velocity(float vx, float vy); + /// Velocities invertion. + void inverse_velocity_x(); + void inverse_velocity_y(); - 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); + float get_velocity_x(); + float get_velocity_y(); - float get_acceleration_x(); - float get_acceleration_y(); + /// 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); - /** enables or disables handling of gravity */ - void enable_gravity(bool gravity_enabled); + void set_acceleration_x(float ax); + void set_acceleration_y(float ay); - /** applies the physical simulation to given x and y coordinates */ - void apply(float &x, float &y); + float get_acceleration_x(); + float get_acceleration_y(); + + /// Enables or disables handling of gravity. + void enable_gravity(bool gravity_enabled); + + 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; }; -/* global variables. */ -extern float gravity; - -#endif /*SUPERTUX_PHYSIC_H*/ +#endif