Danbias/Code/Game/GameLogic/AttatchmentMassDriver.cpp

74 lines
2.3 KiB
C++
Raw Normal View History

#include "AttatchmentMassDriver.h"
#include "PhysicsAPI.h"
#include "GameLogicStates.h"
using namespace GameLogic;
AttatchmentMassDriver::AttatchmentMassDriver(void)
{
this->owner = 0;
}
AttatchmentMassDriver::AttatchmentMassDriver(Player &owner)
{
this->owner = &owner;
}
AttatchmentMassDriver::~AttatchmentMassDriver(void)
{
}
2013-12-10 11:17:25 +01:00
/********************************************************
* Uses the attatchment and will from here switch case the different WEAPON_FIRE's that are to be used
********************************************************/
void AttatchmentMassDriver::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, float dt)
2013-12-10 11:17:25 +01:00
{
//switch case to determin what functionallity to use in the attatchment
2014-01-16 11:17:19 +01:00
switch (usage)
{
case WEAPON_FIRE::WEAPON_USE_PRIMARY_PRESS:
ForcePush(usage,dt);
break;
case WEAPON_FIRE::WEAPON_USE_SECONDARY_PRESS:
ForcePull(usage,dt);
break;
}
2013-12-10 11:17:25 +01:00
}
2013-12-10 11:17:25 +01:00
/********************************************************
* Pushes objects in a cone in front of the weapon when fired
2013-12-10 11:17:25 +01:00
********************************************************/
void AttatchmentMassDriver::ForcePush(const GameLogic::WEAPON_FIRE &usage, float dt)
{
Oyster::Math::Float4 pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (500 * dt);
2014-01-30 11:11:45 +01:00
Oyster::Math::Float4x4 aim = Oyster::Math3D::ViewMatrix_LookAtDirection(owner->GetLookDir(), owner->GetRigidBody()->GetGravityNormal(), owner->GetPosition());
2014-01-31 16:42:25 +01:00
2014-01-22 13:02:13 +01:00
Oyster::Math::Float4x4 hitSpace = Oyster::Math3D::ProjectionMatrix_Perspective(Oyster::Math::pi/4,1,1,20);
Oyster::Collision3D::Frustrum hitFrustum = Oyster::Collision3D::Frustrum(Oyster::Math3D::ViewProjectionMatrix(aim,hitSpace));
forcePushData args;
args.pushForce = pushForce;
Oyster::Physics::API::Instance().ApplyEffect(hitFrustum,&args,ForcePushAction);
2014-01-22 13:02:13 +01:00
}
/********************************************************
* Pulls the player in the direction he is looking, used for fast movement(kinda like a jetpack)
********************************************************/
void AttatchmentMassDriver::ForcePull(const WEAPON_FIRE &usage, float dt)
{
Oyster::Physics::Struct::CustomBodyState state = this->owner->GetRigidBody()->GetState();
//do something with state
state.ApplyLinearImpulse(Oyster::Math::Float3(this->owner->GetLookDir()) * (500 * dt));
this->owner->GetRigidBody()->SetState(state);
}