GL - handle if the model dose not exist
This commit is contained in:
parent
68dfd2e324
commit
bfb9864be9
|
@ -1,14 +1,31 @@
|
|||
#include "C_Object.h"
|
||||
using namespace DanBias::Client;
|
||||
void C_Object::Init(ModelInitData modelInit)
|
||||
C_Object::C_Object()
|
||||
{
|
||||
world = Oyster::Math::Float4x4::identity;
|
||||
position = Oyster::Math::Float3::null;
|
||||
rotation = Oyster::Math::Quaternion::identity;
|
||||
scale = Oyster::Math::Float3::null;
|
||||
|
||||
id = 0;
|
||||
model = NULL;
|
||||
}
|
||||
C_Object::~C_Object()
|
||||
{
|
||||
|
||||
}
|
||||
bool C_Object::Init(ModelInitData modelInit)
|
||||
{
|
||||
position = modelInit.position;
|
||||
rotation = modelInit.rotation;
|
||||
scale = modelInit.scale;
|
||||
id = modelInit.id;
|
||||
model = Oyster::Graphics::API::CreateModel(modelInit.modelPath);
|
||||
if(model == NULL)
|
||||
return false;
|
||||
model->Visible = modelInit.visible;
|
||||
updateWorld();
|
||||
return true;
|
||||
}
|
||||
void C_Object::updateWorld()
|
||||
{
|
||||
|
|
|
@ -29,8 +29,9 @@ private:
|
|||
protected:
|
||||
Oyster::Graphics::Model::Model *model;
|
||||
public:
|
||||
|
||||
virtual void Init(ModelInitData modelInit);
|
||||
C_Object();
|
||||
virtual ~C_Object();
|
||||
virtual bool Init(ModelInitData modelInit);
|
||||
|
||||
void setWorld(Oyster::Math::Float4x4 world);
|
||||
Oyster::Math::Float4x4 getWorld() const;
|
||||
|
|
|
@ -11,7 +11,7 @@ C_DynamicObj::~C_DynamicObj(void)
|
|||
{
|
||||
|
||||
}
|
||||
void C_DynamicObj::Init(ModelInitData modelInit)
|
||||
bool C_DynamicObj::Init(ModelInitData modelInit)
|
||||
{
|
||||
C_Object::Init(modelInit);
|
||||
return C_Object::Init(modelInit);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ private:
|
|||
public:
|
||||
C_DynamicObj(void);
|
||||
virtual ~C_DynamicObj(void);
|
||||
void Init(ModelInitData modelInit);
|
||||
bool Init(ModelInitData modelInit);
|
||||
|
||||
};};};
|
||||
#endif
|
|
@ -13,9 +13,12 @@ C_Player::~C_Player(void)
|
|||
|
||||
}
|
||||
|
||||
void C_Player::Init(ModelInitData modelInit)
|
||||
bool C_Player::Init(ModelInitData modelInit)
|
||||
{
|
||||
C_Object::Init(modelInit);
|
||||
Oyster::Graphics::API::PlayAnimation(model, L"movement");
|
||||
//Oyster::Graphics::API::Update(0.002f);
|
||||
return C_Object::Init(modelInit);
|
||||
}
|
||||
void C_Player::playAnimation(std::wstring animation, bool loop)
|
||||
{
|
||||
if(model)
|
||||
Oyster::Graphics::API::PlayAnimation(model, L"movement", loop);
|
||||
}
|
|
@ -11,7 +11,8 @@ private:
|
|||
public:
|
||||
C_Player(void);
|
||||
virtual ~C_Player(void);
|
||||
void Init(ModelInitData modelInit);
|
||||
bool Init(ModelInitData modelInit);
|
||||
void playAnimation(std::wstring animation, bool loop);
|
||||
|
||||
};};};
|
||||
#endif
|
||||
|
|
|
@ -10,7 +10,7 @@ C_StaticObj::~C_StaticObj(void)
|
|||
{
|
||||
|
||||
}
|
||||
void C_StaticObj::Init(ModelInitData modelInit)
|
||||
bool C_StaticObj::Init(ModelInitData modelInit)
|
||||
{
|
||||
C_Object::Init(modelInit);
|
||||
return C_Object::Init(modelInit);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ private:
|
|||
public:
|
||||
C_StaticObj(void);
|
||||
virtual ~C_StaticObj(void);
|
||||
void Init(ModelInitData modelInit);
|
||||
bool Init(ModelInitData modelInit);
|
||||
|
||||
};};};
|
||||
#endif
|
|
@ -10,7 +10,7 @@ C_UIobject::C_UIobject(void)
|
|||
C_UIobject::~C_UIobject(void)
|
||||
{
|
||||
}
|
||||
void C_UIobject::Init(ModelInitData modelInit)
|
||||
bool C_UIobject::Init(ModelInitData modelInit)
|
||||
{
|
||||
C_Object::Init(modelInit);
|
||||
return C_Object::Init(modelInit);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace DanBias
|
|||
public:
|
||||
C_UIobject(void);
|
||||
virtual ~C_UIobject(void);
|
||||
void Init(ModelInitData modelInit);
|
||||
bool Init(ModelInitData modelInit);
|
||||
void setPos(Oyster::Math::Float4x4 world);
|
||||
};};};
|
||||
#endif
|
|
@ -195,7 +195,12 @@ bool GameState::LoadModels(std::string mapFile)
|
|||
modelData.id = modelId++;
|
||||
|
||||
this->staticObjects.Push(new C_StaticObj());
|
||||
this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
if(!this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData))
|
||||
{
|
||||
// the model don't exist
|
||||
this->staticObjects.Remove(this->staticObjects.Size() -1 );
|
||||
modelId--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GameLogic::ObjectType::ObjectType_Dynamic:
|
||||
|
@ -209,7 +214,12 @@ bool GameState::LoadModels(std::string mapFile)
|
|||
modelData.id = modelId++;
|
||||
|
||||
this->dynamicObjects.Push(new C_DynamicObj());
|
||||
this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData);
|
||||
if(!this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData))
|
||||
{
|
||||
// the model don't exist
|
||||
this->dynamicObjects.Remove(this->dynamicObjects.Size() -1 );
|
||||
modelId--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GameLogic::ObjectType::ObjectType_Light:
|
||||
|
@ -241,40 +251,44 @@ bool GameState::LoadModels(std::string mapFile)
|
|||
modelData.rotation = first;
|
||||
modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
modelData.modelPath = L"char_still_sizeref.dan";
|
||||
modelData.id = myId;
|
||||
modelData.id = modelId;
|
||||
|
||||
this->staticObjects.Push(new C_StaticObj());
|
||||
this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
if(!this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData))
|
||||
{
|
||||
// the model don't exist
|
||||
this->staticObjects.Remove(this->staticObjects.Size() -1 );
|
||||
modelId--;
|
||||
}
|
||||
//modelData.visible = true;
|
||||
//modelData.position = Oyster::Math::Float3(22, 127,0);
|
||||
//modelData.rotation = second;
|
||||
//modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
//modelData.modelPath = L"char_still_sizeref.dan";
|
||||
//modelData.id = myId;
|
||||
|
||||
modelData.visible = true;
|
||||
modelData.position = Oyster::Math::Float3(22, 127,0);
|
||||
modelData.rotation = second;
|
||||
modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
modelData.modelPath = L"char_still_sizeref.dan";
|
||||
modelData.id = myId;
|
||||
//this->staticObjects.Push(new C_StaticObj());
|
||||
//this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
|
||||
this->staticObjects.Push(new C_StaticObj());
|
||||
this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
//modelData.visible = true;
|
||||
//modelData.position = Oyster::Math::Float3(24, 127,0);
|
||||
//modelData.rotation = result;
|
||||
//modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
//modelData.modelPath = L"char_still_sizeref.dan";
|
||||
//modelData.id = myId;
|
||||
|
||||
modelData.visible = true;
|
||||
modelData.position = Oyster::Math::Float3(24, 127,0);
|
||||
modelData.rotation = result;
|
||||
modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
modelData.modelPath = L"char_still_sizeref.dan";
|
||||
modelData.id = myId;
|
||||
//this->staticObjects.Push(new C_StaticObj());
|
||||
//this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
|
||||
this->staticObjects.Push(new C_StaticObj());
|
||||
this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
//modelData.visible = true;
|
||||
//modelData.position = Oyster::Math::Float3(26, 127,0);
|
||||
//modelData.rotation = total;
|
||||
//modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
//modelData.modelPath = L"char_still_sizeref.dan";
|
||||
//modelData.id = myId;
|
||||
|
||||
modelData.visible = true;
|
||||
modelData.position = Oyster::Math::Float3(26, 127,0);
|
||||
modelData.rotation = total;
|
||||
modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
modelData.modelPath = L"char_still_sizeref.dan";
|
||||
modelData.id = myId;
|
||||
|
||||
this->staticObjects.Push(new C_StaticObj());
|
||||
this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
//this->staticObjects.Push(new C_StaticObj());
|
||||
//this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData);
|
||||
|
||||
return true;
|
||||
|
||||
|
@ -302,13 +316,16 @@ void GameState::InitiatePlayer(int id, std::wstring modelName, Oyster::Math::Flo
|
|||
modelData.position = Oyster::Math::Float3(world[12], world[13], world[14]);
|
||||
modelData.rotation = Oyster::Math::Quaternion(Oyster::Math::Float3(0,0,0), 1);
|
||||
modelData.scale = Oyster::Math::Float3(1,1,1);
|
||||
modelData.modelPath = modelName;
|
||||
modelData.modelPath = L"crate_generic.dan"; // modelName;
|
||||
modelData.id = myId;
|
||||
|
||||
obj = new C_Player();
|
||||
this->dynamicObjects.Push(obj);
|
||||
this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData);
|
||||
|
||||
if(!this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData))
|
||||
{
|
||||
// the model don't exist
|
||||
this->dynamicObjects.Remove(this->dynamicObjects.Size() -1 );
|
||||
}
|
||||
|
||||
Oyster::Math::Float3 right = Oyster::Math::Float3(world[0], world[1], world[2]);
|
||||
Oyster::Math::Float3 up = Oyster::Math::Float3(world[4], world[5], world[6]);
|
||||
|
|
|
@ -170,7 +170,7 @@ namespace Utility
|
|||
|
||||
template <typename T> void DynamicArray<T>::Remove(unsigned int index)
|
||||
{
|
||||
assert(index > (unsigned int) this->size);
|
||||
assert(index < (unsigned int) this->size);
|
||||
|
||||
T* temp = new T[this->capacity - 1];
|
||||
|
||||
|
|
Loading…
Reference in New Issue