updated the weapon system, collisionManager and redid the "object" heirarki

This commit is contained in:
Erik Persson 2013-12-12 09:36:14 +01:00
parent 4b9f2671bf
commit e11d7d94f7
19 changed files with 197 additions and 121 deletions

Binary file not shown.

View File

@ -14,7 +14,7 @@ struct AttatchmentSocket::PrivateData
}
IAttatchment *Attatchment;
IAttatchment *attatchment;
}myData;
@ -30,5 +30,23 @@ AttatchmentSocket::~AttatchmentSocket(void)
IAttatchment* AttatchmentSocket::GetAttatchment()
{
return myData->Attatchment;
return myData->attatchment;
}
void AttatchmentSocket::SetAttatchment(IAttatchment *attatchment)
{
if (myData->attatchment)
{
delete myData->attatchment;
}
myData->attatchment = attatchment;
}
void AttatchmentSocket::RemoveAttatchment()
{
if (myData->attatchment)
{
delete myData->attatchment;
}
}

View File

@ -11,6 +11,8 @@ namespace GameLogic
~AttatchmentSocket(void);
IAttatchment* GetAttatchment();
void SetAttatchment(IAttatchment *attatchment);
void RemoveAttatchment();
private:
struct PrivateData;

View File

@ -1,4 +1,9 @@
#include "CollisionManager.h"
#include "RefManager.h"
#include "PhysicsAPI.h"
#include "Object.h"
#include "DynamicObject.h"
#include "Player.h"
using namespace Oyster;
@ -15,22 +20,21 @@ namespace GameLogic
switch (realObj->GetType())
{
case Object::OBJECT_TYPE_BOX:
PlayerVBox(*player,(*(DynamicObject*) realObj));
case OBJECT_TYPE_BOX:
//PlayerVBox(*player,(*(DynamicObject*) realObj));
break;
case Object::OBJECT_TYPE_PLAYER:
case OBJECT_TYPE_PLAYER:
break;
}
//spela ljud? ta skada? etc etc
return Physics::ICustomBody::SubscriptMessage_none;
}
void PlayerVBox(Player &player, DynamicObject &box)
/* void PlayerVBox(Player &player, DynamicObject &box)
{
//spela ljud? ta skada? etc etc
}
spela ljud? ta skada? etc etc
}*/
Physics::ICustomBody::SubscriptMessage BoxCollision(const Oyster::Physics::ICustomBody *rigidBodyBox, const Oyster::Physics::ICustomBody *obj)
{
@ -39,11 +43,11 @@ namespace GameLogic
switch (realObj->GetType())
{
case Object::OBJECT_TYPE_BOX:
case OBJECT_TYPE_BOX:
break;
case Object::OBJECT_TYPE_PLAYER:
PlayerVBox(*(Player*)realObj,*box);
case OBJECT_TYPE_PLAYER:
//PlayerVBox(*(Player*)realObj,*box);
break;
}

View File

@ -3,9 +3,8 @@
#include "Object.h"
#include "PhysicsAPI.h"
#include "RefManager.h"
#include "DynamicObject.h"
#include "Player.h"
//#include "DynamicObject.h"
//#include "Player.h"
namespace GameLogic
{
@ -18,8 +17,8 @@ namespace GameLogic
Oyster::Physics::ICustomBody::SubscriptMessage BoxCollision(const Oyster::Physics::ICustomBody *rigidBodyBox, const Oyster::Physics::ICustomBody *obj);
//these are the specific collision case functions
void PlayerVBox(Player &player, DynamicObject &box);
void BoxVBox(DynamicObject &box1, DynamicObject &box2);
//void PlayerVBox(Player &player, DynamicObject &box);
//void BoxVBox(DynamicObject &box1, DynamicObject &box2);
};

View File

@ -1,29 +1,23 @@
#include "DynamicObject.h"
#include "CollisionManager.h"
using namespace GameLogic;
struct DynamicObject::PrivateData
{
PrivateData()
{
}
~PrivateData()
{
}
}myData;
DynamicObject::DynamicObject()
:Object()
{
myData = new PrivateData();
}
DynamicObject::DynamicObject(void* collisionFunc, OBJECT_TYPE type)
:Object(collisionFunc, type)
{
}
DynamicObject::~DynamicObject(void)
{
delete myData;
}

View File

@ -1,27 +1,24 @@
//////////////////////////////////////////////////
//Created by Erik and Linda of the GameLogic team
//////////////////////////////////////////////////
#ifndef DYNAMICOBJECT_H
#define DYNAMICOBJECT_H
#include "Object.h"
namespace GameLogic
{
class DynamicObject
class DynamicObject : public Object
{
public:
DynamicObject();
DynamicObject(void* collisionFunc, OBJECT_TYPE type);
~DynamicObject(void);
void Update();
private:
struct PrivateData;
PrivateData *myData;
};
}

View File

@ -36,6 +36,13 @@ namespace GameLogic
WEAPON_STATE_IDLE = 1,
WEAPON_STATE_RELOADING = 2,
};
}
enum OBJECT_TYPE
{
OBJECT_TYPE_PLAYER = 0,
OBJECT_TYPE_BOX = 1,
OBJECT_TYPE_UNKNOWN = 2,
};
};
#endif

View File

@ -9,14 +9,10 @@ struct Level::PrivateData
{
PrivateData()
{
gameMode = new GameMode();
}
~PrivateData()
{
if (gameMode)
{
delete gameMode;
}
}
@ -40,3 +36,5 @@ Level::~Level(void)
{
delete myData;
}

View File

@ -14,6 +14,8 @@ namespace GameLogic
Level(void);
~Level(void);
void CreateBox();
private:
struct PrivateData;
PrivateData *myData;

View File

@ -1,23 +1,15 @@
#include "Object.h"
#include "OysterMath.h"
#include "DllInterfaces\GFXAPI.h"
#include "CollisionManager.h"
#include "RefManager.h"
using namespace GameLogic;
using namespace Oyster::Math;
using namespace Oyster::Graphics::Model;
using namespace Utility::DynamicMemory;
using namespace Oyster::Physics;
Object::Object(std::wstring objFile)
Object::Object()
{
//model = new Model();
model = Oyster::Graphics::API::CreateModel(objFile);
API::SimpleBodyDescription sbDesc;
//sbDesc.centerPosition =
@ -26,23 +18,33 @@ Object::Object(std::wstring objFile)
GameLogic::RefManager::getInstance()->AddMapping(*rigidBody, *this);
this->type = OBJECT_TYPE_UNKNOWN;
}
Object::Object(void* collisionFunc, OBJECT_TYPE type)
{
API::SimpleBodyDescription sbDesc;
//sbDesc.centerPosition =
//poi
ICustomBody* temp = rigidBody = API::Instance().CreateRigidBody(sbDesc).Release();
rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_Collision)(collisionFunc));
GameLogic::RefManager::getInstance()->AddMapping(*rigidBody, *this);
this->type = type;
}
Object::~Object(void)
{
Oyster::Graphics::API::DeleteModel(model);
}
void Object::Render()
{
this->rigidBody->GetOrientation(model->WorldMatrix);
Oyster::Graphics::API::RenderScene(model, 1);
}
Object::OBJECT_TYPE Object::GetType()
OBJECT_TYPE Object::GetType()
{
return this->type;
}

View File

@ -7,41 +7,24 @@
#define OBJECT_H
#include "PhysicsAPI.h"
#include "DllInterfaces/GFXAPI.h"
#include "Model/Model.h"
#include "Utilities.h"
#include "GameLogicStates.h"
#include "CollisionManager.h"
namespace GameLogic
{
class Object
{
public:
enum OBJECT_TYPE
{
OBJECT_TYPE_PLAYER,
OBJECT_TYPE_BOX,
};
Object(std::wstring objFile );
virtual ~Object(void);
void Render();
Object();
Object(void* collisionFunc, OBJECT_TYPE type);
~Object(void);
OBJECT_TYPE GetType();
private:
OBJECT_TYPE type;
protected:
//either a model pointer or an ID to an arraypos filled with models that are to be rendered
//rigidBody
Oyster::Physics::ICustomBody *rigidBody;
Oyster::Graphics::Model::Model *model;
};
}

View File

@ -15,8 +15,6 @@ struct Player::PrivateData
life = 100;
playerState = PLAYER_STATE_IDLE;
rigidBody->SetSubscription(CollisionManager::PlayerCollision);
}
~PrivateData()
@ -30,16 +28,16 @@ struct Player::PrivateData
int life;
Weapon *weapon;
PLAYER_STATE playerState;
ICustomBody *rigidBody;
Oyster::Math::Float3 lookDir;
}myData;
Player::Player()
:Object(CollisionManager::PlayerCollision, OBJECT_TYPE_PLAYER)
{
myData = new PrivateData();
}
Player::~Player(void)
{
delete myData;
@ -83,9 +81,9 @@ void Player::Move(const PLAYER_MOVEMENT &movement)
/********************************************************
* Uses the players weapon based on user input
********************************************************/
void Player::Shoot(const WEAPON_FIRE &fireInput)
void Player::UseWeapon(const WEAPON_FIRE &fireInput)
{
myData->weapon->UseWeapon(fireInput);
myData->weapon->Use(fireInput);
}
/********************************************************
@ -112,7 +110,7 @@ bool Player::IsIdle()
Oyster::Math::Float3 Player::GetPos()
{
return myData->rigidBody->GetCenter();
return rigidBody->GetCenter();
}
/********************************************************

View File

@ -5,10 +5,11 @@
#define PLAYER_H
#include "GameLogicStates.h"
#include "OysterMath.h"
#include "Object.h"
namespace GameLogic
{
class Player
class Player : public Object
{
public:
@ -17,7 +18,7 @@ namespace GameLogic
void Update();
void Move(const PLAYER_MOVEMENT &movement);
void Shoot(const WEAPON_FIRE &fireInput);
void UseWeapon(const WEAPON_FIRE &fireInput);
void Jump();
bool IsWalking();

View File

@ -8,7 +8,6 @@
#include<map>
#include "Object.h"
#include "PhysicsAPI.h"
namespace GameLogic
{

View File

@ -2,28 +2,22 @@
using namespace GameLogic;
struct StaticObject::PrivateData
{
PrivateData()
{
}
~PrivateData()
{
}
}myData;
StaticObject::StaticObject()
:Object()
{
myData = new PrivateData();
}
StaticObject::StaticObject(void* collisionFunc, OBJECT_TYPE type)
:Object(collisionFunc,type)
{
}
StaticObject::~StaticObject(void)
{
delete myData;
}

View File

@ -11,16 +11,16 @@
namespace GameLogic
{
class StaticObject
class StaticObject : public Object
{
public:
StaticObject();
StaticObject(void* collisionFunc, OBJECT_TYPE type);
~StaticObject(void);
private:
struct PrivateData;
PrivateData *myData;
};
}

View File

@ -9,20 +9,23 @@ struct Weapon::PrivateData
PrivateData()
{
weaponState = WEAPON_STATE_IDLE;
SelectedAttatchment = new AttatchmentMassDriver();
SelectedAttatchment = 0;
currentNrOfAttatchments = 0;
selectedSocketID = 0;
}
~PrivateData()
{
delete SelectedAttatchment;
}
WEAPON_STATE weaponState;
AttatchmentSocket **attatchmentSockets;
int nrOfAttatchmentSockets;
int MaxNrOfSockets;
int currentNrOfAttatchments;
IAttatchment *SelectedAttatchment;
int selectedSocketID;
}myData;
@ -31,6 +34,17 @@ Weapon::Weapon()
myData = new PrivateData();
}
Weapon::Weapon(int MaxNrOfSockets)
{
myData = new PrivateData();
myData->MaxNrOfSockets = MaxNrOfSockets;
myData->attatchmentSockets = new AttatchmentSocket*[MaxNrOfSockets];
for (int i = 0; i < MaxNrOfSockets; i++)
{
myData->attatchmentSockets[i] = new AttatchmentSocket();
}
}
Weapon::~Weapon(void)
{
@ -40,7 +54,7 @@ Weapon::~Weapon(void)
/********************************************************
* Uses the weapon based on the input given and the current chosen attatchment
********************************************************/
void Weapon::UseWeapon(const WEAPON_FIRE &fireInput)
void Weapon::Use(const WEAPON_FIRE &fireInput)
{
myData->SelectedAttatchment->UseAttatchment(fireInput);
}
@ -67,3 +81,56 @@ bool Weapon::IsReloading()
return (myData->weaponState == WEAPON_STATE::WEAPON_STATE_RELOADING);
}
bool Weapon::IsValidSocket(int socketID)
{
if(socketID < myData->MaxNrOfSockets && socketID >= 0)
{
if (myData->attatchmentSockets[socketID]->GetAttatchment() != 0)
{
return true;
}
}
return false;
}
int Weapon::GetCurrentSocketID()
{
return myData->selectedSocketID;
}
void Weapon::AddNewAttatchment(IAttatchment *attatchment)
{
if(myData->currentNrOfAttatchments < myData->MaxNrOfSockets)
{
myData->attatchmentSockets[myData->currentNrOfAttatchments]->SetAttatchment(attatchment);
myData->currentNrOfAttatchments++;
}
}
void Weapon::SwitchAttatchment(IAttatchment *attatchment, int socketID)
{
if (IsValidSocket(socketID))
{
myData->attatchmentSockets[socketID]->SetAttatchment(attatchment);
}
}
void Weapon::RemoveAttatchment(int socketID)
{
if (IsValidSocket(socketID))
{
myData->attatchmentSockets[socketID]->RemoveAttatchment();
}
}
void Weapon::SelectAttatchment(int socketID)
{
if (IsValidSocket(socketID))
{
myData->SelectedAttatchment = myData->attatchmentSockets[socketID]->GetAttatchment();
myData->selectedSocketID = socketID;
}
}

View File

@ -4,6 +4,7 @@
#ifndef WEAPON_H
#define WEAPON_H
#include "GameLogicStates.h"
#include "IAttatchment.h"
namespace GameLogic
{
@ -15,14 +16,24 @@ namespace GameLogic
Weapon(void);
Weapon(int nrOfAttatchmentSockets);
~Weapon(void);
void UseWeapon(const WEAPON_FIRE &fireInput);
void Use(const WEAPON_FIRE &fireInput);
void AddNewAttatchment(IAttatchment *attatchment);
void SwitchAttatchment(IAttatchment *attatchment, int socketID);
void RemoveAttatchment(int socketID);
void SelectAttatchment(int socketID);
bool IsFireing();
bool IsIdle();
bool IsReloading();
bool IsValidSocket(int socketID);
int GetCurrentSocketID();
private: