# OgreRefAppApplicationObject.h

Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of the OGRE Reference Application, a layer built
    00004 on top of OGRE(Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright (c) 2000-2005 The OGRE Team
    00008 Also see acknowledgements in Readme.html
    00009
    00010 This program is free software; you can redistribute it and/or modify it under
    00011 the terms of the GNU Lesser General Public License as published by the Free Software
    00012 Foundation; either version 2 of the License, or (at your option) any later
    00013 version.
    00014
    00015 This program is distributed in the hope that it will be useful, but WITHOUT
    00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    00018
    00019 You should have received a copy of the GNU Lesser General Public License along with
    00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
    00022 http://www.gnu.org/copyleft/lesser.txt.
    00023 -----------------------------------------------------------------------------
    00024 */
    00025 #ifndef __REFAPP_APPLICATIONOBJECT_H__
    00026 #define __REFAPP_APPLICATIONOBJECT_H__
    00027
    00028 #include "OgreRefAppPrerequisites.h"
    00029
    00030 namespace OgreRefApp {
    00031
    00042     class _OgreRefAppExport ApplicationObject : public UserDefinedObject
    00043     {
    00044     protected:
    00045         // Visual component
    00046         SceneNode* mSceneNode;
    00047         Entity* mEntity;
    00048
    00050         dBody* mOdeBody;
    00052         dMass mMass;
    00053
    00054
    00056         typedef std::list<dGeom*> CollisionProxyList;
    00057         CollisionProxyList mCollisionProxies;
    00058
    00059
    00060         bool mDynamicsEnabled;
    00061         bool mReenableIfInteractedWith;
    00062         bool mCollisionEnabled;
    00063
    00064         Real mBounceCoeffRestitution;
    00065         Real mBounceVelocityThreshold;
    00066         Real mSoftness;
    00067         Real mFriction;
    00068         Real mLinearVelDisableThreshold;
    00069         Real mAngularVelDisableThreshold;
    00070         Real mDisableTime;
    00071         Real mDisableTimeEnd;
    00072
    00073         // Set up method, must override
    00074         virtual void setUp(const String& name) = 0;
    00076         virtual void updateCollisionProxies(void);
    00077
    00079         virtual bool testCollidePlaneBounds(SceneQuery::WorldFragment* wf);
    00080
    00082         virtual void setEntityQueryFlags(void);
    00083
    00084     public:
    00085         ApplicationObject(const String& name);
    00086         virtual ~ApplicationObject();
    00087
    00089         virtual void setPosition(const Vector3& vec);
    00091         virtual void setPosition(Real x, Real y, Real z);
    00093         virtual void setOrientation(const Quaternion& orientation);
    00095         virtual const Vector3& getPosition(void);
    00097         virtual const Quaternion& getOrientation(void);
    00098
    00100         virtual void _updateFromDynamics(void);
    00101
    00103         virtual bool isCollisionEnabled(void);
    00109         virtual bool isDynamicsEnabled(void);
    00135         virtual void setDynamicsDisableThreshold(Real linearSq, Real angularSq, Real overTime);
    00136
    00137         virtual void setCollisionEnabled(bool enabled);
    00151         virtual void setDynamicsEnabled(bool enabled, bool reEnableOnInteraction = false);
    00152
    00165         virtual void setBounceParameters(Real restitutionValue, Real velocityThreshold);
    00167         virtual Real getBounceRestitutionValue(void);
    00169         virtual Real getBounceVelocityThreshold(void);
    00170
    00178         virtual void setSoftness(Real softness);
    00180         virtual Real getSoftness(void);
    00181
    00190         virtual void setFriction(Real friction);
    00192         virtual Real getFriction(void);
    00199         virtual void addForce(const Vector3& direction, const Vector3& atPosition = Vector3::ZERO);
    00206         virtual void addForce(Real dir_x, Real dir_y, Real dir_z,
    00207             Real pos_x = 0, Real pos_y = 0, Real pos_z = 0);
    00214         virtual void addForceWorldSpace(const Vector3& direction, const Vector3& atPosition = Vector3::ZERO);
    00221         virtual void addForceWorldSpace(Real dir_x, Real dir_y, Real dir_z,
    00222         Real pos_x, Real pos_y, Real pos_z);
    00227         virtual void addTorque(const Vector3& direction);
    00232         virtual void addTorque(Real x, Real y, Real z);
    00237         virtual void addTorqueWorldSpace(const Vector3& direction);
    00242         virtual void addTorqueWorldSpace(Real x, Real y, Real z);
    00243
    00251         virtual bool testCollide(ApplicationObject* otherObj);
    00252
    00260         virtual bool testCollide(SceneQuery::WorldFragment* wf);
    00261
    00263         struct CollisionInfo
    00264         {
    00266             Vector3 position;
    00268             Vector3 normal;
    00270             Real penetrationDepth;
    00271         };
    00274         virtual void _notifyCollided(ApplicationObject* otherObj, const CollisionInfo& info);
    00277         virtual void _notifyCollided(SceneQuery::WorldFragment* wf, const CollisionInfo& info);
    00280         SceneNode* getSceneNode(void);
    00282         Entity* getEntity(void);
    00284         dBody* getOdeBody(void);
    00285
    00294         void setMassSphere(Real density, Real radius);
    00295
    00304         void setMassBox(Real density, const Vector3& dimensions,
    00305             const Quaternion& orientation = Quaternion::IDENTITY);
    00306
    00317         void setMassCappedCylinder(Real density, Real length, Real width,
    00318             const Quaternion& orientation = Quaternion::IDENTITY);
    00319
    00325         void setMassExpert(Real mass, const Vector3 center, const Matrix3 inertia);
    00326
    00328         const dMass* getOdeMass(void);
    00329
    00336         void setLinearVelocity(const Vector3& vel);
    00343         void setLinearVelocity(Real x, Real y, Real z);
    00349         const Vector3& getLinearVelocity(void);
    00350
    00356         const Vector3& getAngularVelocity(void);
    00357
    00364         void setAngularVelocity(const Vector3& vel);
    00371         void setAngularVelocity(Real x, Real y, Real z);
    00372
    00380         virtual void translate(const Vector3& d);
    00387         virtual void translate(Real x, Real y, Real z);
    00388
    00396         virtual void translateWorldSpace(const Vector3& d);
    00403         virtual void translateWorldSpace(Real x, Real y, Real z);
    00404
    00407         virtual void roll(const Radian& angle);
    00408 #ifndef OGRE_FORCE_ANGLE_TYPES
    00409         inline void roll(Real angleunits) {
    00410             roll ( Angle(angleunits) );
    00411         }
    00412 #endif//OGRE_FORCE_ANGLE_TYPES
    00413
    00416         virtual void pitch(const Radian& angle);
    00417 #ifndef OGRE_FORCE_ANGLE_TYPES
    00418         inline void pitch(Real angleunits) {
    00419             pitch ( Angle(angleunits) );
    00420         }
    00421 #endif//OGRE_FORCE_ANGLE_TYPES
    00422
    00425         virtual void yaw(const Radian& angle);
    00426 #ifndef OGRE_FORCE_ANGLE_TYPES
    00427         inline void yaw(Real angleunits) {
    00428             yaw ( Angle(angleunits) );
    00429         }
    00430 #endif//OGRE_FORCE_ANGLE_TYPES
    00431
    00434         virtual void rotate(const Vector3& axis, const Radian& angle);
    00435 #ifndef OGRE_FORCE_ANGLE_TYPES
    00436         inline void rotate(const Vector3& axis, Real angleunits) {
    00437             rotate ( axis, Angle(angleunits) );
    00438         }
    00439 #endif//OGRE_FORCE_ANGLE_TYPES
    00440
    00443         virtual void rotate(const Quaternion& q);
    00444
    00445
    00446     };
    00447
    00448
    00449 } // namespace
    00450
    00451 #endif
    00452
    00453

Copyright © 2000-2005 by The OGRE Team
Last modified Sun Nov 20 12:36:05 2005