| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University. All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license. You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file odeWorld.h
- * @author joswilso
- * @date 2006-12-27
- */
- #ifndef ODEWORLD_H
- #define ODEWORLD_H
- #include "pandabase.h"
- #include "typedObject.h"
- #include "luse.h"
- #include "ode_includes.h"
- #include "pmap.h"
- #include "numeric_types.h"
- #include "ode_includes.h"
- #include "odeHelperStructs.h"
- class OdeBody;
- class OdeJoint;
- /**
- *
- */
- class EXPCL_PANDAODE OdeWorld : public TypedObject {
- PUBLISHED:
- OdeWorld();
- OdeWorld(const OdeWorld ©);
- virtual ~OdeWorld();
- void destroy();
- INLINE bool is_empty() const;
- INLINE dWorldID get_id() const;
- INLINE void set_gravity(dReal x, dReal y, dReal z);
- INLINE void set_gravity(const LVecBase3f &vec);
- INLINE void set_erp(dReal erp);
- INLINE void set_cfm(dReal cfm);
- INLINE void set_quick_step_num_iterations(int num);
- INLINE void set_quick_step_w(dReal over_relaxation);
- INLINE void set_contact_max_correcting_vel(dReal vel);
- INLINE void set_contact_surface_layer(dReal depth);
- INLINE void set_auto_disable_linear_threshold(dReal linear_threshold);
- INLINE void set_auto_disable_angular_threshold(dReal angular_threshold);
- INLINE void set_auto_disable_steps(int steps);
- INLINE void set_auto_disable_time(dReal time);
- INLINE void set_auto_disable_flag(int do_auto_disable);
- INLINE LVecBase3f get_gravity() const;
- INLINE dReal get_erp() const;
- INLINE dReal get_cfm() const;
- INLINE int get_quick_step_num_iterations() const;
- INLINE dReal get_quick_step_w() const;
- INLINE dReal get_contact_max_correcting_vel() const;
- INLINE dReal get_contact_surface_layer() const;
- INLINE dReal get_auto_disable_linear_threshold() const;
- INLINE dReal get_auto_disable_angular_threshold() const;
- INLINE int get_auto_disable_steps() const;
- INLINE dReal get_auto_disable_time() const;
- INLINE int get_auto_disable_flag() const;
- INLINE LVecBase3f impulse_to_force(dReal stepsize, \
- dReal ix, dReal iy, dReal iz);
- INLINE LVecBase3f impulse_to_force(dReal stepsize, \
- const LVecBase3f &impulse);
- INLINE void step(dReal stepsize);
- INLINE void quick_step(dReal stepsize);
- INLINE int compare_to(const OdeWorld &other) const;
- void init_surface_table(uint8_t num_surfaces);
- // void assign_surface_body(OdeBody& body, int surface);
- void add_body_dampening(OdeBody& body, int surface);
- void set_surface_entry(uint8_t pos1, uint8_t pos2,
- dReal mu,
- dReal bounce,
- dReal bounce_vel,
- dReal soft_erp,
- dReal soft_cfm,
- dReal slip,
- dReal dampen);
- float apply_dampening(float dt, OdeBody& body);
- operator bool () const;
- public:
- sSurfaceParams& get_surface(uint8_t surface1, uint8_t surface2);
- void set_surface(int pos1, int pos2, sSurfaceParams& entry);
- sBodyParams get_surface_body(dBodyID id);
- void set_dampen_on_bodies(dBodyID id1, dBodyID id2,dReal damp);
- private:
- dWorldID _id;
- sSurfaceParams *_surface_table;
- uint8_t _num_surfaces;
- typedef pmap<dBodyID, sBodyParams> BodyDampenMap;
- BodyDampenMap _body_dampen_map;
- public:
- static TypeHandle get_class_type() {
- return _type_handle;
- }
- static void init_type() {
- TypedObject::init_type();
- register_type(_type_handle, "OdeWorld",
- TypedObject::get_class_type());
- }
- virtual TypeHandle get_type() const {
- return get_class_type();
- }
- virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
- private:
- static TypeHandle _type_handle;
- };
- #include "odeWorld.I"
- #endif
|