Physics World
// Physics world.
class RVAPI World
{
public:
// Query result.
struct QueryResult
{
// Contact position.
S3f pos;
// Contact normal.
S3f normal;
// Reference.
void *ref;
};
// Query results array.
typedef Array<QueryResult> QueryResults;
// Convert query result reference to host entity.
EntKey GetQueryResultHost(const QueryResult &result) const;
// Query world using AABB. results must be array of RVWorldQueryResult. Returns true if any hits.
bool Query(QueryResults &results, const B3f &aabb);
// Query world for first intersection with ray. Ray goes from [posA] to [posB].
// [queryResults] must be array of RVWorldQueryResult. Returns true if any hits.
bool RayCast(QueryResults &results, const S3f &posA, const S3f &posB);
// Query world for all intersections with ray. Ray goes from [posA] to [posB].
// [queryResults] must be array of RVWorldQueryResult. Returns true if any hits.
bool RayCastAll(QueryResults &results, const S3f &posA, const S3f &posB);
// Set gravity. Default is -9.8f.
void SetGravity(const S3f &gravity);
// Enable/Disable sleeping.
void SetSleeping(bool enable = true);
// Set physics solver iterations. [vel] is number of velocity iterations (default 12).
// [pos] is number of position iterations (default 2).
void SetIter(uint vel, uint pos);
// Advance world simulation.
void Step();
// Internal.
void *operator () () const { return (void *)wobj; }
// Constructor.
World(void *wobj);
private:
void *wobj;
friend class SceneBridge;
};