diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp
index e254b93b..80562b2c 100644
--- a/Code/Game/GameLogic/CollisionManager.cpp
+++ b/Code/Game/GameLogic/CollisionManager.cpp
@@ -8,7 +8,6 @@
#include "CollisionManager.h"
#include "JumpPad.h"
#include "Portal.h"
-#include "CrystalFormation.h"
#include "ExplosiveCrate.h"
using namespace Oyster;
@@ -47,7 +46,7 @@ using namespace GameLogic;
break;
case ObjectSpecialType::ObjectSpecialType_CrystalFormation:
- PlayerVLethalObject(*player,*realObj, kineticEnergyLoss,((CrystalFormation*)realObj)->getShreddingDamage());
+ PlayerVLethalObject(*player,*realObj, kineticEnergyLoss,realObj->getExtraDamageOnCollision());
//player->playerState = PLAYER_STATE::PLAYER_STATE_WALKING;
break;
}
@@ -97,7 +96,6 @@ using namespace GameLogic;
int forceThreashHold = 200000; //how much force for the box to explode of the impact
-
if(kineticEnergyLoss > forceThreashHold)
{
ExplosiveCrate* crate = ((ExplosiveCrate*)rigidBodyCrate->GetCustomTag());
@@ -117,16 +115,19 @@ using namespace GameLogic;
Object *realObj = (Object*)obj->GetCustomTag();
ExplosiveCrate* ExplosionSource = ((ExplosiveCrate*)args);
-
+ Oyster::Math::Float3 explosionCenterPos = ExplosionSource->GetPosition();
+ Oyster::Math::Float3 hitObjectPos = obj->GetState().centerPos;
+ Oyster::Math::Float3 force = (((hitObjectPos- explosionCenterPos).GetNormalized()) * ExplosionSource->pushForceMagnitude);
+
if(realObj->GetObjectType() == ObjectSpecialType::ObjectSpecialType_Player)
{
Player *hitPlayer = (Player*)realObj;
- hitPlayer->DamageLife(ExplosionSource->shreddingDamage);
+ hitPlayer->DamageLife(ExplosionSource->getExtraDamageOnCollision());
//do shredding damage
}
- realObj->GetRigidBody()->ApplyImpulse(ExplosionSource->pushForce);
+ realObj->GetRigidBody()->ApplyImpulse(force);
}
diff --git a/Code/Game/GameLogic/CrystalFormation.cpp b/Code/Game/GameLogic/CrystalFormation.cpp
deleted file mode 100644
index e9c6dd73..00000000
--- a/Code/Game/GameLogic/CrystalFormation.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "CrystalFormation.h"
-
-using namespace GameLogic;
-
-CrystalFormation::CrystalFormation(void)
- :StaticObject()
-{
- this->shreddingDamage = 0;
-}
-
-CrystalFormation::CrystalFormation(Oyster::Physics::ICustomBody *rigidBody, int objectID,Oyster::Math::Float shreddingDamage)
- :StaticObject(rigidBody, CrystalFormation::DefaultCollisionAfter, ObjectSpecialType::ObjectSpecialType_CrystalFormation, objectID)
-{
- this->shreddingDamage = shreddingDamage;
-}
-
-
-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
deleted file mode 100644
index 6e07942b..00000000
--- a/Code/Game/GameLogic/CrystalFormation.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef CRYSTALFORMATION_H
-#define CRYSTALFORMATION_H
-#include "StaticObject.h"
-namespace GameLogic
-{
- class CrystalFormation : public StaticObject
- {
- public:
- CrystalFormation(void);
-
- CrystalFormation(Oyster::Physics::ICustomBody *rigidBody
- ,int objectID,Oyster::Math::Float shreddingDamage);
-
- ~CrystalFormation(void);
-
- Oyster::Math::Float getShreddingDamage();
-
- private:
- Oyster::Math::Float shreddingDamage;
- };
-}
-#endif
\ No newline at end of file
diff --git a/Code/Game/GameLogic/ExplosiveCrate.cpp b/Code/Game/GameLogic/ExplosiveCrate.cpp
index 534fd6bb..d236d400 100644
--- a/Code/Game/GameLogic/ExplosiveCrate.cpp
+++ b/Code/Game/GameLogic/ExplosiveCrate.cpp
@@ -5,16 +5,15 @@ using namespace GameLogic;
ExplosiveCrate::ExplosiveCrate(void)
:DynamicObject()
{
- this->shreddingDamage = 0;
- this->pushForce = 0;
+ this->pushForceMagnitude = 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)
+ExplosiveCrate::ExplosiveCrate(Oyster::Physics::ICustomBody *rigidBody,ObjectSpecialType type, int objectID,Oyster::Math::Float extraDamageOnCollision, Oyster::Math::Float pushForceMagnitude, Oyster::Math::Float ExplosionRadius)
:DynamicObject(rigidBody,ExplosiveCrate::ExplosiveCrateCollision, type, objectID)
{
- this->shreddingDamage = shreddingDamage;
- this->pushForce = pushForce;
+ this->extraDamageOnCollision = extraDamageOnCollision;
+ this->pushForceMagnitude = pushForceMagnitude;
this->ExplosionRadius = ExplosionRadius;
}
diff --git a/Code/Game/GameLogic/ExplosiveCrate.h b/Code/Game/GameLogic/ExplosiveCrate.h
index 3cf0c9a4..75afdc4a 100644
--- a/Code/Game/GameLogic/ExplosiveCrate.h
+++ b/Code/Game/GameLogic/ExplosiveCrate.h
@@ -8,7 +8,7 @@ namespace GameLogic
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(Oyster::Physics::ICustomBody *rigidBody,ObjectSpecialType type,int objectID,Oyster::Math::Float extraDamageOnCollision, Oyster::Math::Float pushForceMagnitude, Oyster::Math::Float ExplosionRadius);
~ExplosiveCrate(void);
@@ -16,9 +16,10 @@ namespace GameLogic
static void Explode(Oyster::Physics::ICustomBody *obj, void* args);
private:
- Oyster::Math::Float shreddingDamage;
- Oyster::Math::Float3 pushForce;
+ Oyster::Math::Float pushForceMagnitude;
Oyster::Math::Float ExplosionRadius;
};
+
+
}
#endif
\ No newline at end of file
diff --git a/Code/Game/GameLogic/GameLogic.vcxproj b/Code/Game/GameLogic/GameLogic.vcxproj
index 48af6d60..6c026917 100644
--- a/Code/Game/GameLogic/GameLogic.vcxproj
+++ b/Code/Game/GameLogic/GameLogic.vcxproj
@@ -176,7 +176,6 @@
-
@@ -204,7 +203,6 @@
-
diff --git a/Code/Game/GameLogic/GameLogicStates.h b/Code/Game/GameLogic/GameLogicStates.h
index 3e9bcdf5..9ae0d482 100644
--- a/Code/Game/GameLogic/GameLogicStates.h
+++ b/Code/Game/GameLogic/GameLogicStates.h
@@ -43,12 +43,6 @@ namespace GameLogic
Oyster::Math::Float3 pushForce;
};
- struct ExplosionData
- {
- Oyster::Math::Float3 pushForce;
- Oyster::Math::Float3 ShreddingDamage;
- };
-
};
diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp
index 718ef84a..31c04e19 100644
--- a/Code/Game/GameLogic/Level.cpp
+++ b/Code/Game/GameLogic/Level.cpp
@@ -2,7 +2,6 @@
#include "CollisionManager.h"
#include "Game.h"
#include "JumpPad.h"
-#include "CrystalFormation.h"
#include "ExplosiveCrate.h"
#include "Portal.h"
using namespace GameLogic;
diff --git a/Code/Game/GameLogic/Object.cpp b/Code/Game/GameLogic/Object.cpp
index cfd2d255..751dc454 100644
--- a/Code/Game/GameLogic/Object.cpp
+++ b/Code/Game/GameLogic/Object.cpp
@@ -28,6 +28,7 @@ Object::Object(Oyster::Physics::ICustomBody *rigidBody, void (*collisionFuncAfte
this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter));
this->type = type;
this->objectID = objectID;
+ this->extraDamageOnCollision = 0;
this->rigidBody->SetCustomTag(this);
}
@@ -38,6 +39,7 @@ Object::Object(Oyster::Physics::ICustomBody *rigidBody , Oyster::Physics::ICusto
this->rigidBody->SetSubscription((Oyster::Physics::ICustomBody::EventAction_AfterCollisionResponse)(collisionFuncAfter));
this->type = type;
this->objectID = objectID;
+ this->extraDamageOnCollision = 0;
this->rigidBody->SetCustomTag(this);
}
@@ -103,4 +105,10 @@ Oyster::Math::Float4x4 Object::GetOrientation()
Oyster::Physics::ICustomBody::State state;
state = this->rigidBody->GetState();
return state.GetOrientation();
+}
+
+
+Oyster::Math::Float Object::getExtraDamageOnCollision()
+{
+ return this->extraDamageOnCollision;
}
\ No newline at end of file
diff --git a/Code/Game/GameLogic/Object.h b/Code/Game/GameLogic/Object.h
index 7e7e3f08..73853bd8 100644
--- a/Code/Game/GameLogic/Object.h
+++ b/Code/Game/GameLogic/Object.h
@@ -31,6 +31,8 @@ namespace GameLogic
Oyster::Math::Float3 GetScale() override;
Oyster::Math::Float4x4 GetOrientation() override;
+ Oyster::Math::Float getExtraDamageOnCollision();
+
// API overrides
@@ -58,6 +60,8 @@ namespace GameLogic
ObjectSpecialType type;
int objectID;
+
+ Oyster::Math::Float extraDamageOnCollision;
};
}
diff --git a/Code/Game/GameLogic/Portal.cpp b/Code/Game/GameLogic/Portal.cpp
index 1edd1717..61229256 100644
--- a/Code/Game/GameLogic/Portal.cpp
+++ b/Code/Game/GameLogic/Portal.cpp
@@ -10,8 +10,8 @@ Portal::Portal(void)
}
-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)
+Portal::Portal(Oyster::Physics::ICustomBody *rigidBody, ObjectSpecialType type,int objectID ,Oyster::Math::Float3 portalExit)
+ :StaticObject(rigidBody, Portal::PortalActivated, type, objectID)
{
this->portalExit = portalExit;
}
diff --git a/Code/Game/GameLogic/Portal.h b/Code/Game/GameLogic/Portal.h
index ab88d934..0f228c21 100644
--- a/Code/Game/GameLogic/Portal.h
+++ b/Code/Game/GameLogic/Portal.h
@@ -8,8 +8,7 @@ namespace GameLogic
public:
Portal(void);
- Portal(Oyster::Physics::ICustomBody *rigidBody
- ,void (*EventOnCollision)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss)
+ Portal(Oyster::Physics::ICustomBody *rigidBody
,ObjectSpecialType type,int objectID ,Oyster::Math::Float3 portalExit);
~Portal(void);