Patch
This commit is contained in:
@@ -184,6 +184,45 @@ void ActorBase::CreatePlayerBody(float radius, float height, float mass, float f
|
||||
|
||||
}
|
||||
|
||||
void ActorBase::CreatePlayerBodyBox(float x, float y, float z, float mass, float friction, float damping)
|
||||
{
|
||||
m_shape = new btBoxShape(btVector3(x, y, z));
|
||||
|
||||
m_mass = mass;
|
||||
btVector3 local_inertia(0.0f, 0.0f, 0.0f);
|
||||
if (m_mass > 0.f) {
|
||||
m_shape->calculateLocalInertia(m_mass, local_inertia);
|
||||
}
|
||||
|
||||
btRigidBody::btRigidBodyConstructionInfo rigid_body_ci(m_mass, nullptr, m_shape, local_inertia);
|
||||
|
||||
m_rigidBody = new btRigidBody(rigid_body_ci);
|
||||
m_rigidBody->setUserPointer(this);
|
||||
m_rigidBody->setMotionState(&m_ph_motion_state);
|
||||
m_ph_motion_state.setBody(m_rigidBody);
|
||||
|
||||
// I'm sure that position is valid
|
||||
btTransform xform;
|
||||
xform.setIdentity();
|
||||
xform.setOrigin(glmVectorToBt(m_position));
|
||||
m_rigidBody->setWorldTransform(xform);
|
||||
|
||||
// ACTOR STUFF
|
||||
m_rigidBody->setAngularFactor(btVector3(0.0f, 0.0f, 0.0f));
|
||||
|
||||
m_rigidBody->setFriction(friction);
|
||||
m_rigidBody->setAnisotropicFriction(btVector3(0.0f, 0.0f, 0.0f));
|
||||
m_rigidBody->setDamping(damping, 0.0f);
|
||||
|
||||
m_rigidBody->setActivationState(DISABLE_DEACTIVATION);
|
||||
|
||||
// #TODO: body filter and mask
|
||||
g_PhysicsWorld->GetWorld()->addRigidBody(m_rigidBody);
|
||||
|
||||
m_bodyDirty = true;
|
||||
|
||||
}
|
||||
|
||||
void ActorBase::CreatePlayerBody_Old()
|
||||
{
|
||||
|
||||
@@ -288,6 +327,7 @@ void ActorBase::RegisterFunctions()
|
||||
m_luaObject.Register("update_camera_movement", *this, &ActorBase::Lua_UpdateCameraMovement);
|
||||
m_luaObject.Register("create_player_body", *this, &ActorBase::Lua_CreatePlayerBody);
|
||||
m_luaObject.Register("create_player_body_old", *this, &ActorBase::Lua_CreatePlayerBodyOld);
|
||||
m_luaObject.Register("create_player_body_box", *this, &ActorBase::Lua_CreatePlayerBodyBox);
|
||||
m_luaObject.Register("update_body_movement", *this, &ActorBase::Lua_UpdateBodyMovement);
|
||||
m_luaObject.Register("get_action", *this, &ActorBase::Lua_GetAction);
|
||||
m_luaObject.Register("get_movement", *this, &ActorBase::Lua_GetMovement);
|
||||
@@ -350,6 +390,21 @@ int ActorBase::Lua_CreatePlayerBodyOld(LuaPlus::LuaState* state)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ActorBase::Lua_CreatePlayerBodyBox(LuaPlus::LuaState* state)
|
||||
{
|
||||
LuaPlus::LuaStack stack(state);
|
||||
|
||||
float x = (float)stack[2].GetNumber();
|
||||
float y = (float)stack[3].GetNumber();
|
||||
float z = (float)stack[4].GetNumber();
|
||||
float mass = (float)stack[5].GetNumber();
|
||||
float friction = (float)stack[6].GetNumber();
|
||||
float damping = (float)stack[7].GetNumber();
|
||||
|
||||
CreatePlayerBodyBox(x, y, z, mass, friction, damping);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ActorBase::Lua_GetAction(LuaPlus::LuaState* state)
|
||||
{
|
||||
int action = GenAction();
|
||||
|
||||
@@ -33,6 +33,7 @@ public:
|
||||
void ActivateCamera();
|
||||
|
||||
void CreatePlayerBody(float radius, float height, float mass, float friction, float damping);
|
||||
void CreatePlayerBodyBox(float x, float y, float z, float mass, float friction, float damping);
|
||||
void CreatePlayerBody_Old();
|
||||
|
||||
bool OnGround();
|
||||
@@ -49,6 +50,7 @@ public:
|
||||
int Lua_ActivateCamera(LuaPlus::LuaState* state);
|
||||
int Lua_CreatePlayerBody(LuaPlus::LuaState* state);
|
||||
int Lua_CreatePlayerBodyOld(LuaPlus::LuaState* state);
|
||||
int Lua_CreatePlayerBodyBox(LuaPlus::LuaState* state);
|
||||
int Lua_GetAction(LuaPlus::LuaState* state);
|
||||
int Lua_GetMovement(LuaPlus::LuaState* state);
|
||||
int Lua_OnGround(LuaPlus::LuaState* state);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "scenemanager.h"
|
||||
#include "game_world_objects.h"
|
||||
#include "actor_base.h"
|
||||
#include "physics/physicsworld.h"
|
||||
|
||||
#include <pugixml.hpp>
|
||||
|
||||
@@ -236,6 +237,15 @@ void registerEngine()
|
||||
REGISTER_CONSTANT(EMovementDir_Right);
|
||||
REGISTER_CONSTANT(EMovementDir_Jump);
|
||||
|
||||
// Physics
|
||||
REGISTER_CONSTANT(PhysicsFilter_None);
|
||||
REGISTER_CONSTANT(PhysicsFilter_Player);
|
||||
REGISTER_CONSTANT(PhysicsFilter_Triggers);
|
||||
REGISTER_CONSTANT(PhysicsFilter_Usable);
|
||||
REGISTER_CONSTANT(PhysicsFilter_NPC);
|
||||
REGISTER_CONSTANT(PhysicsFilter_Obstacle);
|
||||
REGISTER_CONSTANT(kPhysicsFilter_AllAux);
|
||||
|
||||
#undef REGISTER_CONSTANT
|
||||
}
|
||||
|
||||
|
||||
@@ -223,6 +223,10 @@ void Entity::RegisterBaseFunctions()
|
||||
m_luaObject.Register("create_box_body", *this, &Entity::Lua_CreateBoxBody);
|
||||
m_luaObject.Register("create_sphere_body", *this, &Entity::Lua_CreateSphereBody);
|
||||
m_luaObject.Register("ForceBodyTransformUpdate", *this, &Entity::Lua_ForceBodyTransformUpdate);
|
||||
m_luaObject.Register("set_body_filter_group", *this, &Entity::Lua_SetBodyFilterGroup);
|
||||
m_luaObject.Register("set_body_filter_mask", *this, &Entity::Lua_SetBodyFilterMask);
|
||||
m_luaObject.Register("get_body_filter_group", *this, &Entity::Lua_GetBodyFilterGroup);
|
||||
m_luaObject.Register("get_body_filter_mask", *this, &Entity::Lua_GetBodyFilterMask);
|
||||
|
||||
// animation
|
||||
m_luaObject.Register("find_animation", *this, &Entity::Lua_FindAnimation);
|
||||
@@ -495,6 +499,43 @@ int Entity::Lua_ForceBodyTransformUpdate(LuaPlus::LuaState* state)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Entity::Lua_SetBodyFilterGroup(LuaPlus::LuaState* state)
|
||||
{
|
||||
LuaPlus::LuaStack stack(state);
|
||||
SetBodyFilterGroup((PhysicsFilter)stack[2].GetInteger());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Entity::Lua_SetBodyFilterMask(LuaPlus::LuaState* state)
|
||||
{
|
||||
LuaPlus::LuaStack stack(state);
|
||||
SetBodyFilterMask(stack[2].GetInteger());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Entity::Lua_GetBodyFilterGroup(LuaPlus::LuaState* state)
|
||||
{
|
||||
if (m_rigidBody)
|
||||
state->PushInteger(m_rigidBody->getBroadphaseHandle()->m_collisionFilterGroup);
|
||||
else
|
||||
state->PushInteger(-1);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Entity::Lua_GetBodyFilterMask(LuaPlus::LuaState* state)
|
||||
{
|
||||
if (m_rigidBody)
|
||||
state->PushInteger(m_rigidBody->getBroadphaseHandle()->m_collisionFilterMask);
|
||||
else
|
||||
state->PushInteger(-1);
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Entity::Lua_FindAnimation(LuaPlus::LuaState* state)
|
||||
{
|
||||
LuaPlus::LuaStack stack(state);
|
||||
@@ -712,6 +753,22 @@ void Entity::ForceUpdateBodyTranslation()
|
||||
m_rigidBody->setWorldTransform(xform);
|
||||
}
|
||||
|
||||
void Entity::SetBodyFilterGroup(PhysicsFilter group)
|
||||
{
|
||||
if (!m_rigidBody)
|
||||
return;
|
||||
|
||||
m_rigidBody->getBroadphaseHandle()->m_collisionFilterGroup = group;
|
||||
}
|
||||
|
||||
void Entity::SetBodyFilterMask(int mask)
|
||||
{
|
||||
if (!m_rigidBody)
|
||||
return;
|
||||
|
||||
m_rigidBody->getBroadphaseHandle()->m_collisionFilterMask = mask;
|
||||
}
|
||||
|
||||
REGISTER_ENTITY(WeaponBase);
|
||||
|
||||
WeaponBase::WeaponBase()
|
||||
|
||||
@@ -93,6 +93,9 @@ public:
|
||||
void UpdateBodyDirty();
|
||||
void ForceUpdateBodyTranslation();
|
||||
|
||||
void SetBodyFilterGroup(PhysicsFilter group);
|
||||
void SetBodyFilterMask(int mask);
|
||||
|
||||
// Game entity lua bindings
|
||||
|
||||
void InitFromTable(LuaPlus::LuaObject& _object);
|
||||
@@ -127,6 +130,10 @@ public:
|
||||
int Lua_CreateBoxBody(LuaPlus::LuaState* state);
|
||||
int Lua_CreateSphereBody(LuaPlus::LuaState* state);
|
||||
int Lua_ForceBodyTransformUpdate(LuaPlus::LuaState* state);
|
||||
int Lua_SetBodyFilterGroup(LuaPlus::LuaState* state);
|
||||
int Lua_SetBodyFilterMask(LuaPlus::LuaState* state);
|
||||
int Lua_GetBodyFilterGroup(LuaPlus::LuaState* state);
|
||||
int Lua_GetBodyFilterMask(LuaPlus::LuaState* state);
|
||||
|
||||
int Lua_FindAnimation(LuaPlus::LuaState* state);
|
||||
int Lua_PlayAnimation(LuaPlus::LuaState* state);
|
||||
|
||||
Reference in New Issue
Block a user