From 2dee9dd084230a523ecba8aaea4fc9fa296e41d0 Mon Sep 17 00:00:00 2001 From: lindaandersson Date: Thu, 13 Feb 2014 16:33:26 +0100 Subject: [PATCH 1/3] GL - initiating ccc map from folder ../Content/Worlds. Sync with graphics content. --- .../DanBiasGame/GameClientState/GameState.cpp | 20 +- .../LevelLoader/ParseFunctions.cpp | 2 +- Code/Game/GameLogic/CollisionManager.cpp | 1 + Code/Game/GameLogic/Game.cpp | 2 +- Code/Game/GameLogic/Game_PlayerData.cpp | 4 +- Code/Game/GameLogic/Level.cpp | 302 +++++++++++------- Code/Game/GameLogic/Level.h | 5 +- .../GameLogic/LevelLoader/ParseFunctions.cpp | 2 +- Code/Game/GameLogic/Portal.cpp | 2 +- Code/Game/GameLogic/Portal.h | 2 +- 10 files changed, 212 insertions(+), 130 deletions(-) diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.cpp b/Code/Game/DanBiasGame/GameClientState/GameState.cpp index 17ac3677..0a732062 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/GameState.cpp @@ -77,10 +77,10 @@ GameState::gameStateState GameState::LoadGame() //Oyster::Graphics::API::AddLight(plight); // use level loader - //LoadModels("3bana.bias"); + LoadModels("../Content/Worlds/ccc.bias"); // hardcoded objects - LoadModels("C:/Users/Sam/Documents/GitHub/Danbias/Bin/Content/worlds/ccc.bias"); + //LoadModels(); Float3 startPos = Float3(0,0,20.0f); InitCamera(startPos); return gameStateState_playing; @@ -185,7 +185,7 @@ bool GameState::LoadModels(std::string mapFile) objects = levelLoader.LoadLevel(mapFile); int objCount = objects.size(); - int modelId = 0; + int modelId = 100; ModelInitData modelData; for (int i = 0; i < objCount; i++) { @@ -244,19 +244,19 @@ bool GameState::LoadModels(std::string mapFile) break; } } - myId += modelId++; + //myId += modelId++; // add player model //modelData.position = ; //modelData.rotation = Oyster::Math::Quaternion(Oyster::Math::Float3(2,2,-2), 1); //modelData.scale = Oyster::Math::Float3(2,2,2); - modelData.visible = true; - modelData.modelPath = L"char_still_sizeref.dan"; - modelData.id = myId; - // load models - this->dynamicObjects.Push(new C_DynamicObj()); - this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); + //modelData.visible = true; + //modelData.modelPath = L"char_still_sizeref.dan"; + //modelData.id = myId; + //// load models + //this->dynamicObjects.Push(new C_DynamicObj()); + //this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); /*C_Player* obj = new C_Player(); privData->object.push_back(obj); diff --git a/Code/Game/DanBiasGame/GameClientState/LevelLoader/ParseFunctions.cpp b/Code/Game/DanBiasGame/GameClientState/LevelLoader/ParseFunctions.cpp index 7f5550d7..59f967de 100644 --- a/Code/Game/DanBiasGame/GameClientState/LevelLoader/ParseFunctions.cpp +++ b/Code/Game/DanBiasGame/GameClientState/LevelLoader/ParseFunctions.cpp @@ -147,7 +147,7 @@ namespace GameLogic //Läs in filen. int fileLength = 0; Loader loader; - char* buf = loader.LoadFile("C:/Users/Sam/Documents/GitHub/Danbias/Bin/Content/worlds/cgf/"+ fileName, fileLength); + char* buf = loader.LoadFile("../Content/Worlds/cgf/"+ fileName, fileLength); start = 0; LevelLoaderInternal::FormatVersion version; diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index 857c135c..c3b70cce 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -37,6 +37,7 @@ using namespace GameLogic; PlayerVObject(*player,*realObj, kineticEnergyLoss); //player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING; break; + } //return Physics::ICustomBody::SubscriptMessage_none; diff --git a/Code/Game/GameLogic/Game.cpp b/Code/Game/GameLogic/Game.cpp index 8be3f7a8..5bf18dc4 100644 --- a/Code/Game/GameLogic/Game.cpp +++ b/Code/Game/GameLogic/Game.cpp @@ -82,7 +82,7 @@ Game::LevelData* Game::CreateLevel() this->level = new LevelData(); //this->level->level->InitiateLevel(1000); - this->level->level->InitiateLevel("C:/Users/Sam/Documents/GitHub/Danbias/Bin/Content/worlds/ccc.bias"); + this->level->level->InitiateLevel("../Content/Worlds/ccc.bias"); return this->level; } diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index efeab2ee..acdcd2f3 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -7,9 +7,9 @@ Game::PlayerData::PlayerData() { //set some stats that are appropriate to a player - Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(0,400,0); + Oyster::Math::Float3 centerPosition = Oyster::Math::Float3(50,130,0); - Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,1.0f,0.5f); + Oyster::Math::Float3 size = Oyster::Math::Float3(0.25f,2.0f,0.5f); Oyster::Math::Float mass = 60; Oyster::Math::Float restitutionCoeff = 0.5; Oyster::Math::Float frictionCoeff_Static = 0.4; diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 3cdab709..9a91744e 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -16,48 +16,190 @@ Level::~Level(void) delete this->levelObj; this->levelObj = NULL; } -void Level::parseObjectType(ObjectTypeHeader* obj) +Object* Level::createGameObj(ObjectHeader* obj, ICustomBody* rigidBody) { - /*switch (obj->objectTypeID) + Object* gameObj =NULL; + switch ((ObjectSpecialType)obj->specialTypeID) { - case skySphere: - // save the skysphere to be able to rotate it + case ObjectSpecialType_None: + { + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } break; - case jumppad: - // save direction - break; - case portal: - // save portal destination - break; - case world: - // add gravitation well here - // add outer limit of the world - case spawn: - // save spawnpoint pos + case ObjectSpecialType_Sky: + { + float skySize = ((SkyAttributes*)obj)->skySize; + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } break; + case ObjectSpecialType_World: + { + API::Instance().SetGravityPoint(Oyster::Math3D::Float3(0,0,0)); + API::Instance().SetGravity(200); // could balance gravitation with the world size - default: + float worldSize = ((WorldAttributes*)obj)->worldSize; + float atmosphereSize = ((WorldAttributes*)obj)->atmoSphereSize; + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } break; - }*/ + case ObjectSpecialType_Building: + { + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + case ObjectSpecialType_Stone: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_StandarsBox: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_RedExplosiveBox: + { + int dmg = 50; + //gameObj = new ExplosiveBox(rigidBody, ObjectSpecialType_RedExplosiveBox); + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + //case ObjectSpecialType_BlueExplosiveBox: + // int dmg = 70; + // gameObj = new ExplosiveBox(rigidBody, ObjectSpecialType_BlueExplosiveBox); + // break; + case ObjectSpecialType_SpikeBox: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_Spike: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_CrystalFormation: + { + int dmg = 50; + //gameObj = new Crystal(rigidBody); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_CrystalShard: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_JumpPad: + { + float power = ((JumpPadAttributes*)obj)->power; + Oyster::Math::Float3 dir = ((JumpPadAttributes*)obj)->direction; + //gameObj = JumpPad(rigidBody, ); + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_Portal: + { + Oyster::Math::Float3 destination = ((PortalAttributes*)obj)->destination; + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_SpawnPoint: + { + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_Player: + { + gameObj = new DynamicObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + case ObjectSpecialType_Generic: + { + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + default: + { + gameObj = new StaticObject(rigidBody, Object::DefaultCollisionAfter, (ObjectSpecialType)obj->specialTypeID); + } + break; + } + return gameObj; } -void Level::parsePhysicsObj(LevelLoaderInternal::BoundingVolumeBase* obj) + +ICustomBody* Level::InitRigidBodyCube( const ObjectHeader* obj) { - // offset physObj med modelObj + ICustomBody* rigidBody = NULL; + Oyster::Math::Float3 rigidWorldPos; + Oyster::Math::Float4 rigidWorldRotation; + float rigidBodyMass; + Oyster::Math::Float3 rigidBodySize; + + //offset the rigidPosition from modelspace to worldspace; + rigidWorldPos = (Oyster::Math::Float3)obj->position + (Oyster::Math::Float3)obj->boundingVolume.box.position; + //scales the position so the collision geomentry is in the right place + rigidWorldPos = rigidWorldPos * obj->scale; + + //offset the rigidRotation from modelspace to worldspace; + Oyster::Math::Quaternion worldPosQuaternion = Oyster::Math::Quaternion(Oyster::Math::Float3(obj->rotation[0],obj->rotation[1],obj->rotation[2]), obj->rotation[3]); + Oyster::Math::Quaternion physicsPosQuaternion = Oyster::Math::Quaternion(Oyster::Math::Float3(obj->boundingVolume.sphere.rotation[0],obj->boundingVolume.sphere.rotation[1],obj->boundingVolume.sphere.rotation[2]), obj->boundingVolume.sphere.rotation[3]); + Oyster::Math::Quaternion rigidWorldQuaternion = worldPosQuaternion * physicsPosQuaternion; + + rigidWorldRotation = Oyster::Math::Float4(rigidWorldQuaternion); + + //mass scaled + rigidBodyMass = obj->scale[0] * obj->scale[1] * obj->scale[2] * obj->boundingVolume.box.mass; + + //size scaled + rigidBodySize = (Oyster::Math::Float3)obj->boundingVolume.box.size * (Oyster::Math::Float3)obj->scale; + + //create the rigid body + rigidBody = API::Instance().AddCollisionBox(rigidBodySize , rigidWorldRotation , rigidWorldPos , rigidBodyMass, obj->boundingVolume.box.restitutionCoeff , obj->boundingVolume.box.frictionCoeffStatic , obj->boundingVolume.box.frictionCoeffDynamic); + return rigidBody; +} +ICustomBody* Level::InitRigidBodySphere( const ObjectHeader* obj) +{ + ICustomBody* rigidBody = NULL; + Oyster::Math::Float3 rigidWorldPos; + Oyster::Math::Float4 rigidWorldRotation; + float rigidBodyMass; + float rigidBodyRadius; + + //offset the rigidPosition from modelspace to worldspace; + rigidWorldPos = (Oyster::Math::Float3)obj->position + (Oyster::Math::Float3)obj->boundingVolume.sphere.position; + //scales the position so the collision geomentry is in the right place + rigidWorldPos = rigidWorldPos * obj->scale; + + //offset the rigidRotation from modelspace to worldspace; + Oyster::Math::Quaternion worldPosQuaternion = Oyster::Math::Quaternion(Oyster::Math::Float3(obj->rotation[0],obj->rotation[1],obj->rotation[2]), obj->rotation[3]); + Oyster::Math::Quaternion physicsPosQuaternion = Oyster::Math::Quaternion(Oyster::Math::Float3(obj->boundingVolume.sphere.rotation[0],obj->boundingVolume.sphere.rotation[1],obj->boundingVolume.sphere.rotation[2]), obj->boundingVolume.sphere.rotation[3]); + Oyster::Math::Quaternion rigidWorldQuaternion = worldPosQuaternion * physicsPosQuaternion; + + rigidWorldRotation = Oyster::Math::Float4(rigidWorldQuaternion); + + + //mass scaled + rigidBodyMass = obj->scale[0] * obj->scale[1] * obj->scale[2] * obj->boundingVolume.sphere.mass; + + //Radius scaled + //rigidBodyRadius = (staticObjData->scale[0] * staticObjData->scale[1] * staticObjData->scale[2] / 3) * staticObjData->boundingVolume.sphere.radius; + rigidBodyRadius = (obj->scale[0] * obj->scale[1] * obj->scale[2]) * obj->boundingVolume.sphere.radius; + + //create the rigid body + rigidBody = API::Instance().AddCollisionSphere( rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, obj->boundingVolume.sphere.restitutionCoeff , obj->boundingVolume.sphere.frictionCoeffStatic , obj->boundingVolume.sphere.frictionCoeffDynamic); + return rigidBody; } void Level::InitiateLevel(std::string levelPath) { LevelLoader ll; std::vector> objects; objects = ll.LoadLevel(levelPath); + + API::Instance().SetGravityPoint(Oyster::Math3D::Float3(0,0,0)); + API::Instance().SetGravity(200); int objCount = objects.size(); - int modelCount = 0; - int staticObjCount = 0; - int dynamicObjCount = 0; - Oyster::Math::Float3 rigidWorldPos; - Oyster::Math::Float4 rigidWorldRotation; - float rigidBodyMass; - float rigidBodyRadius; - Oyster::Math::Float3 rigidBodySize; + int modelCount = 100; + for (int i = 0; i < objCount; i++) { ObjectTypeHeader* obj = objects.at(i); @@ -75,69 +217,37 @@ void Level::InitiateLevel(std::string levelPath) { ObjectHeader* staticObjData = ((ObjectHeader*)obj); - //LevelLoaderInternal::BoundingVolumeBase* staticObjPhysicData = ((ObjectHeader*)obj); staticObjData->ModelFile; ICustomBody* rigidBody_Static = NULL; - // collision shape - // radius, rotation in world, position in world, mass, restitution, static and dynamic friction if(staticObjData->boundingVolume.geoType == CollisionGeometryType_Sphere) { - //offset the rigidPosition from modelspace to worldspace; - rigidWorldPos = (Oyster::Math::Float3)staticObjData->position + (Oyster::Math::Float3)staticObjData->boundingVolume.sphere.position; - //scales the position so the collision geomentry is in the right place - rigidWorldPos = rigidWorldPos * staticObjData->scale; - - //offset the rigidRotation from modelspace to worldspace; - rigidWorldRotation = (Oyster::Math::Float4)staticObjData->rotation + (Oyster::Math::Float4)staticObjData->boundingVolume.sphere.rotation; - - //mass scaled - rigidBodyMass = staticObjData->scale[0] * staticObjData->scale[1] * staticObjData->scale[2] * staticObjData->boundingVolume.sphere.mass; - - //Radius scaled - rigidBodyRadius = (staticObjData->scale[0] * staticObjData->scale[1] * staticObjData->scale[2] / 3) * staticObjData->boundingVolume.sphere.radius; - - //create the rigid body - rigidBody_Static = API::Instance().AddCollisionSphere( rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, staticObjData->boundingVolume.sphere.restitutionCoeff , staticObjData->boundingVolume.sphere.frictionCoeffStatic , staticObjData->boundingVolume.sphere.frictionCoeffDynamic); + rigidBody_Static = InitRigidBodySphere(staticObjData); } else if(staticObjData->boundingVolume.geoType == CollisionGeometryType_Box) { - //offset the rigidPosition from modelspace to worldspace; - rigidWorldPos = (Oyster::Math::Float3)staticObjData->position + (Oyster::Math::Float3)staticObjData->boundingVolume.box.position; - //scales the position so the collision geomentry is in the right place - rigidWorldPos = rigidWorldPos * staticObjData->scale; - //offset the rigidRotation from modelspace to worldspace; - rigidWorldRotation = (Oyster::Math::Float4)staticObjData->rotation + (Oyster::Math::Float4)staticObjData->boundingVolume.box.rotation; - - //mass scaled - rigidBodyMass = staticObjData->scale[0] * staticObjData->scale[1] * staticObjData->scale[2] * staticObjData->boundingVolume.box.mass; - - //size scaled - rigidBodySize = (Oyster::Math::Float3)staticObjData->boundingVolume.box.size * (Oyster::Math::Float3)staticObjData->scale; - - //create the rigid body - rigidBody_Static = API::Instance().AddCollisionBox(rigidBodySize , rigidWorldRotation , rigidWorldPos , rigidBodyMass, staticObjData->boundingVolume.box.restitutionCoeff , staticObjData->boundingVolume.box.frictionCoeffStatic , staticObjData->boundingVolume.box.frictionCoeffDynamic); + rigidBody_Static = InitRigidBodySphere(staticObjData); } else if(staticObjData->boundingVolume.geoType == CollisionGeometryType_Cylinder) { - + //rigidBody_Static = InitRigidBodyCylinder(staticObjData); } - - // add rigidbody to the logical obj - // Object::DefaultCollisionBefore, Object::DefaultCollisionAfter for now, gamelogic will take care of this - // set object_type to objID - if(rigidBody_Static != NULL) { - this->staticObjects.Push(new StaticObject(rigidBody_Static, Object::DefaultCollisionAfter, (ObjectSpecialType)staticObjData->specialTypeID)); - this->staticObjects[staticObjCount]->objectID = modelCount++; - rigidBody_Static->SetCustomTag(this->staticObjects[staticObjCount]); + // create game object + Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); + if(staticGameObj != NULL) + { + this->staticObjects.Push((StaticObject*)staticGameObj); + this->staticObjects[this->staticObjects.Size()-1]->objectID = modelCount++; + rigidBody_Static->SetCustomTag(this->staticObjects[this->staticObjects.Size()-1]); + } } } @@ -150,61 +260,31 @@ void Level::InitiateLevel(std::string levelPath) ICustomBody* rigidBody_Dynamic = NULL; // collision shape - // radius, rotation in world, position in world, mass, restitution, static and dynamic friction if(dynamicObjData->boundingVolume.geoType == CollisionGeometryType_Sphere) { - //offset the rigidPosition from modelspace to worldspace; - rigidWorldPos = (Oyster::Math::Float3)dynamicObjData->position + (Oyster::Math::Float3)dynamicObjData->boundingVolume.sphere.position; - //scales the position so the collision geomentry is in the right place - rigidWorldPos = rigidWorldPos * dynamicObjData->scale; - - //offset the rigidRotation from modelspace to worldspace; - rigidWorldRotation = (Oyster::Math::Float4)dynamicObjData->rotation + (Oyster::Math::Float4)dynamicObjData->boundingVolume.sphere.rotation; - - //mass scaled - rigidBodyMass = dynamicObjData->scale[0] * dynamicObjData->scale[1] * dynamicObjData->scale[2] * dynamicObjData->boundingVolume.sphere.mass; - - //size scaled - rigidBodyRadius = (dynamicObjData->scale[0] * dynamicObjData->scale[1] * dynamicObjData->scale[2] / 3) * dynamicObjData->boundingVolume.sphere.radius; - - //create the rigid body - rigidBody_Dynamic = API::Instance().AddCollisionBox(rigidBodyRadius , rigidWorldRotation , rigidWorldPos , rigidBodyMass, dynamicObjData->boundingVolume.sphere.restitutionCoeff , dynamicObjData->boundingVolume.sphere.frictionCoeffStatic , dynamicObjData->boundingVolume.sphere.frictionCoeffDynamic); + rigidBody_Dynamic = InitRigidBodySphere(dynamicObjData); } else if(dynamicObjData->boundingVolume.geoType == CollisionGeometryType_Box) { - //offset the rigidPosition from modelspace to worldspace; - rigidWorldPos = (Oyster::Math::Float3)dynamicObjData->position + (Oyster::Math::Float3)dynamicObjData->boundingVolume.box.position; - //scales the position so the collision geomentry is in the right place - rigidWorldPos = rigidWorldPos * dynamicObjData->scale; - - //offset the rigidRotation from modelspace to worldspace; - rigidWorldRotation = (Oyster::Math::Float4)dynamicObjData->rotation + (Oyster::Math::Float4)dynamicObjData->boundingVolume.box.rotation; - - //mass scaled - rigidBodyMass = dynamicObjData->scale[0] * dynamicObjData->scale[1] * dynamicObjData->scale[2] * dynamicObjData->boundingVolume.box.mass; - - //size scaled - rigidBodySize = (Oyster::Math::Float3)dynamicObjData->boundingVolume.box.size * (Oyster::Math::Float3)dynamicObjData->scale; - - //create the rigid body - rigidBody_Dynamic = API::Instance().AddCollisionBox(rigidBodySize , rigidWorldRotation , rigidWorldPos , rigidBodyMass, dynamicObjData->boundingVolume.box.restitutionCoeff , dynamicObjData->boundingVolume.box.frictionCoeffStatic , dynamicObjData->boundingVolume.box.frictionCoeffDynamic); + rigidBody_Dynamic = InitRigidBodyCube(dynamicObjData); } else if(dynamicObjData->boundingVolume.geoType == CollisionGeometryType_Cylinder) { - + //rigidBody_Dynamic = InitRigidBodyCylinder(dynamicObjData); } - - // add rigidbody to the logical obj - // Object::DefaultCollisionBefore, Object::DefaultCollisionAfter for now, gamelogic will take care of this - // set object_type to objID if(rigidBody_Dynamic != NULL) { - this->dynamicObjects.Push(new DynamicObject(rigidBody_Dynamic , Object::DefaultCollisionAfter, (ObjectSpecialType)dynamicObjData->specialTypeID)); - this->dynamicObjects[dynamicObjCount]->objectID = modelCount++; - rigidBody_Dynamic->SetCustomTag(this->dynamicObjects[dynamicObjCount]); + // create game object + Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); + if (dynamicGameObj != NULL) + { + this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); + this->dynamicObjects[this->dynamicObjects.Size()-1]->objectID = modelCount++; + rigidBody_Dynamic->SetCustomTag(this->dynamicObjects[this->dynamicObjects.Size()-1]); + } } } diff --git a/Code/Game/GameLogic/Level.h b/Code/Game/GameLogic/Level.h index b8c3f744..c069ac1e 100644 --- a/Code/Game/GameLogic/Level.h +++ b/Code/Game/GameLogic/Level.h @@ -32,9 +32,10 @@ namespace GameLogic ********************************************************/ void InitiateLevel(std::string levelPath); void InitiateLevel(float radius); + Oyster::Physics::ICustomBody* InitRigidBodyCube( const ObjectHeader* obj); + Oyster::Physics::ICustomBody* InitRigidBodySphere( const ObjectHeader* obj); - void parseObjectType(ObjectTypeHeader* obj); - void parsePhysicsObj(LevelLoaderInternal::BoundingVolumeBase* obj); + Object* createGameObj(ObjectHeader* obj, Oyster::Physics::ICustomBody* rigidBody); /******************************************************** * Creates a team in the level * @param teamSize: The size of the team you want to create diff --git a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp index 54c41b12..1caa840f 100644 --- a/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp +++ b/Code/Game/GameLogic/LevelLoader/ParseFunctions.cpp @@ -149,7 +149,7 @@ namespace GameLogic //Läs in filen. int fileLength = 0; Loader loader; - char* buf = loader.LoadFile("C:/Users/Sam/Documents/GitHub/Danbias/Bin/Content/worlds/cgf/"+ fileName, fileLength); + char* buf = loader.LoadFile("../Content/Worlds/cgf/"+ fileName, fileLength); start = 0; LevelLoaderInternal::FormatVersion version; diff --git a/Code/Game/GameLogic/Portal.cpp b/Code/Game/GameLogic/Portal.cpp index ac44d529..6fc787fa 100644 --- a/Code/Game/GameLogic/Portal.cpp +++ b/Code/Game/GameLogic/Portal.cpp @@ -9,7 +9,7 @@ Portal::Portal(void) 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), OBJECT_TYPE type, Oyster::Math::Float3 portalExit) +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) { this->portalExit = portalExit; diff --git a/Code/Game/GameLogic/Portal.h b/Code/Game/GameLogic/Portal.h index 5b31c8b5..a8d308f4 100644 --- a/Code/Game/GameLogic/Portal.h +++ b/Code/Game/GameLogic/Portal.h @@ -10,7 +10,7 @@ namespace GameLogic Portal(Oyster::Physics::ICustomBody *rigidBody ,void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) - ,OBJECT_TYPE type, Oyster::Math::Float3 portalExit); + ,ObjectSpecialType type, Oyster::Math::Float3 portalExit); ~Portal(void); From 06ae4d29dd0f161e021ed6a97eb207560d21e76c Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Fri, 14 Feb 2014 09:44:21 +0100 Subject: [PATCH 2/3] GL - Fixed some warnings. --- .../GameClientState/Buttons/ButtonEllipse.h | 12 ++++++++---- .../GameClientState/Buttons/ButtonRectangle.h | 12 ++++++++---- .../GameClientState/Buttons/EventButtonGUI.h | 9 ++++++--- Code/Misc/EventHandler/EventButtonCollection.cpp | 2 +- Code/Misc/EventHandler/EventHandler.cpp | 4 ++-- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h index a922f141..694683e7 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonEllipse.h @@ -21,16 +21,20 @@ namespace DanBias ButtonEllipse() : 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) {} - 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) {} - 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) {} - 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) {} virtual ~ButtonEllipse() diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h index a0b3e94b..6afb77c1 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/ButtonRectangle.h @@ -21,16 +21,20 @@ namespace DanBias ButtonRectangle() : 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) {} - 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) {} - 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) {} - 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) {} virtual ~ButtonRectangle() diff --git a/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h b/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h index d4884fd7..c6cde0ea 100644 --- a/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h +++ b/Code/Game/DanBiasGame/GameClientState/Buttons/EventButtonGUI.h @@ -35,19 +35,22 @@ namespace DanBias EventButtonGUI() : 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) { CreateTexture(textureName); 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) { CreateTexture(textureName); 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) { CreateTexture(textureName); diff --git a/Code/Misc/EventHandler/EventButtonCollection.cpp b/Code/Misc/EventHandler/EventButtonCollection.cpp index 72d0ba24..bb3a3461 100644 --- a/Code/Misc/EventHandler/EventButtonCollection.cpp +++ b/Code/Misc/EventHandler/EventButtonCollection.cpp @@ -15,7 +15,7 @@ EventButtonCollection::EventButtonCollection(EventCollectionState state) 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) { diff --git a/Code/Misc/EventHandler/EventHandler.cpp b/Code/Misc/EventHandler/EventHandler.cpp index 24dca38a..2309070e 100644 --- a/Code/Misc/EventHandler/EventHandler.cpp +++ b/Code/Misc/EventHandler/EventHandler.cpp @@ -53,7 +53,7 @@ void EventHandler::RenderText() 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. if(collections.at(i) == collection) @@ -64,7 +64,7 @@ void EventHandler::AddCollection(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) { From 59697bfcea613155e719a810ee86837d91328e59 Mon Sep 17 00:00:00 2001 From: Erik Persson Date: Fri, 14 Feb 2014 09:53:02 +0100 Subject: [PATCH 3/3] GL - fixed constructors to ease creation of objects, also fixed weapon crash on destruction --- Code/Game/DanBiasGame/DanBiasGame_Impl.cpp | 10 +-- .../DanBiasGame/GameClientState/GameState.cpp | 1 - Code/Game/GameLogic/AttatchmentSocket.cpp | 6 +- Code/Game/GameLogic/CollisionManager.cpp | 86 ++++++++++++++++--- Code/Game/GameLogic/CrystalFormation.cpp | 9 +- Code/Game/GameLogic/CrystalFormation.h | 7 +- Code/Game/GameLogic/DynamicObject.cpp | 25 ++---- Code/Game/GameLogic/DynamicObject.h | 8 +- Code/Game/GameLogic/ExplosiveCrate.cpp | 29 +++++++ Code/Game/GameLogic/ExplosiveCrate.h | 24 ++++++ Code/Game/GameLogic/Game.cpp | 1 + Code/Game/GameLogic/GameLogic.vcxproj | 4 + Code/Game/GameLogic/GameLogicStates.h | 6 ++ Code/Game/GameLogic/Game_PlayerData.cpp | 3 +- Code/Game/GameLogic/JumpPad.cpp | 4 +- Code/Game/GameLogic/JumpPad.h | 5 +- Code/Game/GameLogic/Level.cpp | 42 ++++----- .../GameLogic/LevelLoader/LevelParser.cpp | 2 +- .../GameLogic/LevelLoader/ObjectDefines.h | 2 +- Code/Game/GameLogic/Object.cpp | 41 ++------- Code/Game/GameLogic/Object.h | 15 ++-- Code/Game/GameLogic/Player.cpp | 59 +++++++------ Code/Game/GameLogic/Player.h | 13 ++- Code/Game/GameLogic/Portal.cpp | 5 ++ Code/Game/GameLogic/Portal.h | 4 +- Code/Game/GameLogic/StaticObject.cpp | 27 ++---- Code/Game/GameLogic/StaticObject.h | 7 +- Code/Game/GameLogic/Weapon.cpp | 14 ++- 28 files changed, 264 insertions(+), 195 deletions(-) create mode 100644 Code/Game/GameLogic/ExplosiveCrate.cpp create mode 100644 Code/Game/GameLogic/ExplosiveCrate.h diff --git a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp index c1a893ee..3d601691 100644 --- a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp +++ b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp @@ -211,6 +211,10 @@ namespace DanBias HRESULT DanBiasGame::CleanUp() { + Oyster::Graphics::API::Clean(); + EventHandler::Instance().Clean(); + GameServerAPI::ServerStop(); + m_data->recieverObj->gameClientState->Release(); delete m_data->recieverObj->gameClientState; m_data->recieverObj->Disconnect(); @@ -218,11 +222,7 @@ namespace DanBias delete m_data->inputObj; delete m_data; - EventHandler::Instance().Clean(); - - Oyster::Graphics::API::Clean(); - - GameServerAPI::ServerStop(); + return S_OK; } diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.cpp b/Code/Game/DanBiasGame/GameClientState/GameState.cpp index 0a732062..b060b539 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/GameState.cpp @@ -80,7 +80,6 @@ GameState::gameStateState GameState::LoadGame() LoadModels("../Content/Worlds/ccc.bias"); // hardcoded objects - //LoadModels(); Float3 startPos = Float3(0,0,20.0f); InitCamera(startPos); return gameStateState_playing; diff --git a/Code/Game/GameLogic/AttatchmentSocket.cpp b/Code/Game/GameLogic/AttatchmentSocket.cpp index 453387fe..7a8076b1 100644 --- a/Code/Game/GameLogic/AttatchmentSocket.cpp +++ b/Code/Game/GameLogic/AttatchmentSocket.cpp @@ -14,10 +14,10 @@ AttatchmentSocket::AttatchmentSocket(void) AttatchmentSocket::~AttatchmentSocket(void) { - //if(this->attatchment) - //delete this->attatchment; + if(this->attatchment) + delete this->attatchment; - //this->attatchment = 0; + this->attatchment = 0; } IAttatchment* AttatchmentSocket::GetAttatchment() diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index c3b70cce..e254b93b 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -8,12 +8,15 @@ #include "CollisionManager.h" #include "JumpPad.h" #include "Portal.h" +#include "CrystalFormation.h" +#include "ExplosiveCrate.h" using namespace Oyster; using namespace GameLogic; 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 Teleport(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 target); @@ -26,18 +29,27 @@ using namespace GameLogic; switch (realObj->GetObjectType()) { - case ObjectSpecialType_StandarsBox: + case ObjectSpecialType::ObjectSpecialType_Generic: PlayerVObject(*player,*realObj, kineticEnergyLoss); //return Physics::ICustomBody::SubscriptMessage_none; break; - case ObjectSpecialType_Player: + + case ObjectSpecialType::ObjectSpecialType_StandardBox: + PlayerVObject(*player,*realObj, kineticEnergyLoss); //return Physics::ICustomBody::SubscriptMessage_none; break; - case ObjectSpecialType_World: + case ObjectSpecialType::ObjectSpecialType_Player: + //return Physics::ICustomBody::SubscriptMessage_none; + break; + case ObjectSpecialType::ObjectSpecialType_World: PlayerVObject(*player,*realObj, kineticEnergyLoss); //player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING; 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; @@ -50,14 +62,13 @@ using namespace GameLogic; switch (realObj->GetObjectType()) { - case ObjectSpecialType_Generic: + case ObjectSpecialType::ObjectSpecialType_Generic: break; - case ObjectSpecialType_StandarsBox: - break; - case ObjectSpecialType_Player: + case ObjectSpecialType::ObjectSpecialType_StandardBox: SendObjectFlying(*obj, jumpPad->pushForce); break; - case ObjectSpecialType_World: + case ObjectSpecialType::ObjectSpecialType_Player: + SendObjectFlying(*obj, jumpPad->pushForce); break; } } @@ -80,7 +91,44 @@ using namespace GameLogic; { 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) { @@ -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) { return Physics::ICustomBody::SubscriptMessage_none; @@ -123,7 +185,7 @@ using namespace GameLogic; 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; obj->ApplyImpulse(((forcePushData*)(args))->pushForce); @@ -146,9 +208,7 @@ using namespace GameLogic; switch(realObj->GetObjectType()) { - case ObjectSpecialType_StandarsBox: - //move obj to limbo in physics to make sure it wont collide with anything -// Oyster::Physics::API::Instance().MoveToLimbo(obj); + case ObjectSpecialType::ObjectSpecialType_StandardBox: weapon->heldObject = obj; //weapon now holds the object weapon->hasObject = true; diff --git a/Code/Game/GameLogic/CrystalFormation.cpp b/Code/Game/GameLogic/CrystalFormation.cpp index 00709660..e9c6dd73 100644 --- a/Code/Game/GameLogic/CrystalFormation.cpp +++ b/Code/Game/GameLogic/CrystalFormation.cpp @@ -8,8 +8,8 @@ CrystalFormation::CrystalFormation(void) 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) - :StaticObject(rigidBody, collisionFuncAfter, type) +CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, int objectID,Oyster::Math::Float shreddingDamage) + :StaticObject(rigidBody, CrystalFormation::DefaultCollisionAfter, ObjectSpecialType::ObjectSpecialType_CrystalFormation, objectID) { this->shreddingDamage = shreddingDamage; } @@ -18,3 +18,8 @@ CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, void CrystalFormation::~CrystalFormation(void) { } + +Oyster::Math::Float CrystalFormation::getShreddingDamage() +{ + return this->shreddingDamage; +} diff --git a/Code/Game/GameLogic/CrystalFormation.h b/Code/Game/GameLogic/CrystalFormation.h index 693460fe..6e07942b 100644 --- a/Code/Game/GameLogic/CrystalFormation.h +++ b/Code/Game/GameLogic/CrystalFormation.h @@ -8,12 +8,13 @@ namespace GameLogic public: CrystalFormation(void); - 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(Oyster::Physics::ICustomBody *rigidBody + ,int objectID,Oyster::Math::Float shreddingDamage); ~CrystalFormation(void); + Oyster::Math::Float getShreddingDamage(); + private: Oyster::Math::Float shreddingDamage; }; diff --git a/Code/Game/GameLogic/DynamicObject.cpp b/Code/Game/GameLogic/DynamicObject.cpp index b6193f30..8096b4aa 100644 --- a/Code/Game/GameLogic/DynamicObject.cpp +++ b/Code/Game/GameLogic/DynamicObject.cpp @@ -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) - :Object(rigidBody,type) -{ - -} - -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) +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, EventOnCollision, type, objectID) { } diff --git a/Code/Game/GameLogic/DynamicObject.h b/Code/Game/GameLogic/DynamicObject.h index e8aa25ce..3341e94d 100644 --- a/Code/Game/GameLogic/DynamicObject.h +++ b/Code/Game/GameLogic/DynamicObject.h @@ -14,12 +14,8 @@ namespace GameLogic public: DynamicObject(); - - DynamicObject(ObjectSpecialType type); - 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(Oyster::Physics::ICustomBody *rigidBody , void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID); + 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(void); diff --git a/Code/Game/GameLogic/ExplosiveCrate.cpp b/Code/Game/GameLogic/ExplosiveCrate.cpp new file mode 100644 index 00000000..534fd6bb --- /dev/null +++ b/Code/Game/GameLogic/ExplosiveCrate.cpp @@ -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) +{ + +} + + + + + diff --git a/Code/Game/GameLogic/ExplosiveCrate.h b/Code/Game/GameLogic/ExplosiveCrate.h new file mode 100644 index 00000000..3cf0c9a4 --- /dev/null +++ b/Code/Game/GameLogic/ExplosiveCrate.h @@ -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 \ No newline at end of file diff --git a/Code/Game/GameLogic/Game.cpp b/Code/Game/GameLogic/Game.cpp index 5bf18dc4..900799e3 100644 --- a/Code/Game/GameLogic/Game.cpp +++ b/Code/Game/GameLogic/Game.cpp @@ -84,6 +84,7 @@ Game::LevelData* Game::CreateLevel() //this->level->level->InitiateLevel(1000); this->level->level->InitiateLevel("../Content/Worlds/ccc.bias"); + return this->level; } diff --git a/Code/Game/GameLogic/GameLogic.vcxproj b/Code/Game/GameLogic/GameLogic.vcxproj index b19ffef0..48af6d60 100644 --- a/Code/Game/GameLogic/GameLogic.vcxproj +++ b/Code/Game/GameLogic/GameLogic.vcxproj @@ -176,7 +176,9 @@ + + @@ -202,7 +204,9 @@ + + diff --git a/Code/Game/GameLogic/GameLogicStates.h b/Code/Game/GameLogic/GameLogicStates.h index 9ae0d482..3e9bcdf5 100644 --- a/Code/Game/GameLogic/GameLogicStates.h +++ b/Code/Game/GameLogic/GameLogicStates.h @@ -43,6 +43,12 @@ namespace GameLogic Oyster::Math::Float3 pushForce; }; + struct ExplosionData + { + Oyster::Math::Float3 pushForce; + Oyster::Math::Float3 ShreddingDamage; + }; + }; diff --git a/Code/Game/GameLogic/Game_PlayerData.cpp b/Code/Game/GameLogic/Game_PlayerData.cpp index acdcd2f3..30082130 100644 --- a/Code/Game/GameLogic/Game_PlayerData.cpp +++ b/Code/Game/GameLogic/Game_PlayerData.cpp @@ -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 ); rigidBody->SetAngularFactor(0.0f); //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); player->EndFrame(); } Game::PlayerData::PlayerData(int playerID,int teamID) { + Oyster::Physics::ICustomBody* rigidBody; this->player = new Player(); } Game::PlayerData::~PlayerData() diff --git a/Code/Game/GameLogic/JumpPad.cpp b/Code/Game/GameLogic/JumpPad.cpp index d52acb45..424340ad 100644 --- a/Code/Game/GameLogic/JumpPad.cpp +++ b/Code/Game/GameLogic/JumpPad.cpp @@ -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) - :StaticObject(rigidBody, collisionFuncAfter, type) +JumpPad::JumpPad(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type,int objectID ,Oyster::Math::Float3 pushForce) + :StaticObject(rigidBody, JumpPad::JumpPadActivated, type, objectID) { this->pushForce = pushForce; } diff --git a/Code/Game/GameLogic/JumpPad.h b/Code/Game/GameLogic/JumpPad.h index 4fad54e4..a88a0cc5 100644 --- a/Code/Game/GameLogic/JumpPad.h +++ b/Code/Game/GameLogic/JumpPad.h @@ -8,9 +8,8 @@ namespace GameLogic public: JumpPad(void); - 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(Oyster::Physics::ICustomBody *rigidBody + ,ObjectSpecialType type, int objectID,Oyster::Math::Float3 pushForce); ~JumpPad(void); diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 9a91744e..1184cc49 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -240,14 +240,9 @@ void Level::InitiateLevel(std::string levelPath) if(rigidBody_Static != NULL) { - // create game object - Object* staticGameObj = createGameObj(staticObjData, rigidBody_Static); - if(staticGameObj != NULL) - { - this->staticObjects.Push((StaticObject*)staticGameObj); - this->staticObjects[this->staticObjects.Size()-1]->objectID = modelCount++; - 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++; + } } @@ -277,14 +272,9 @@ void Level::InitiateLevel(std::string levelPath) if(rigidBody_Dynamic != NULL) { - // create game object - Object* dynamicGameObj = createGameObj(dynamicObjData, rigidBody_Dynamic); - if (dynamicGameObj != NULL) - { - this->dynamicObjects.Push((DynamicObject*)dynamicGameObj); - this->dynamicObjects[this->dynamicObjects.Size()-1]->objectID = modelCount++; - rigidBody_Dynamic->SetCustomTag(this->dynamicObjects[this->dynamicObjects.Size()-1]); - } + + this->dynamicObjects.Push(new DynamicObject(rigidBody_Dynamic , Object::DefaultCollisionAfter, (ObjectSpecialType)dynamicObjData->specialTypeID, 0)); + //this->dynamicObjects[dynamicObjCount]->objectID = modelCount++; } } @@ -305,9 +295,9 @@ void Level::InitiateLevel(float radius) // 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); - 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); @@ -319,9 +309,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); - 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]); } /*offset += nrOfBoxex; @@ -358,24 +348,24 @@ void Level::InitiateLevel(float radius) // 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); - 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]); - this->dynamicObjects[nrOfBoxex]->objectID = idCount++; + //this->dynamicObjects[nrOfBoxex]->objectID = idCount++; // 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); - 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]); - this->staticObjects[0]->objectID = idCount++; + //this->staticObjects[0]->objectID = idCount++; // 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); - 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]); - this->staticObjects[1]->objectID = idCount++; + //this->staticObjects[1]->objectID = idCount++; } void Level::AddPlayerToTeam(Player *player, int teamID) diff --git a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp b/Code/Game/GameLogic/LevelLoader/LevelParser.cpp index c5dfa8cc..038b9a40 100644 --- a/Code/Game/GameLogic/LevelLoader/LevelParser.cpp +++ b/Code/Game/GameLogic/LevelLoader/LevelParser.cpp @@ -75,7 +75,7 @@ std::vector> LevelParser::Parse(std::string filen case ObjectSpecialType_Spike: case ObjectSpecialType_SpikeBox: case ObjectSpecialType_RedExplosiveBox: - case ObjectSpecialType_StandarsBox: + case ObjectSpecialType_StandardBox: case ObjectSpecialType_Stone: case ObjectSpecialType_Building: { diff --git a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h b/Code/Game/GameLogic/LevelLoader/ObjectDefines.h index 4cf34366..50c722b6 100644 --- a/Code/Game/GameLogic/LevelLoader/ObjectDefines.h +++ b/Code/Game/GameLogic/LevelLoader/ObjectDefines.h @@ -30,7 +30,7 @@ namespace GameLogic ObjectSpecialType_World, //Always the main celestial body ObjectSpecialType_Building, ObjectSpecialType_Stone, - ObjectSpecialType_StandarsBox, + ObjectSpecialType_StandardBox, ObjectSpecialType_RedExplosiveBox, ObjectSpecialType_SpikeBox, ObjectSpecialType_Spike, diff --git a/Code/Game/GameLogic/Object.cpp b/Code/Game/GameLogic/Object.cpp index 80ff0ad6..cfd2d255 100644 --- a/Code/Game/GameLogic/Object.cpp +++ b/Code/Game/GameLogic/Object.cpp @@ -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->type = ObjectSpecialType_Unknown; - this->objectID = GID(); + this->objectID = -1; } -Object::Object(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, 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) +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 = rigidBody; this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter)); 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->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter)); this->type = type; - this->objectID = GID(); + this->objectID = objectID; + this->rigidBody->SetCustomTag(this); } -void Object::ApplyLinearImpulse(Oyster::Math::Float3 force) -{ - -} - - Object::~Object(void) { diff --git a/Code/Game/GameLogic/Object.h b/Code/Game/GameLogic/Object.h index 83e12277..7e7e3f08 100644 --- a/Code/Game/GameLogic/Object.h +++ b/Code/Game/GameLogic/Object.h @@ -18,11 +18,9 @@ namespace GameLogic { public: Object(); - Object(ObjectSpecialType type); - Object(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); - Object(void* collisionFuncAfter, ObjectSpecialType type); - 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(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID); + 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(void); ObjectSpecialType GetObjectType() const override; @@ -38,7 +36,6 @@ namespace GameLogic Oyster::Physics::ICustomBody* GetRigidBody(); - void ApplyLinearImpulse(Oyster::Math::Float3 force); virtual void BeginFrame(); virtual void EndFrame(); @@ -50,8 +47,7 @@ namespace GameLogic public: //TODO: Hax This should be private when level is dynamic - ObjectSpecialType type; - int objectID; + protected: Oyster::Physics::ICustomBody *rigidBody; @@ -59,6 +55,9 @@ namespace GameLogic static const Game* gameInstance; Oyster::Math::Float3 currLook; Oyster::Math::Float3 newLook; + + ObjectSpecialType type; + int objectID; }; } diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index f6dddb85..3b022220 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -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) - :DynamicObject(collisionFuncAfter,type) -{ - 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() +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(rigidBody, EventOnCollision, type, objectID) { weapon = new Weapon(2,this); @@ -55,6 +30,36 @@ void Player::InitPlayer() 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) { if(weapon) diff --git a/Code/Game/GameLogic/Player.h b/Code/Game/GameLogic/Player.h index b10d1114..17ad2095 100644 --- a/Code/Game/GameLogic/Player.h +++ b/Code/Game/GameLogic/Player.h @@ -16,15 +16,12 @@ namespace GameLogic { public: Player(void); - Player(ObjectSpecialType type); - Player(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); - Player( void* collisionFuncAfter, ObjectSpecialType type); - 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(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(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(void); - void InitPlayer(); - + /******************************************************** * Moves the player based on input * @param movement: enum value on what kind of action is to be taken @@ -81,7 +78,7 @@ namespace GameLogic void Jump(); private: - int life; + Oyster::Math::Float life; int teamID; Weapon *weapon; PLAYER_STATE playerState; diff --git a/Code/Game/GameLogic/Portal.cpp b/Code/Game/GameLogic/Portal.cpp index 6fc787fa..66671a8d 100644 --- a/Code/Game/GameLogic/Portal.cpp +++ b/Code/Game/GameLogic/Portal.cpp @@ -9,8 +9,13 @@ Portal::Portal(void) this->portalExit = Float3(0,0,0); } +<<<<<<< HEAD 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) +>>>>>>> GL - fixed constructors to ease creation of objects, also fixed weapon crash on destruction { this->portalExit = portalExit; } diff --git a/Code/Game/GameLogic/Portal.h b/Code/Game/GameLogic/Portal.h index a8d308f4..ab88d934 100644 --- a/Code/Game/GameLogic/Portal.h +++ b/Code/Game/GameLogic/Portal.h @@ -9,8 +9,8 @@ namespace GameLogic Portal(void); 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); + ,void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) + ,ObjectSpecialType type,int objectID ,Oyster::Math::Float3 portalExit); ~Portal(void); diff --git a/Code/Game/GameLogic/StaticObject.cpp b/Code/Game/GameLogic/StaticObject.cpp index f9156e3c..68140cbe 100644 --- a/Code/Game/GameLogic/StaticObject.cpp +++ b/Code/Game/GameLogic/StaticObject.cpp @@ -10,32 +10,17 @@ StaticObject::StaticObject() { } -StaticObject::StaticObject(ObjectSpecialType type) - :Object(type) -{ -} -StaticObject::StaticObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type) - :Object(rigidBody,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) + :Object(rigidBody, EventOnCollision, type, objectID) { - //this->rigidBody->SetGravity(true); - //this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_BeforeCollisionResponse)(CollisionManager::IgnoreCollision)); + //use setMass(when it is made) and set the mass to 0 in order to ensure that the object is static } -StaticObject::StaticObject( void* collisionFuncAfter, ObjectSpecialType type) - :Object(collisionFuncAfter,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(rigidBody, EventOnCollision, type, objectID) { - -} -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) -{ - + //use setMass(when it is made) and set the mass to 0 in order to ensure that the object is static } StaticObject::~StaticObject(void) diff --git a/Code/Game/GameLogic/StaticObject.h b/Code/Game/GameLogic/StaticObject.h index 4e655808..a7b9fbff 100644 --- a/Code/Game/GameLogic/StaticObject.h +++ b/Code/Game/GameLogic/StaticObject.h @@ -18,11 +18,8 @@ namespace GameLogic public: StaticObject(); - StaticObject(ObjectSpecialType type); - StaticObject(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type); - 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(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 , Oyster::Physics::ICustomBody::SubscriptMessage (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, int objectID); ~StaticObject(void); diff --git a/Code/Game/GameLogic/Weapon.cpp b/Code/Game/GameLogic/Weapon.cpp index 66de8e33..379f53dc 100644 --- a/Code/Game/GameLogic/Weapon.cpp +++ b/Code/Game/GameLogic/Weapon.cpp @@ -19,7 +19,11 @@ Weapon::Weapon() Weapon::Weapon(int MaxNrOfSockets,Player *owner) { attatchmentSockets.Resize(MaxNrOfSockets); - attatchmentSockets[0] = new AttatchmentSocket(); + for(int i = 0; i < MaxNrOfSockets; i++) + { + attatchmentSockets[i] = new AttatchmentSocket(); + } + weaponState = WEAPON_STATE_IDLE; currentNrOfAttatchments = 0; @@ -38,8 +42,12 @@ Weapon::~Weapon(void) { for (unsigned int i = 0; i < this->attatchmentSockets.Size(); i++) { - delete this->attatchmentSockets[i]; - this->attatchmentSockets[i] = 0; + if(this->attatchmentSockets[i]) + { + delete this->attatchmentSockets[i]; + this->attatchmentSockets[i] = 0; + } + } }