GL - initiate lvl

This commit is contained in:
lindaandersson 2014-02-14 10:32:41 +01:00
commit 50d07a102d
34 changed files with 323 additions and 225 deletions

View File

@ -211,6 +211,10 @@ namespace DanBias
HRESULT DanBiasGame::CleanUp() HRESULT DanBiasGame::CleanUp()
{ {
Oyster::Graphics::API::Clean();
EventHandler::Instance().Clean();
GameServerAPI::ServerStop();
m_data->recieverObj->gameClientState->Release(); m_data->recieverObj->gameClientState->Release();
delete m_data->recieverObj->gameClientState; delete m_data->recieverObj->gameClientState;
m_data->recieverObj->Disconnect(); m_data->recieverObj->Disconnect();
@ -218,11 +222,7 @@ namespace DanBias
delete m_data->inputObj; delete m_data->inputObj;
delete m_data; delete m_data;
EventHandler::Instance().Clean();
Oyster::Graphics::API::Clean();
GameServerAPI::ServerStop();
return S_OK; return S_OK;
} }

View File

@ -21,16 +21,20 @@ namespace DanBias
ButtonEllipse() ButtonEllipse()
: EventButtonGUI(), radius(0) : EventButtonGUI(), radius(0)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize)
{} {}
ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonEllipse(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize)
{} {}
virtual ~ButtonEllipse() virtual ~ButtonEllipse()

View File

@ -21,16 +21,20 @@ namespace DanBias
ButtonRectangle() ButtonRectangle()
: EventButtonGUI(), width(0), height(0) : EventButtonGUI(), width(0), height(0)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, owner, pos, size, resize)
{} {}
ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) ButtonRectangle(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, void* userData, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize) : EventButtonGUI(textureName, buttonText, textColor, func, owner, userData, pos, size, resize)
{} {}
virtual ~ButtonRectangle() virtual ~ButtonRectangle()

View File

@ -35,19 +35,22 @@ namespace DanBias
EventButtonGUI() EventButtonGUI()
: EventButton(), pos(0, 0), size(0, 0), texture(NULL), buttonText(""), textColor(0, 0, 0) : EventButton(), pos(0, 0), size(0, 0), texture(NULL), buttonText(""), textColor(0, 0, 0)
{} {}
EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButton(owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) : EventButton(owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) : EventButton(func), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);
if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize); if(resize != ResizeAspectRatio_None) ResizeWithAspectRatio(resize);
} }
EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos, Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height) EventButtonGUI(std::wstring textureName, std::wstring buttonText, Oyster::Math::Float3 textColor, EventFunc func, Owner owner, Oyster::Math::Float3 pos,
Oyster::Math::Float2 size, ResizeAspectRatio resize = ResizeAspectRatio_Height)
: EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor) : EventButton(func, owner), pos(pos), size(size), texture(NULL), buttonText(buttonText), textColor(textColor)
{ {
CreateTexture(textureName); CreateTexture(textureName);

View File

@ -65,7 +65,6 @@ GameState::gameStateState GameState::LoadGame()
LoadModels("../Content/Worlds/ccc.bias"); LoadModels("../Content/Worlds/ccc.bias");
// hardcoded objects // hardcoded objects
//LoadModels();
Float3 startPos = Float3(0,0,20.0f); Float3 startPos = Float3(0,0,20.0f);
InitCamera(startPos); InitCamera(startPos);
return gameStateState_playing; return gameStateState_playing;

View File

@ -14,10 +14,10 @@ AttatchmentSocket::AttatchmentSocket(void)
AttatchmentSocket::~AttatchmentSocket(void) AttatchmentSocket::~AttatchmentSocket(void)
{ {
//if(this->attatchment) if(this->attatchment)
//delete this->attatchment; delete this->attatchment;
//this->attatchment = 0; this->attatchment = 0;
} }
IAttatchment* AttatchmentSocket::GetAttatchment() IAttatchment* AttatchmentSocket::GetAttatchment()

View File

@ -8,12 +8,15 @@
#include "CollisionManager.h" #include "CollisionManager.h"
#include "JumpPad.h" #include "JumpPad.h"
#include "Portal.h" #include "Portal.h"
#include "CrystalFormation.h"
#include "ExplosiveCrate.h"
using namespace Oyster; using namespace Oyster;
using namespace GameLogic; using namespace GameLogic;
void PlayerVObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss); void PlayerVObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss);
void PlayerVLethalObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss, Oyster::Math::Float ExtraDamage);
void SendObjectFlying(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 force); void SendObjectFlying(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 force);
void Teleport(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 target); void Teleport(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 target);
@ -26,18 +29,27 @@ using namespace GameLogic;
switch (realObj->GetObjectType()) switch (realObj->GetObjectType())
{ {
case ObjectSpecialType_StandarsBox: case ObjectSpecialType::ObjectSpecialType_Generic:
PlayerVObject(*player,*realObj, kineticEnergyLoss); PlayerVObject(*player,*realObj, kineticEnergyLoss);
//return Physics::ICustomBody::SubscriptMessage_none; //return Physics::ICustomBody::SubscriptMessage_none;
break; break;
case ObjectSpecialType_Player:
case ObjectSpecialType::ObjectSpecialType_StandardBox:
PlayerVObject(*player,*realObj, kineticEnergyLoss);
//return Physics::ICustomBody::SubscriptMessage_none; //return Physics::ICustomBody::SubscriptMessage_none;
break; break;
case ObjectSpecialType_World: case ObjectSpecialType::ObjectSpecialType_Player:
//return Physics::ICustomBody::SubscriptMessage_none;
break;
case ObjectSpecialType::ObjectSpecialType_World:
PlayerVObject(*player,*realObj, kineticEnergyLoss); PlayerVObject(*player,*realObj, kineticEnergyLoss);
//player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING; //player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING;
break; break;
case ObjectSpecialType::ObjectSpecialType_CrystalFormation:
PlayerVLethalObject(*player,*realObj, kineticEnergyLoss,((CrystalFormation*)realObj)->getShreddingDamage());
//player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING;
break;
} }
//return Physics::ICustomBody::SubscriptMessage_none; //return Physics::ICustomBody::SubscriptMessage_none;
@ -50,14 +62,13 @@ using namespace GameLogic;
switch (realObj->GetObjectType()) switch (realObj->GetObjectType())
{ {
case ObjectSpecialType_Generic: case ObjectSpecialType::ObjectSpecialType_Generic:
break; break;
case ObjectSpecialType_StandarsBox: case ObjectSpecialType::ObjectSpecialType_StandardBox:
break;
case ObjectSpecialType_Player:
SendObjectFlying(*obj, jumpPad->pushForce); SendObjectFlying(*obj, jumpPad->pushForce);
break; break;
case ObjectSpecialType_World: case ObjectSpecialType::ObjectSpecialType_Player:
SendObjectFlying(*obj, jumpPad->pushForce);
break; break;
} }
} }
@ -81,6 +92,43 @@ using namespace GameLogic;
obj.SetPosition(target); obj.SetPosition(target);
} }
void ExplosiveCrate::ExplosiveCrateCollision(Oyster::Physics::ICustomBody *rigidBodyCrate, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss)
{
int forceThreashHold = 200000; //how much force for the box to explode of the impact
if(kineticEnergyLoss > forceThreashHold)
{
ExplosiveCrate* crate = ((ExplosiveCrate*)rigidBodyCrate->GetCustomTag());
Oyster::Math::Float3 pos = rigidBodyCrate->GetState().centerPos;
Oyster::Collision3D::Sphere *hitSphere = new Oyster::Collision3D::Sphere(pos,crate->ExplosionRadius);
Oyster::Physics::API::Instance().ApplyEffect(hitSphere,crate,Explode);
delete hitSphere;
}
}
void ExplosiveCrate::Explode(Oyster::Physics::ICustomBody *obj, void* args)
{
Object *realObj = (Object*)obj->GetCustomTag();
ExplosiveCrate* ExplosionSource = ((ExplosiveCrate*)args);
if(realObj->GetObjectType() == ObjectSpecialType::ObjectSpecialType_Player)
{
Player *hitPlayer = (Player*)realObj;
hitPlayer->DamageLife(ExplosionSource->shreddingDamage);
//do shredding damage
}
realObj->GetRigidBody()->ApplyImpulse(ExplosionSource->pushForce);
}
void PlayerVObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss) void PlayerVObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss)
{ {
@ -98,6 +146,20 @@ using namespace GameLogic;
} }
void PlayerVLethalObject(Player &player, Object &obj, Oyster::Math::Float kineticEnergyLoss, Oyster::Math::Float ExtraDamage)
{
int damageDone = 0;
int forceThreashHold = 200000;
if(kineticEnergyLoss > forceThreashHold) //should only take damage if the force is high enough
{
damageDone = (int)(kineticEnergyLoss * 0.10f);
damageDone += ExtraDamage;
//player.DamageLife(damageDone);
}
}
Oyster::Physics::ICustomBody::SubscriptMessage Object::DefaultCollisionAfter(Oyster::Physics::ICustomBody *rigidBodyLevel, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss) Oyster::Physics::ICustomBody::SubscriptMessage Object::DefaultCollisionAfter(Oyster::Physics::ICustomBody *rigidBodyLevel, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss)
{ {
return Physics::ICustomBody::SubscriptMessage_none; return Physics::ICustomBody::SubscriptMessage_none;
@ -123,7 +185,7 @@ using namespace GameLogic;
Object *realObj = (Object*)obj->GetCustomTag(); Object *realObj = (Object*)obj->GetCustomTag();
if(realObj->GetObjectType() == ObjectSpecialType_Player || realObj->GetObjectType() == ObjectSpecialType_World) if(realObj->GetObjectType() == ObjectSpecialType::ObjectSpecialType_Player || realObj->GetObjectType() == ObjectSpecialType::ObjectSpecialType_World)
return; return;
obj->ApplyImpulse(((forcePushData*)(args))->pushForce); obj->ApplyImpulse(((forcePushData*)(args))->pushForce);
@ -146,9 +208,7 @@ using namespace GameLogic;
switch(realObj->GetObjectType()) switch(realObj->GetObjectType())
{ {
case ObjectSpecialType_StandarsBox: case ObjectSpecialType::ObjectSpecialType_StandardBox:
//move obj to limbo in physics to make sure it wont collide with anything
// Oyster::Physics::API::Instance().MoveToLimbo(obj);
weapon->heldObject = obj; //weapon now holds the object weapon->heldObject = obj; //weapon now holds the object
weapon->hasObject = true; weapon->hasObject = true;

View File

@ -8,8 +8,8 @@ CrystalFormation::CrystalFormation(void)
this->shreddingDamage = 0; this->shreddingDamage = 0;
} }
CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), OBJECT_TYPE type, Oyster::Math::Float shreddingDamage) CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, int objectID,Oyster::Math::Float shreddingDamage)
:StaticObject(rigidBody, collisionFuncAfter, type) :StaticObject(rigidBody, CrystalFormation::DefaultCollisionAfter, ObjectSpecialType::ObjectSpecialType_CrystalFormation, objectID)
{ {
this->shreddingDamage = shreddingDamage; this->shreddingDamage = shreddingDamage;
} }
@ -18,3 +18,8 @@ CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, void
CrystalFormation::~CrystalFormation(void) CrystalFormation::~CrystalFormation(void)
{ {
} }
Oyster::Math::Float CrystalFormation::getShreddingDamage()
{
return this->shreddingDamage;
}

View File

@ -9,11 +9,12 @@ namespace GameLogic
CrystalFormation(void); CrystalFormation(void);
CrystalFormation(Oyster::Physics::ICustomBody *rigidBody CrystalFormation(Oyster::Physics::ICustomBody *rigidBody
,void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) ,int objectID,Oyster::Math::Float shreddingDamage);
,OBJECT_TYPE type, Oyster::Math::Float shreddingDamage);
~CrystalFormation(void); ~CrystalFormation(void);
Oyster::Math::Float getShreddingDamage();
private: private:
Oyster::Math::Float shreddingDamage; Oyster::Math::Float shreddingDamage;
}; };

View File

@ -9,29 +9,14 @@ DynamicObject::DynamicObject()
{ {
} }
DynamicObject::DynamicObject(ObjectSpecialType type)
:Object(type) DynamicObject::DynamicObject(Oyster::Physics::ICustomBody *rigidBody , void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
:Object(rigidBody, EventOnCollision, type, objectID)
{ {
} }
DynamicObject::DynamicObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type) DynamicObject::DynamicObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
:Object(rigidBody,type) :Object(rigidBody, EventOnCollision, type, objectID)
{
}
DynamicObject::DynamicObject( void* collisionFuncAfter, ObjectSpecialType type)
:Object(collisionFuncAfter,type)
{
}
DynamicObject::DynamicObject(Oyster::Physics::ICustomBody *rigidBody , void* collisionFuncAfter, ObjectSpecialType type)
:Object(rigidBody, collisionFuncAfter, type)
{
}
DynamicObject::DynamicObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type)
:Object(rigidBody, collisionFuncAfter, type)
{ {
} }

View File

@ -14,12 +14,8 @@ namespace GameLogic
public: public:
DynamicObject(); DynamicObject();
DynamicObject(Oyster::Physics::ICustomBody *rigidBody , void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
DynamicObject(ObjectSpecialType type); DynamicObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
DynamicObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type);
DynamicObject( void* collisionFuncAfter, ObjectSpecialType type);
DynamicObject(Oyster::Physics::ICustomBody *rigidBody , void* collisionFuncAfter, ObjectSpecialType type);
DynamicObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type);
~DynamicObject(void); ~DynamicObject(void);

View File

@ -0,0 +1,29 @@
#include "ExplosiveCrate.h"
using namespace GameLogic;
ExplosiveCrate::ExplosiveCrate(void)
:DynamicObject()
{
this->shreddingDamage = 0;
this->pushForce = 0;
this->ExplosionRadius = 0;
}
ExplosiveCrate::ExplosiveCrate(Oyster::Physics::ICustomBody *rigidBody,ObjectSpecialType type, int objectID,Oyster::Math::Float shreddingDamage, Oyster::Math::Float3 pushForce, Oyster::Math::Float ExplosionRadius)
:DynamicObject(rigidBody,ExplosiveCrate::ExplosiveCrateCollision, type, objectID)
{
this->shreddingDamage = shreddingDamage;
this->pushForce = pushForce;
this->ExplosionRadius = ExplosionRadius;
}
ExplosiveCrate::~ExplosiveCrate(void)
{
}

View File

@ -0,0 +1,24 @@
#ifndef EXPLOSIVECRATE_H
#define EXPLOSIVECRATE_H
#include "DynamicObject.h"
namespace GameLogic
{
class ExplosiveCrate : public DynamicObject
{
public:
ExplosiveCrate(void);
ExplosiveCrate(Oyster::Physics::ICustomBody *rigidBody,ObjectSpecialType type,int objectID,Oyster::Math::Float shreddingDamage, Oyster::Math::Float3 pushForce, Oyster::Math::Float ExplosionRadius);
~ExplosiveCrate(void);
static void ExplosiveCrateCollision(Oyster::Physics::ICustomBody *rigidBodyCrate, Oyster::Physics::ICustomBody *obj, Oyster::Math::Float kineticEnergyLoss);
static void Explode(Oyster::Physics::ICustomBody *obj, void* args);
private:
Oyster::Math::Float shreddingDamage;
Oyster::Math::Float3 pushForce;
Oyster::Math::Float ExplosionRadius;
};
}
#endif

View File

@ -84,6 +84,7 @@ Game::LevelData* Game::CreateLevel()
//this->level->level->InitiateLevel(1000); //this->level->level->InitiateLevel(1000);
this->level->level->InitiateLevel("../Content/Worlds/ccc.bias"); this->level->level->InitiateLevel("../Content/Worlds/ccc.bias");
return this->level; return this->level;
} }

View File

@ -176,7 +176,9 @@
<ClInclude Include="AttatchmentMassDriver.h" /> <ClInclude Include="AttatchmentMassDriver.h" />
<ClInclude Include="AttatchmentSocket.h" /> <ClInclude Include="AttatchmentSocket.h" />
<ClInclude Include="CollisionManager.h" /> <ClInclude Include="CollisionManager.h" />
<ClInclude Include="CrystalFormation.h" />
<ClInclude Include="DynamicObject.h" /> <ClInclude Include="DynamicObject.h" />
<ClInclude Include="ExplosiveCrate.h" />
<ClInclude Include="Game.h" /> <ClInclude Include="Game.h" />
<ClInclude Include="GameAPI.h" /> <ClInclude Include="GameAPI.h" />
<ClInclude Include="GameLogicDef.h" /> <ClInclude Include="GameLogicDef.h" />
@ -202,7 +204,9 @@
<ClCompile Include="AttatchmentMassDriver.cpp" /> <ClCompile Include="AttatchmentMassDriver.cpp" />
<ClCompile Include="AttatchmentSocket.cpp" /> <ClCompile Include="AttatchmentSocket.cpp" />
<ClCompile Include="CollisionManager.cpp" /> <ClCompile Include="CollisionManager.cpp" />
<ClCompile Include="CrystalFormation.cpp" />
<ClCompile Include="DynamicObject.cpp" /> <ClCompile Include="DynamicObject.cpp" />
<ClCompile Include="ExplosiveCrate.cpp" />
<ClCompile Include="Game.cpp" /> <ClCompile Include="Game.cpp" />
<ClCompile Include="GameModeType.cpp" /> <ClCompile Include="GameModeType.cpp" />
<ClCompile Include="Game_LevelData.cpp" /> <ClCompile Include="Game_LevelData.cpp" />

View File

@ -43,6 +43,12 @@ namespace GameLogic
Oyster::Math::Float3 pushForce; Oyster::Math::Float3 pushForce;
}; };
struct ExplosionData
{
Oyster::Math::Float3 pushForce;
Oyster::Math::Float3 ShreddingDamage;
};
}; };

View File

@ -20,13 +20,14 @@ Game::PlayerData::PlayerData()
Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f ); Oyster::Physics::ICustomBody* rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f );
rigidBody->SetAngularFactor(0.0f); rigidBody->SetAngularFactor(0.0f);
//create player with this rigid body //create player with this rigid body
this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player); this->player = new Player(rigidBody, Player::PlayerCollision, ObjectSpecialType_Player,0,0);
this->player->GetRigidBody()->SetCustomTag(this); this->player->GetRigidBody()->SetCustomTag(this);
player->EndFrame(); player->EndFrame();
} }
Game::PlayerData::PlayerData(int playerID,int teamID) Game::PlayerData::PlayerData(int playerID,int teamID)
{ {
Oyster::Physics::ICustomBody* rigidBody;
this->player = new Player(); this->player = new Player();
} }

View File

@ -8,8 +8,8 @@ JumpPad::JumpPad(void)
{ {
} }
JumpPad::JumpPad(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, Oyster::Math::Float3 pushForce) JumpPad::JumpPad(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type,int objectID ,Oyster::Math::Float3 pushForce)
:StaticObject(rigidBody, collisionFuncAfter, type) :StaticObject(rigidBody, JumpPad::JumpPadActivated, type, objectID)
{ {
this->pushForce = pushForce; this->pushForce = pushForce;
} }

View File

@ -9,8 +9,7 @@ namespace GameLogic
JumpPad(void); JumpPad(void);
JumpPad(Oyster::Physics::ICustomBody *rigidBody JumpPad(Oyster::Physics::ICustomBody *rigidBody
,void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) ,ObjectSpecialType type, int objectID,Oyster::Math::Float3 pushForce);
,ObjectSpecialType type, Oyster::Math::Float3 pushForce);
~JumpPad(void); ~JumpPad(void);

View File

@ -1,7 +1,10 @@
#include "Level.h" #include "Level.h"
#include "CollisionManager.h" #include "CollisionManager.h"
#include "Game.h" #include "Game.h"
#include "JumpPad.h"
#include "CrystalFormation.h"
#include "ExplosiveCrate.h"
#include "Portal.h"
using namespace GameLogic; using namespace GameLogic;
using namespace Utility::DynamicMemory; using namespace Utility::DynamicMemory;
using namespace Oyster::Physics; using namespace Oyster::Physics;
@ -9,7 +12,7 @@ using namespace Oyster::Physics;
Level::Level(void) Level::Level(void)
{ {
objID = 100;
} }
Level::~Level(void) Level::~Level(void)
{ {
@ -19,17 +22,19 @@ Level::~Level(void)
Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
{ {
Object* gameObj =NULL; Object* gameObj =NULL;
switch ((ObjectSpecialType)obj->specialTypeID) switch ((ObjectSpecialType)obj->specialTypeID)
{ {
case ObjectSpecialType_None: case ObjectSpecialType_None:
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Sky: case ObjectSpecialType_Sky:
{ {
float skySize = ((SkyAttributes*)obj)->skySize; float skySize = ((SkyAttributes*)obj)->skySize;
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_World: case ObjectSpecialType_World:
@ -39,28 +44,28 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
float worldSize = ((WorldAttributes*)obj)->worldSize; float worldSize = ((WorldAttributes*)obj)->worldSize;
float atmosphereSize = ((WorldAttributes*)obj)->atmoSphereSize; float atmosphereSize = ((WorldAttributes*)obj)->atmoSphereSize;
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Building: case ObjectSpecialType_Building:
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
case ObjectSpecialType_Stone: case ObjectSpecialType_Stone:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_StandarsBox: case ObjectSpecialType_StandardBox:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_RedExplosiveBox: case ObjectSpecialType_RedExplosiveBox:
{ {
int dmg = 50; int dmg = 50;
//gameObj = new ExplosiveBox(rigidBody, ObjectSpecialType_RedExplosiveBox); //gameObj = new ExplosiveBox(rigidBody, ObjectSpecialType_RedExplosiveBox);
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
//case ObjectSpecialType_BlueExplosiveBox: //case ObjectSpecialType_BlueExplosiveBox:
@ -69,24 +74,24 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
// break; // break;
case ObjectSpecialType_SpikeBox: case ObjectSpecialType_SpikeBox:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Spike: case ObjectSpecialType_Spike:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_CrystalFormation: case ObjectSpecialType_CrystalFormation:
{ {
int dmg = 50; int dmg = 50;
//gameObj = new Crystal(rigidBody); //gameObj = new Crystal(rigidBody);
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_CrystalShard: case ObjectSpecialType_CrystalShard:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_JumpPad: case ObjectSpecialType_JumpPad:
@ -94,33 +99,35 @@ Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody)
float power = ((JumpPadAttributes*)obj)->power; float power = ((JumpPadAttributes*)obj)->power;
Oyster::Math::Float3 dir = ((JumpPadAttributes*)obj)->direction; Oyster::Math::Float3 dir = ((JumpPadAttributes*)obj)->direction;
//gameObj = JumpPad(rigidBody, ); //gameObj = JumpPad(rigidBody, );
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Portal: case ObjectSpecialType_Portal:
{ {
Oyster::Math::Float3 destination = ((PortalAttributes*)obj)->destination; Oyster::Math::Float3 destination = ((PortalAttributes*)obj)->destination;
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_SpawnPoint: case ObjectSpecialType_SpawnPoint:
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); // save
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Player: case ObjectSpecialType_Player:
{ {
gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); // should not be read from the lvl format
//gameObj = new Player(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
case ObjectSpecialType_Generic: case ObjectSpecialType_Generic:
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
default: default:
{ {
gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID,objID++);
} }
break; break;
} }
@ -241,15 +248,20 @@ void Level::InitiateLevel(std::string levelPath)
if(rigidBody_Static != NULL) if(rigidBody_Static != NULL)
{ {
// create game object // create game object
//Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static);
Object* staticGameObj = new StaticObject(rigidBody_Static, Object::DefaultCollisionAfter, (ObjectSpecialType)staticObjData->specialTypeID); //Object* staticGameObj = new StaticObject(rigidBody_Static, Object::DefaultCollisionAfter, (ObjectSpecialType)staticObjData->specialTypeID);
if(staticGameObj != NULL) if(staticGameObj != NULL)
{ {
this->staticObjects.Push((StaticObject*)staticGameObj); this->staticObjects.Push((StaticObject*)staticGameObj);
this->staticObjects[this->staticObjects.Size()-1]->objectID = modelCount++; //this->staticObjects[this->staticObjects.Size()-1]->objectID = modelCount++;
rigidBody_Static->SetCustomTag(this->staticObjects[this->staticObjects.Size()-1]); //rigidBody_Static->SetCustomTag(this->staticObjects[this->staticObjects.Size()-1]);
} }
//this->staticObjects.Push(new StaticObject(rigidBody_Static, Object::DefaultCollisionAfter, (ObjectSpecialType)staticObjData->specialTypeID, 0));
//this->staticObjects[staticObjCount]->objectID = modelCount++;
} }
} }
@ -280,16 +292,15 @@ void Level::InitiateLevel(std::string levelPath)
if(rigidBody_Dynamic != NULL) if(rigidBody_Dynamic != NULL)
{ {
// create game object // create game object
//Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic);
Object* dynamicGameObj =new DynamicObject(rigidBody_Dynamic, Object::DefaultCollisionAfter, (ObjectSpecialType)dynamicObjData->specialTypeID); //Object* dynamicGameObj =new DynamicObject(rigidBody_Dynamic, Object::DefaultCollisionAfter, (ObjectSpecialType)dynamicObjData->specialTypeID);
if (dynamicGameObj != NULL) if (dynamicGameObj != NULL)
{ {
this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); this->dynamicObjects.Push((DynamicObject*)dynamicGameObj);
this->dynamicObjects[this->dynamicObjects.Size()-1]->objectID = modelCount++; //this->dynamicObjects[this->dynamicObjects.Size()-1]->objectID = modelCount++;
rigidBody_Dynamic->SetCustomTag(this->dynamicObjects[this->dynamicObjects.Size()-1]); //rigidBody_Dynamic->SetCustomTag(this->dynamicObjects[this->dynamicObjects.Size()-1]);
} }
} }
} }
break; break;
case ObjectType::ObjectType_Light: case ObjectType::ObjectType_Light:
@ -308,9 +319,9 @@ void Level::InitiateLevel(float radius)
// add level sphere // add level sphere
ICustomBody* rigidBody = API::Instance().AddCollisionSphere(599.2f, Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f); ICustomBody* rigidBody = API::Instance().AddCollisionSphere(599.2f, Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f);
levelObj = new StaticObject(rigidBody, LevelCollisionAfter, ObjectSpecialType_World); levelObj = new StaticObject(rigidBody, LevelCollisionAfter, ObjectSpecialType_World, idCount++);
this->levelObj->objectID = idCount++; //this->levelObj->objectID = idCount++;
rigidBody->SetCustomTag(levelObj); rigidBody->SetCustomTag(levelObj);
@ -322,9 +333,9 @@ void Level::InitiateLevel(float radius)
{ {
rigidBody_TestBox = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 605 + i*5, 10), 5, 0.5f, 0.8f, 0.6f); rigidBody_TestBox = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 605 + i*5, 10), 5, 0.5f, 0.8f, 0.6f);
this->dynamicObjects.Push(new DynamicObject(rigidBody_TestBox, Object::DefaultCollisionAfter, ObjectSpecialType_StandarsBox)); this->dynamicObjects.Push(new DynamicObject(rigidBody_TestBox, Object::DefaultCollisionAfter, ObjectSpecialType_StandardBox, idCount++));
this->dynamicObjects[i]->objectID = idCount++; //this->dynamicObjects[i]->objectID = idCount++;
rigidBody_TestBox->SetCustomTag(this->dynamicObjects[i]); rigidBody_TestBox->SetCustomTag(this->dynamicObjects[i]);
} }
/*offset += nrOfBoxex; /*offset += nrOfBoxex;
@ -361,24 +372,24 @@ void Level::InitiateLevel(float radius)
// add crystal // add crystal
ICustomBody* rigidBody_Crystal = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(10, 605, 0), 5, 0.5f, 0.8f, 0.6f); ICustomBody* rigidBody_Crystal = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.5f, 0.5f, 0.5f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(10, 605, 0), 5, 0.5f, 0.8f, 0.6f);
this->dynamicObjects.Push(new DynamicObject(rigidBody_Crystal, Object::DefaultCollisionAfter, ObjectSpecialType_StandarsBox)); this->dynamicObjects.Push(new DynamicObject(rigidBody_Crystal, Object::DefaultCollisionAfter, ObjectSpecialType_StandardBox, idCount++));
rigidBody_Crystal->SetCustomTag(this->dynamicObjects[nrOfBoxex]); rigidBody_Crystal->SetCustomTag(this->dynamicObjects[nrOfBoxex]);
this->dynamicObjects[nrOfBoxex]->objectID = idCount++; //this->dynamicObjects[nrOfBoxex]->objectID = idCount++;
// add house // add house
ICustomBody* rigidBody_House =API::Instance().AddCollisionBox(Oyster::Math::Float3(20, 20, 20), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(-50, 590, 0), 0, 0.5f, 0.8f, 0.6f); ICustomBody* rigidBody_House =API::Instance().AddCollisionBox(Oyster::Math::Float3(20, 20, 20), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(-50, 590, 0), 0, 0.5f, 0.8f, 0.6f);
this->staticObjects.Push(new StaticObject(rigidBody_House, Object::DefaultCollisionAfter, ObjectSpecialType_Generic)); this->staticObjects.Push(new StaticObject(rigidBody_House, Object::DefaultCollisionAfter, ObjectSpecialType_Generic, idCount++));
rigidBody_House->SetCustomTag(this->staticObjects[0]); rigidBody_House->SetCustomTag(this->staticObjects[0]);
this->staticObjects[0]->objectID = idCount++; //this->staticObjects[0]->objectID = idCount++;
// add jumppad // add jumppad
ICustomBody* rigidBody_Jumppad = API::Instance().AddCollisionBox(Oyster::Math::Float3(1, 1, 1), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(4, 600.3, 0), 5, 0.5f, 0.8f, 0.6f); ICustomBody* rigidBody_Jumppad = API::Instance().AddCollisionBox(Oyster::Math::Float3(1, 1, 1), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(4, 600.3, 0), 5, 0.5f, 0.8f, 0.6f);
this->staticObjects.Push(new JumpPad(rigidBody_Jumppad, JumpPad::JumpPadActivated, ObjectSpecialType_JumpPad, Oyster::Math::Float3(0,2000,0))); this->staticObjects.Push(new JumpPad(rigidBody_Jumppad, ObjectSpecialType_JumpPad,idCount++ ,Oyster::Math::Float3(0,2000,0)));
rigidBody_Jumppad->SetCustomTag(this->staticObjects[1]); rigidBody_Jumppad->SetCustomTag(this->staticObjects[1]);
this->staticObjects[1]->objectID = idCount++; //this->staticObjects[1]->objectID = idCount++;
} }
void Level::AddPlayerToTeam(Player *player, int teamID) void Level::AddPlayerToTeam(Player *player, int teamID)

View File

@ -9,7 +9,7 @@
#include "StaticObject.h" #include "StaticObject.h"
#include "DynamicObject.h" #include "DynamicObject.h"
#include "GameModeType.h" #include "GameModeType.h"
#include "JumpPad.h"
#include "Player.h" #include "Player.h"
#include "PhysicsAPI.h" #include "PhysicsAPI.h"
#include "TeamManager.h" #include "TeamManager.h"
@ -76,6 +76,7 @@ namespace GameLogic
GameModeType gameMode; GameModeType gameMode;
Utility::DynamicMemory::SmartPointer<Oyster::Physics::ICustomBody> rigidBodyLevel; Utility::DynamicMemory::SmartPointer<Oyster::Physics::ICustomBody> rigidBodyLevel;
StaticObject *levelObj; StaticObject *levelObj;
int objID;
}; };

View File

@ -75,7 +75,7 @@ std::vector<SmartPointer<ObjectTypeHeader>> LevelParser::Parse(std::string filen
case ObjectSpecialType_Spike: case ObjectSpecialType_Spike:
case ObjectSpecialType_SpikeBox: case ObjectSpecialType_SpikeBox:
case ObjectSpecialType_RedExplosiveBox: case ObjectSpecialType_RedExplosiveBox:
case ObjectSpecialType_StandarsBox: case ObjectSpecialType_StandardBox:
case ObjectSpecialType_Stone: case ObjectSpecialType_Stone:
case ObjectSpecialType_Building: case ObjectSpecialType_Building:
{ {

View File

@ -30,7 +30,7 @@ namespace GameLogic
ObjectSpecialType_World, //Always the main celestial body ObjectSpecialType_World, //Always the main celestial body
ObjectSpecialType_Building, ObjectSpecialType_Building,
ObjectSpecialType_Stone, ObjectSpecialType_Stone,
ObjectSpecialType_StandarsBox, ObjectSpecialType_StandardBox,
ObjectSpecialType_RedExplosiveBox, ObjectSpecialType_RedExplosiveBox,
ObjectSpecialType_SpikeBox, ObjectSpecialType_SpikeBox,
ObjectSpecialType_Spike, ObjectSpecialType_Spike,

View File

@ -19,55 +19,28 @@ Object::Object()
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f); this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f);
this->type = ObjectSpecialType_Unknown; this->type = ObjectSpecialType_Unknown;
this->objectID = GID(); this->objectID = -1;
} }
Object::Object(ObjectSpecialType type) Object::Object(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
{
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f);
this->type = type;
this->objectID = GID();
}
Object::Object(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type)
{
this->rigidBody = rigidBody;
this->type = type;
this->objectID = GID();
}
Object::Object( void* collisionFuncAfter, ObjectSpecialType type)
{
this->rigidBody = API::Instance().AddCollisionBox(Oyster::Math::Float3(0.0f, 0.0f, 0.0f), Oyster::Math::Float4(0, 0, 0, 1), Oyster::Math::Float3(0, 0, 0), 0, 0.5f, 0.8f, 0.6f);
this->type = type;
this->objectID = GID();
}
Object::Object(Oyster::Physics::ICustomBody *rigidBody, void* collisionFuncAfter, ObjectSpecialType type)
{ {
this->rigidBody = rigidBody; this->rigidBody = rigidBody;
this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter)); this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter));
this->type = type; this->type = type;
this->objectID = GID(); this->objectID = objectID;
this->rigidBody->SetCustomTag(this);
} }
Object::Object(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type) Object::Object(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
{ {
this->rigidBody = rigidBody; this->rigidBody = rigidBody;
this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter)); this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter));
this->type = type; this->type = type;
this->objectID = GID(); this->objectID = objectID;
this->rigidBody->SetCustomTag(this);
} }
void Object::ApplyLinearImpulse(Oyster::Math::Float3 force)
{
}
Object::~Object(void) Object::~Object(void)
{ {

View File

@ -18,11 +18,9 @@ namespace GameLogic
{ {
public: public:
Object(); Object();
Object(ObjectSpecialType type);
Object(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); Object(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
Object(void* collisionFuncAfter, ObjectSpecialType type); Object(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
Object(Oyster::Physics::ICustomBody *rigidBody, void* collisionFuncAfter, ObjectSpecialType type);
Object(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type);
~Object(void); ~Object(void);
ObjectSpecialType GetObjectType() const override; ObjectSpecialType GetObjectType() const override;
@ -38,7 +36,6 @@ namespace GameLogic
Oyster::Physics::ICustomBody* GetRigidBody(); Oyster::Physics::ICustomBody* GetRigidBody();
void ApplyLinearImpulse(Oyster::Math::Float3 force);
virtual void BeginFrame(); virtual void BeginFrame();
virtual void EndFrame(); virtual void EndFrame();
@ -50,8 +47,7 @@ namespace GameLogic
public: //TODO: Hax This should be private when level is dynamic public: //TODO: Hax This should be private when level is dynamic
ObjectSpecialType type;
int objectID;
protected: protected:
Oyster::Physics::ICustomBody *rigidBody; Oyster::Physics::ICustomBody *rigidBody;
@ -59,6 +55,9 @@ namespace GameLogic
static const Game* gameInstance; static const Game* gameInstance;
Oyster::Math::Float3 currLook; Oyster::Math::Float3 currLook;
Oyster::Math::Float3 newLook; Oyster::Math::Float3 newLook;
ObjectSpecialType type;
int objectID;
}; };
} }

View File

@ -13,34 +13,9 @@ Player::Player()
{ {
} }
Player::Player(ObjectSpecialType type)
:DynamicObject(type)
{
InitPlayer();
}
Player::Player(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type)
:DynamicObject(rigidBody,type)
{
InitPlayer();
}
Player::Player( void* collisionFuncAfter, ObjectSpecialType type) Player::Player(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID, int teamID)
:DynamicObject(collisionFuncAfter,type) :DynamicObject(rigidBody, EventOnCollision, type, objectID)
{
InitPlayer();
}
Player::Player(Oyster::Physics::ICustomBody *rigidBody, void* collisionFuncAfter, ObjectSpecialType type)
:DynamicObject(rigidBody, collisionFuncAfter, type)
{
InitPlayer();
}
Player::Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type)
:DynamicObject(rigidBody, collisionFuncAfter, type)
{
InitPlayer();
}
void Player::InitPlayer()
{ {
weapon = new Weapon(2,this); weapon = new Weapon(2,this);
@ -55,6 +30,36 @@ void Player::InitPlayer()
key_strafeLeft = 0; key_strafeLeft = 0;
} }
Player::Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID, int teamID)
:DynamicObject(rigidBody, EventOnCollision, type, objectID)
{
this->rigidBody = rigidBody;
Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(0,400,0);
Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,1.0f,0.5f);
Oyster::Math::Float mass = 60;
Oyster::Math::Float restitutionCoeff = 0.5;
Oyster::Math::Float frictionCoeff_Static = 0.4;
Oyster::Math::Float frictionCoeff_Dynamic = 0.3;
this->rigidBody = Oyster::Physics::API::Instance().AddCollisionBox(size, Oyster::Math::Float4(0, 0, 0, 1), centerPosition, mass, 0.5f, 0.8f, 0.6f );
this->rigidBody->SetAngularFactor(0.0f);
weapon = new Weapon(2,this);
this->life = 100;
this->teamID = teamID;
this->playerState = PLAYER_STATE_IDLE;
this->lookDir = Oyster::Math::Float3(0,0,-1);
this->moveDir = Oyster::Math::Float3(0,0,0);
key_forward = 0;
key_backward = 0;
key_strafeRight = 0;
key_strafeLeft = 0;
}
Player::~Player(void) Player::~Player(void)
{ {
if(weapon) if(weapon)

View File

@ -16,14 +16,11 @@ namespace GameLogic
{ {
public: public:
Player(void); Player(void);
Player(ObjectSpecialType type);
Player(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); Player(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID, int teamID);
Player( void* collisionFuncAfter, ObjectSpecialType type); Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID, int teamID);
Player(Oyster::Physics::ICustomBody *rigidBody, void* collisionFuncAfter, ObjectSpecialType type);
Player(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type);
~Player(void); ~Player(void);
void InitPlayer();
/******************************************************** /********************************************************
* Moves the player based on input * Moves the player based on input
@ -81,7 +78,7 @@ namespace GameLogic
void Jump(); void Jump();
private: private:
int life; Oyster::Math::Float life;
int teamID; int teamID;
Weapon *weapon; Weapon *weapon;
PLAYER_STATE playerState; PLAYER_STATE playerState;

View File

@ -9,8 +9,9 @@ Portal::Portal(void)
this->portalExit = Float3(0,0,0); this->portalExit = Float3(0,0,0);
} }
Portal::Portal(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, Oyster::Math::Float3 portalExit)
:StaticObject(rigidBody, collisionFuncAfter, type) Portal::Portal(Oyster::Physics::ICustomBody *rigidBody, void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type,int objectID ,Oyster::Math::Float3 portalExit)
:StaticObject(rigidBody, EventOnCollision, type, objectID)
{ {
this->portalExit = portalExit; this->portalExit = portalExit;
} }

View File

@ -9,8 +9,8 @@ namespace GameLogic
Portal(void); Portal(void);
Portal(Oyster::Physics::ICustomBody *rigidBody Portal(Oyster::Physics::ICustomBody *rigidBody
,void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) ,void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss)
,ObjectSpecialType type, Oyster::Math::Float3 portalExit); ,ObjectSpecialType type,int objectID ,Oyster::Math::Float3 portalExit);
~Portal(void); ~Portal(void);

View File

@ -10,32 +10,17 @@ StaticObject::StaticObject()
{ {
} }
StaticObject::StaticObject(ObjectSpecialType type)
:Object(type)
{
} StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody , void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type) :Object(rigidBody, EventOnCollision, type, objectID)
:Object(rigidBody,type)
{ {
//this->rigidBody->SetGravity(true); //use setMass(when it is made) and set the mass to 0 in order to ensure that the object is static
//this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_BeforeCollisionResponse)(CollisionManager::IgnoreCollision));
} }
StaticObject::StaticObject( void* collisionFuncAfter, ObjectSpecialType type) StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID)
:Object(collisionFuncAfter,type) :Object(rigidBody, EventOnCollision, type, objectID)
{ {
//use setMass(when it is made) and set the mass to 0 in order to ensure that the object is static
}
StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody , void* collisionFuncAfter, ObjectSpecialType type)
:Object(rigidBody, collisionFuncAfter, type)
{
}
StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type)
:Object(rigidBody, collisionFuncAfter, type)
{
} }
StaticObject::~StaticObject(void) StaticObject::~StaticObject(void)

View File

@ -18,11 +18,8 @@ namespace GameLogic
public: public:
StaticObject(); StaticObject();
StaticObject(ObjectSpecialType type); StaticObject(Oyster::Physics::ICustomBody *rigidBody , void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
StaticObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); StaticObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID);
StaticObject( void* collisionFuncAfter, ObjectSpecialType type);
StaticObject(Oyster::Physics::ICustomBody *rigidBody , void* collisionFuncAfter, ObjectSpecialType type);
StaticObject(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type);
~StaticObject(void); ~StaticObject(void);

View File

@ -19,7 +19,11 @@ Weapon::Weapon()
Weapon::Weapon(int MaxNrOfSockets,Player *owner) Weapon::Weapon(int MaxNrOfSockets,Player *owner)
{ {
attatchmentSockets.Resize(MaxNrOfSockets); attatchmentSockets.Resize(MaxNrOfSockets);
attatchmentSockets[0] = new AttatchmentSocket(); for(int i = 0; i < MaxNrOfSockets; i++)
{
attatchmentSockets[i] = new AttatchmentSocket();
}
weaponState = WEAPON_STATE_IDLE; weaponState = WEAPON_STATE_IDLE;
currentNrOfAttatchments = 0; currentNrOfAttatchments = 0;
@ -37,10 +41,14 @@ Weapon::Weapon(int MaxNrOfSockets,Player *owner)
Weapon::~Weapon(void) Weapon::~Weapon(void)
{ {
for (unsigned int i = 0; i < this->attatchmentSockets.Size(); i++) for (unsigned int i = 0; i < this->attatchmentSockets.Size(); i++)
{
if(this->attatchmentSockets[i])
{ {
delete this->attatchmentSockets[i]; delete this->attatchmentSockets[i];
this->attatchmentSockets[i] = 0; this->attatchmentSockets[i] = 0;
} }
}
} }
/******************************************************** /********************************************************

View File

@ -15,7 +15,7 @@ EventButtonCollection::EventButtonCollection(EventCollectionState state)
EventButtonCollection::~EventButtonCollection() EventButtonCollection::~EventButtonCollection()
{ {
for(int i = 0; i < EventHandler::Instance().collections.size(); i++) for(int i = 0; i < (int)EventHandler::Instance().collections.size(); i++)
{ {
if(EventHandler::Instance().collections.at(i) == this) if(EventHandler::Instance().collections.at(i) == this)
{ {

View File

@ -53,7 +53,7 @@ void EventHandler::RenderText()
void EventHandler::AddCollection(EventButtonCollection* collection) void EventHandler::AddCollection(EventButtonCollection* collection)
{ {
for(int i = 0; i < collections.size(); i++) for(int i = 0; i < (int)collections.size(); i++)
{ {
//Do not add the collection if it's already in the list. //Do not add the collection if it's already in the list.
if(collections.at(i) == collection) if(collections.at(i) == collection)
@ -64,7 +64,7 @@ void EventHandler::AddCollection(EventButtonCollection* collection)
void EventHandler::ReleaseCollection(EventButtonCollection* collection) void EventHandler::ReleaseCollection(EventButtonCollection* collection)
{ {
for(int i = 0; i < collections.size(); i++) for(int i = 0; i < (int)collections.size(); i++)
{ {
if(collections.at(i) == collection) if(collections.at(i) == collection)
{ {