ivaria/vehicle.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2012 by Dominik Seifert 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __IVARIA_VEHICLE__ 00020 #define __IVARIA_VEHICLE__ 00021 00025 /* 00026 #include "csutil/csobject.h" 00027 #include "csutil/array.h" 00028 #include "csutil/scf.h" 00029 #include "csutil/scf_interface.h" 00030 #include "cstool/primitives.h" 00031 #include "iengine/engine.h" 00032 #include "iutil/objreg.h" 00033 */ 00034 #include "ivaria/physics.h" 00035 00036 namespace CS 00037 { 00038 namespace Physics 00039 { 00040 struct iRigidBody; 00041 struct iRigidBodyFactory; 00042 struct iVehicle; 00043 00047 struct iVehicleWheel : public virtual iBase 00048 { 00049 SCF_INTERFACE (CS::Physics::iVehicleWheel, 1, 0, 0); 00050 00052 virtual iSceneNode* GetAttachedSceneNode () const = 0; 00054 virtual void SetAttachedSceneNode (iSceneNode* node) = 0; 00055 00057 virtual float GetSuspensionStiffness () const = 0; 00059 virtual void SetSuspensionStiffness (float s) = 0; 00060 00062 virtual float GetSuspensionDamping () const = 0; 00064 virtual void SetSuspensionDamping (float s) = 0; 00065 00067 virtual float GetMaxSuspensionDisplacementCM () const = 0; 00069 virtual void SetMaxSuspensionDisplacementCM (float s) = 0; 00070 00077 virtual float GetFrictionCoefficient () const = 0; 00084 virtual void SetFrictionCoefficient (float s) = 0; 00085 00087 virtual float GetMaxSuspensionForce () const = 0; 00089 virtual void SetMaxSuspensionForce (float s) = 0; 00090 00092 virtual float GetRollInfluence () const = 0; 00094 virtual void SetRollInfluence (float infl) = 0; 00095 00096 // Geometry & Other 00097 00099 virtual bool GetIsWheelDriven () const = 0; 00101 virtual void SetIsWheelDriven (bool d) = 0; 00102 00104 virtual bool GetIsWheelAffectedByBrake () const = 0; 00106 virtual void SetIsWheelAffectedByBrake (bool b) = 0; 00107 00109 virtual float GetSuspensionLength () const = 0; 00111 virtual void SetSuspensionLength (float s) = 0; 00112 00114 virtual float GetRadius () const = 0; 00116 virtual void SetRadius (float s) = 0; 00117 00119 virtual csVector3 GetWheelPosition () const = 0; 00121 virtual void SetWheelPosition (const csVector3& p) = 0; 00122 00124 virtual csVector3 GetWheelOrientation () const = 0; 00126 virtual void SetSuspensionOrientation (const csVector3& o) = 0; 00127 00129 virtual csVector3 GetAxleOrientation () const = 0; 00131 virtual void SetAxleOrientation (const csVector3& o) = 0; 00132 00133 // Run-time parameters 00134 00136 virtual const float GetRotation () const = 0; 00138 virtual void SetRotation (float r) = 0; 00139 }; 00140 00144 struct iVehicleWheelFactory : public virtual iBase 00145 { 00146 SCF_INTERFACE (CS::Physics::iVehicleWheelFactory, 1, 0, 0); 00147 00149 virtual float GetSuspensionStiffness () const = 0; 00151 virtual void SetSuspensionStiffness (float s) = 0; 00152 00154 virtual float GetSuspensionDamping () const = 0; 00156 virtual void SetSuspensionDamping (float s) = 0; 00157 00159 virtual float GetMaxSuspensionDisplacementCM () const = 0; 00161 virtual void SetMaxSuspensionDisplacementCM (float s) = 0; 00162 00169 virtual float GetFrictionCoefficient () const = 0; 00176 virtual void SetFrictionCoefficient (float s) = 0; 00177 00179 virtual float GetMaxSuspensionForce () const = 0; 00181 virtual void SetMaxSuspensionForce (float s) = 0; 00182 00184 virtual float GetRollInfluence () const = 0; 00186 virtual void SetRollInfluence (float infl) = 0; 00187 00189 // TODO: creating engines might be cleaner 00190 virtual bool GetIsWheelDriven () const = 0; 00192 virtual void SetIsWheelDriven (bool d) = 0; 00193 00195 virtual float GetSuspensionLength () const = 0; 00197 virtual void SetSuspensionLength (float s) = 0; 00198 00200 virtual float GetRadius () const = 0; 00202 virtual void SetRadius (float r) = 0; 00203 00205 virtual const csVector3& GetWheelPosition () const = 0; 00207 virtual void SetWheelPosition (const csVector3& p) = 0; 00208 00210 virtual csVector3 GetWheelOrientation () const = 0; 00212 virtual void SetSuspensionOrientation (const csVector3& o) = 0; 00213 00215 virtual const csVector3& GetAxleOrientation () const = 0; 00217 virtual void SetAxleOrientation (const csVector3& o) = 0; 00218 }; 00219 00223 struct iVehicleBrake : public virtual iBase 00224 { 00225 SCF_INTERFACE (CS::Physics::iVehicleBrake, 1, 0, 0); 00226 00231 virtual float GetMaximumForce () const = 0; 00237 virtual void SetMaximumForce (float f) = 0; 00238 00240 virtual size_t GetAffectedWheelCount () const = 0; 00245 virtual size_t GetAffectedWheel (size_t index) const = 0; 00250 virtual void AddAffectedWheel (size_t index) = 0; 00251 }; 00252 00256 struct iVehicleSteeringDevice : public virtual iBase 00257 { 00258 SCF_INTERFACE (CS::Physics::iVehicleSteeringDevice, 1, 0, 0); 00259 00264 virtual float GetMaximumSteering () const = 0; 00269 virtual void SetMaximumSteering (float angle) = 0; 00270 00272 virtual size_t GetAffectedWheelCount () const = 0; 00277 virtual size_t GetAffectedWheel (size_t index) const = 0; 00282 virtual void AddAffectedWheel (size_t index) = 0; 00283 }; 00284 00288 // TODO: orient the vehicle around the use of an animesh? or use a dedicated animation controller? 00289 struct iVehicleFactory : public virtual CS::Physics::iRigidBodyFactory 00290 { 00291 SCF_INTERFACE (CS::Physics::iVehicleFactory, 1, 0, 0); 00292 00297 virtual csPtr<iVehicle> CreateVehicle (CS::Physics::iPhysicalSector* sector) = 0; 00298 00300 virtual void AddWheelFactory (iVehicleWheelFactory* factory) = 0; 00301 00303 virtual size_t GetWheelFactoryCount () = 0; 00304 00306 virtual iVehicleWheelFactory* GetWheelFactory (size_t index) = 0; 00307 00309 virtual iVehicleBrake* CreateBrake () = 0; 00310 00312 virtual iVehicleSteeringDevice* CreateSteeringDevice () = 0; 00313 }; 00314 00318 struct iVehicle : public virtual CS::Physics::iRigidBody 00319 { 00320 SCF_INTERFACE (CS::Physics::iVehicle, 1, 0, 0); 00321 00323 virtual iVehicleWheel* GetWheel (size_t index) const = 0; 00324 00326 virtual float GetEngineForce () const = 0; 00328 virtual void SetEngineForce (float f) = 0; 00329 00336 virtual void Brake (size_t index, float scale = 1.0f) = 0; 00337 00346 virtual void Steer (size_t index, float force = 0.4f) = 0; 00347 00349 virtual float GetSpeedKMH () const = 0; 00350 }; 00351 } 00352 } 00353 00354 #endif
Generated for Crystal Space 2.1 by doxygen 1.6.1
