GL - added RigidBody data on client for debuging output
This commit is contained in:
parent
fc19938f1b
commit
bfa748047f
|
@ -31,32 +31,27 @@ void C_Object::updateWorld()
|
|||
{
|
||||
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position);
|
||||
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation);
|
||||
//Oyster::Math3D::Float4x4 scale = Oyster::Math3D::;
|
||||
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::Matrix::identity;
|
||||
scale.v[0].x = this->scale[0];
|
||||
scale.v[1].y = this->scale[1];
|
||||
scale.v[2].z = this->scale[2];
|
||||
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale);
|
||||
world = translation * rot * scale;
|
||||
|
||||
model->WorldMatrix = world;
|
||||
}
|
||||
void C_Object::setWorld(Oyster::Math::Float4x4 world)
|
||||
{
|
||||
model->WorldMatrix = world;
|
||||
}
|
||||
Oyster::Math::Float4x4 C_Object::getWorld() const
|
||||
{
|
||||
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->position);
|
||||
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->rotation);
|
||||
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->scale);
|
||||
Oyster::Math3D::Float4x4 world = translation * rot * scale;
|
||||
|
||||
return world;
|
||||
}
|
||||
void C_Object::setPos(Oyster::Math::Float3 newPos)
|
||||
{
|
||||
this->position = newPos;
|
||||
updateWorld();
|
||||
}
|
||||
void C_Object::addPos(Oyster::Math::Float3 deltaPos)
|
||||
{
|
||||
this->position += deltaPos;
|
||||
updateWorld();
|
||||
}
|
||||
Oyster::Math::Float3 C_Object::getPos() const
|
||||
{
|
||||
|
@ -65,12 +60,6 @@ Oyster::Math::Float3 C_Object::getPos() const
|
|||
void C_Object::setRot(Oyster::Math::Quaternion newRot)
|
||||
{
|
||||
this->rotation = newRot;
|
||||
updateWorld();
|
||||
}
|
||||
void C_Object::addRot(Oyster::Math::Quaternion deltaRot)
|
||||
{
|
||||
this->rotation += deltaRot;
|
||||
updateWorld();
|
||||
}
|
||||
Oyster::Math::Quaternion C_Object::getRotation() const
|
||||
{
|
||||
|
@ -79,12 +68,10 @@ Oyster::Math::Quaternion C_Object::getRotation() const
|
|||
void C_Object::setScale(Oyster::Math::Float3 newScale)
|
||||
{
|
||||
this->scale = newScale;
|
||||
updateWorld();
|
||||
}
|
||||
void C_Object::addScale(Oyster::Math::Float3 deltaScale)
|
||||
{
|
||||
this->scale += deltaScale;
|
||||
updateWorld();
|
||||
}
|
||||
Oyster::Math::Float3 C_Object::getScale() const
|
||||
{
|
||||
|
@ -105,4 +92,54 @@ void C_Object::Release()
|
|||
Oyster::Graphics::API::DeleteModel(model);
|
||||
this->model = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////
|
||||
// RB DEBUG
|
||||
////////////////////////////////////////////////
|
||||
bool C_Object::InitRB(RBInitData RBInit)
|
||||
{
|
||||
RBposition = RBInit.position;
|
||||
RBrotation = RBInit.rotation;
|
||||
RBscale = RBInit.scale;
|
||||
return true;
|
||||
}
|
||||
Oyster::Math::Float4x4 C_Object::getRBWorld() const
|
||||
{
|
||||
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(this->RBposition);
|
||||
Oyster::Math3D::Float4x4 rot = Oyster::Math3D::RotationMatrix(this->RBrotation);
|
||||
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(this->RBscale);
|
||||
Oyster::Math3D::Float4x4 world = translation * rot * scale;
|
||||
|
||||
return world;
|
||||
}
|
||||
void C_Object::setRBPos(Oyster::Math::Float3 newPos)
|
||||
{
|
||||
this->RBposition = newPos;
|
||||
}
|
||||
Oyster::Math::Float3 C_Object::getRBPos() const
|
||||
{
|
||||
return this->RBposition;
|
||||
}
|
||||
void C_Object::setRBRot(Oyster::Math::Quaternion newRot)
|
||||
{
|
||||
this->RBrotation = newRot;
|
||||
}
|
||||
Oyster::Math::Quaternion C_Object::getRBRotation() const
|
||||
{
|
||||
return this->RBrotation;
|
||||
}
|
||||
void C_Object::setRBScale(Oyster::Math::Float3 newScale)
|
||||
{
|
||||
this->RBscale = newScale;
|
||||
}
|
||||
Oyster::Math::Float3 C_Object::getRBScale() const
|
||||
{
|
||||
return this->RBscale;
|
||||
}
|
||||
RB_Type C_Object::getBRtype()const
|
||||
{
|
||||
return this->type;
|
||||
}
|
|
@ -5,7 +5,11 @@ namespace DanBias
|
|||
{
|
||||
namespace Client
|
||||
{
|
||||
|
||||
enum RB_Type
|
||||
{
|
||||
RB_Type_Cube,
|
||||
RB_Type_Sphere
|
||||
};
|
||||
struct ModelInitData
|
||||
{
|
||||
int id;
|
||||
|
@ -15,6 +19,13 @@ namespace DanBias
|
|||
Oyster::Math::Float3 scale;
|
||||
bool visible;
|
||||
};
|
||||
struct RBInitData
|
||||
{
|
||||
Oyster::Math::Float3 position;
|
||||
Oyster::Math::Quaternion rotation;
|
||||
Oyster::Math::Float3 scale;
|
||||
RB_Type type;
|
||||
};
|
||||
|
||||
class C_Object
|
||||
{
|
||||
|
@ -23,28 +34,43 @@ namespace DanBias
|
|||
Oyster::Math::Float3 position;
|
||||
Oyster::Math::Quaternion rotation;
|
||||
Oyster::Math::Float3 scale;
|
||||
|
||||
// RB DEBUG
|
||||
Oyster::Math::Float3 RBposition;
|
||||
Oyster::Math::Quaternion RBrotation;
|
||||
Oyster::Math::Float3 RBscale;
|
||||
RB_Type type;
|
||||
|
||||
int id;
|
||||
void updateWorld();
|
||||
|
||||
protected:
|
||||
Oyster::Graphics::Model::Model *model;
|
||||
public:
|
||||
C_Object();
|
||||
virtual ~C_Object();
|
||||
virtual bool Init(ModelInitData modelInit);
|
||||
|
||||
void setWorld(Oyster::Math::Float4x4 world);
|
||||
void updateWorld();
|
||||
//void setWorld(Oyster::Math::Float4x4 world);
|
||||
Oyster::Math::Float4x4 getWorld() const;
|
||||
void setPos(Oyster::Math::Float3 newPos);
|
||||
Oyster::Math::Float3 getPos() const;
|
||||
void addPos(Oyster::Math::Float3 deltaPos);
|
||||
void setRot(Oyster::Math::Quaternion newRot);
|
||||
Oyster::Math::Quaternion getRotation() const;
|
||||
void addRot(Oyster::Math::Quaternion deltaRot);
|
||||
void setScale(Oyster::Math::Float3 newScale);
|
||||
void addScale(Oyster::Math::Float3 deltaScale);
|
||||
Oyster::Math::Float3 getScale() const;
|
||||
|
||||
// RB DEBUG
|
||||
bool InitRB(RBInitData modelInit);
|
||||
Oyster::Math::Float4x4 getRBWorld() const;
|
||||
void setRBPos(Oyster::Math::Float3 newPos);
|
||||
Oyster::Math::Float3 getRBPos() const;
|
||||
void setRBRot(Oyster::Math::Quaternion newRot);
|
||||
Oyster::Math::Quaternion getRBRotation() const;
|
||||
void setRBScale(Oyster::Math::Float3 newScale);
|
||||
Oyster::Math::Float3 getRBScale() const;
|
||||
RB_Type getBRtype()const;
|
||||
virtual void Render();
|
||||
virtual void Release();
|
||||
virtual int GetId() const;
|
||||
|
|
|
@ -108,10 +108,19 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa
|
|||
StringToWstring( modelName, modelData.modelPath );
|
||||
modelData.id = id;
|
||||
|
||||
// RB DEBUG
|
||||
RBInitData RBData;
|
||||
RBData.position = position;
|
||||
RBData.rotation = ArrayToQuaternion( rotation );
|
||||
RBData.scale = Float3( 3 );
|
||||
|
||||
if( isMyPlayer )
|
||||
{
|
||||
if( this->privData->player.Init(modelData) )
|
||||
{
|
||||
// RB DEBUG
|
||||
this->privData->player.InitRB( RBData );
|
||||
|
||||
this->privData->myId = id;
|
||||
this->privData->camera.SetPosition( this->privData->player.getPos() );
|
||||
Float3 offset = Float3( 0.0f );
|
||||
|
@ -125,6 +134,9 @@ void GameState::InitiatePlayer( int id, const std::string &modelName, const floa
|
|||
C_DynamicObj *p = new C_DynamicObj();
|
||||
if( p->Init(modelData) )
|
||||
{
|
||||
// RB DEBUG
|
||||
this->privData->player.InitRB( RBData );
|
||||
|
||||
(*this->privData->dynamicObjects)[id] = p;
|
||||
}
|
||||
}
|
||||
|
@ -157,6 +169,41 @@ bool GameState::Render()
|
|||
dynamicObject->second->Render();
|
||||
}
|
||||
|
||||
// RB DEBUG render wire frame
|
||||
Oyster::Graphics::API::StartRenderWireFrame();
|
||||
|
||||
|
||||
Oyster::Math3D::Float4x4 translation = Oyster::Math3D::TranslationMatrix(Float3( 0,132, 20));
|
||||
Oyster::Math3D::Float4x4 scale = Oyster::Math3D::ScalingMatrix(Float3( 2, 2, 2));
|
||||
Oyster::Math3D::Float4x4 world = translation * scale;
|
||||
Oyster::Graphics::API::RenderDebugCube( world );
|
||||
Oyster::Graphics::API::RenderDebugCube(this->privData->player.getRBWorld());
|
||||
|
||||
|
||||
for( ; staticObject != this->privData->staticObjects->end(); ++staticObject )
|
||||
{
|
||||
if( staticObject->second->getBRtype() == RB_Type_Cube)
|
||||
{
|
||||
Oyster::Graphics::API::RenderDebugCube( staticObject->second->getRBWorld());
|
||||
}
|
||||
if( staticObject->second->getBRtype() == RB_Type_Sphere)
|
||||
{
|
||||
Oyster::Graphics::API::RenderDebugSphere( staticObject->second->getRBWorld());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for( ; dynamicObject != this->privData->dynamicObjects->end(); ++dynamicObject )
|
||||
{
|
||||
if( dynamicObject->second->getBRtype() == RB_Type_Cube)
|
||||
{
|
||||
Oyster::Graphics::API::RenderDebugCube( dynamicObject->second->getRBWorld());
|
||||
}
|
||||
if( dynamicObject->second->getBRtype() == RB_Type_Sphere)
|
||||
{
|
||||
Oyster::Graphics::API::RenderDebugSphere( dynamicObject->second->getRBWorld());
|
||||
}
|
||||
}
|
||||
Oyster::Graphics::API::EndFrame();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -134,10 +134,29 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
|
|||
desc.rotation = ArrayToQuaternion( oh->rotation );
|
||||
desc.scale = oh->scale;
|
||||
desc.visible = true;
|
||||
|
||||
|
||||
C_StaticObj *staticObject = new C_StaticObj();
|
||||
if( staticObject->Init( desc ) )
|
||||
{
|
||||
|
||||
// RB DEBUG
|
||||
RBInitData RBData;
|
||||
if(oh->boundingVolume.geoType == CollisionGeometryType_Box)
|
||||
{
|
||||
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position;
|
||||
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
|
||||
RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size;
|
||||
staticObject->InitRB( RBData );
|
||||
}
|
||||
|
||||
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere)
|
||||
{
|
||||
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position;
|
||||
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
|
||||
RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius;
|
||||
staticObject->InitRB( RBData );
|
||||
}
|
||||
|
||||
(*this->privData->staticObjects)[objectID] = staticObject;
|
||||
}
|
||||
else
|
||||
|
@ -161,6 +180,24 @@ void NetLoadState::LoadGame( const ::std::string &fileName )
|
|||
C_DynamicObj *dynamicObject = new C_DynamicObj();
|
||||
if( dynamicObject->Init( desc ) )
|
||||
{
|
||||
// RB DEBUG
|
||||
RBInitData RBData;
|
||||
if(oh->boundingVolume.geoType == CollisionGeometryType_Box)
|
||||
{
|
||||
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.box.position;
|
||||
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
|
||||
RBData.scale = (Float3)oh->scale * (Float3)oh->boundingVolume.box.size;
|
||||
dynamicObject->InitRB( RBData );
|
||||
}
|
||||
|
||||
if(oh->boundingVolume.geoType == CollisionGeometryType_Sphere)
|
||||
{
|
||||
RBData.position = (Float3)oh->position + (Float3)oh->boundingVolume.sphere.position;
|
||||
RBData.rotation = ArrayToQuaternion( oh->rotation ); // Only model rotation
|
||||
RBData.scale = (Float3)oh->scale * oh->boundingVolume.sphere.radius;
|
||||
dynamicObject->InitRB( RBData );
|
||||
}
|
||||
|
||||
(*this->privData->dynamicObjects)[objectID] = dynamicObject;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue