open_toontown_panda3d/panda/src/physx/physxScene.h

151 lines
5.7 KiB
C++

// Filename: physxScene.h
// Created by: pratt (Apr 7, 2006)
//
////////////////////////////////////////////////////////////////////
//
// 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."
//
////////////////////////////////////////////////////////////////////
#ifndef PHYSXSCENE_H
#define PHYSXSCENE_H
#ifdef HAVE_PHYSX
#include "pandabase.h"
#include "pvector.h"
#include "physx_enumerations.h"
#include "physxManager.h"
#include "luse.h"
#include "physxContactHandler.h"
#include "physxTriggerHandler.h"
#include "physxJointHandler.h"
class PhysxActorNode;
class PhysxActorDesc;
class PhysxJoint;
class PhysxJointDesc;
class PhysxMaterial;
class PhysxMaterialDesc;
class PhysxSceneDesc;
class PhysxSceneStats2;
class PhysxShape;
#include "NxPhysics.h"
////////////////////////////////////////////////////////////////////
// Class : PhysxScene
// Description :
////////////////////////////////////////////////////////////////////
class EXPCL_PANDAPHYSX PhysxScene {
PUBLISHED:
void update_panda_graph();
PT(PhysxActorNode) get_actor(unsigned int index);
void set_contact_reporting_enabled(bool enabled);
bool is_contact_reporting_enabled();
void set_trigger_reporting_enabled(bool enabled);
bool is_trigger_reporting_enabled();
void set_joint_reporting_enabled(bool enabled);
bool is_joint_reporting_enabled();
void set_contact_reporting_threshold(float threshold);
float get_contact_reporting_threshold();
bool check_results(PhysxSimulationStatus status, bool block);
PT(PhysxActorNode) create_actor(const PhysxActorDesc & desc, const string &name="");
PhysxJoint *create_joint(const PhysxJointDesc & desc);
PhysxMaterial *create_material(const PhysxMaterialDesc & desc);
void flush_caches();
void flush_stream();
unsigned int get_actor_group_pair_flags(unsigned short group1, unsigned short group2) const;
unsigned int get_actor_pair_flags(PhysxActorNode & actor_a, PhysxActorNode & actor_b) const;
unsigned int get_bound_for_island_size(PhysxActorNode & actor);
bool get_filter_bool() const;
unsigned int get_flags() const;
void get_gravity(LVecBase3f & vec);
bool get_group_collision_flag(unsigned short group1, unsigned short group2) const;
unsigned short get_highest_material_index() const;
PhysxMaterial * get_material_from_index(unsigned short mat_index);
float get_max_cpu_for_load_balancing();
unsigned int get_nb_actor_group_pairs() const;
unsigned int get_nb_actors() const;
unsigned int get_nb_cloths() const;
unsigned int get_nb_compartments() const;
unsigned int get_nb_dynamic_shapes() const;
unsigned int get_nb_effectors() const;
unsigned int get_nb_fluids() const;
unsigned int get_nb_force_fields() const;
unsigned int get_nb_implicit_screen_meshes() const;
unsigned int get_nb_joints() const;
unsigned int get_nb_materials() const;
unsigned int get_nb_pairs() const;
unsigned int get_nb_soft_bodies() const;
unsigned int get_nb_static_shapes() const;
PhysxJoint * get_next_joint();
unsigned int get_shape_pair_flags(PhysxShape & shape_a, PhysxShape & shape_b) const;
PhysxSimulationType get_sim_type() const;
PhysxSceneStats2 get_stats2() const;
void get_timing(float & max_timestep, unsigned int & max_iter, PhysxTimeStepMethod & method, unsigned int * num_sub_steps) const;
unsigned int get_total_nb_shapes() const;
bool is_writable();
void lock_queries();
PhysxThreadPollResult poll_for_background_work(PhysxThreadWait wait_type);
PhysxThreadPollResult poll_for_work(PhysxThreadWait wait_type);
void release_actor(PhysxActorNode & pActor);
void release_joint(PhysxJoint & pJoint);
void release_material(PhysxMaterial & pMaterial);
void reset_effector_iterator();
void reset_joint_iterator();
void reset_poll_for_work();
bool save_to_desc(PhysxSceneDesc & desc) const;
void set_actor_group_pair_flags(unsigned short group1, unsigned short group2, unsigned int flags);
void set_actor_pair_flags(PhysxActorNode & actor_a, PhysxActorNode & actor_b, unsigned int nx_contact_pair_flag);
void set_filter_bool(bool flag);
void set_filter_ops(PhysxFilterOp op0, PhysxFilterOp op1, PhysxFilterOp op2);
void set_gravity(const LVecBase3f & vec);
void set_group_collision_flag(unsigned short group1, unsigned short group2, bool enable);
void set_max_cpu_for_load_balancing(float cpu_fraction);
void set_shape_pair_flags(PhysxShape & shape_a, PhysxShape & shape_b, unsigned int nx_contact_pair_flag);
void set_timing(float max_timestep, unsigned int max_iter, PhysxTimeStepMethod method);
void shutdown_worker_threads();
void simulate(float elapsed_time);
void unlock_queries();
public:
NxScene *nScene;
private:
// Keep lists of all reference counted Physx objects so that they won't be
// inadvertantly destroyed before they've been released.
pvector<PT(PhysxActorNode)> _actors;
pvector<PT(PhysxJoint)> _joints;
pvector<PT(PhysxShape)> _shapes;
bool contact_reporting_enabled;
PhysxContactHandler contact_handler;
bool trigger_reporting_enabled;
PhysxTriggerHandler trigger_handler;
bool joint_reporting_enabled;
PhysxJointHandler joint_handler;
static PStatCollector _update_pcollector;
static PStatCollector _fetch_results_pcollector;
static PStatCollector _update_transforms_pcollector;
static PStatCollector _simulate_pcollector;
static PStatCollector _flush_stream_pcollector;
static PStatCollector _contact_reporting_pcollector;
static PStatCollector _trigger_reporting_pcollector;
static PStatCollector _joint_reporting_pcollector;
};
#include "physxScene.I"
#endif // HAVE_PHYSX
#endif // PHYSXSCENE_H