diff --git a/Code/Game/GameLogic/AttatchmentGun.cpp b/Code/Game/GameLogic/AttatchmentGun.cpp new file mode 100644 index 00000000..6146a838 --- /dev/null +++ b/Code/Game/GameLogic/AttatchmentGun.cpp @@ -0,0 +1,71 @@ +#include "AttatchmentGun.h" +#include "PhysicsAPI.h" +#include "GameLogicStates.h" +#include "Game.h" +using namespace GameLogic; + + + +AttatchmentGun::AttatchmentGun(void) +{ + this->owner = 0; + this->damage = 0.0f; +} + +AttatchmentGun::AttatchmentGun(Player &owner) +{ + this->owner = &owner; + this->damage = standardDamage; +} + + +AttatchmentGun::~AttatchmentGun(void) +{ + +} + +/******************************************************** +* Uses the attatchment and will from here switch case the different WEAPON_FIRE's that are to be used +********************************************************/ +void AttatchmentGun::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, float dt) +{ + //switch case to determin what functionallity to use in the attatchment + switch (usage) + { + case WEAPON_FIRE::WEAPON_USE_PRIMARY_PRESS: + //skjut här + break; + + case WEAPON_FIRE::WEAPON_USE_SECONDARY_PRESS: + break; + + case WEAPON_USE_SECONDARY_RELEASE: + break; + + case WEAPON_FIRE::WEAPON_USE_UTILLITY_PRESS: + break; + } + +} + +void AttatchmentGun::Update(float dt) +{ + +} + +void AttatchmentGun::ShootBullet(const WEAPON_FIRE &usage, float dt) +{ + Oyster::Collision3D::Ray *hitRay; + Oyster::Math::Float3 pos = owner->GetRigidBody()->GetState().centerPos; + Oyster::Math::Float3 look = owner->GetLookDir().GetNormalized(); + Oyster::Math::Float hitDamage = this->damage; + + firedBullet bullet; + bullet.hitDamage = hitDamage; + + hitRay = new Oyster::Collision3D::Ray(pos,look); + + + + +} diff --git a/Code/Game/GameLogic/AttatchmentGun.h b/Code/Game/GameLogic/AttatchmentGun.h new file mode 100644 index 00000000..9cec7cb7 --- /dev/null +++ b/Code/Game/GameLogic/AttatchmentGun.h @@ -0,0 +1,33 @@ +////////////////////////////////////////////////// +//Created by Erik of the GameLogic team +////////////////////////////////////////////////// +#ifndef ATTATCHMENTGUN_H +#define ATTATCHMENTGUN_H +#include "IAttatchment.h" + + + +namespace GameLogic +{ + const Oyster::Math::Float standardDamage = 10; + + class AttatchmentGun : public IAttatchment + { + public: + AttatchmentGun(void); + AttatchmentGun(Player &owner); + ~AttatchmentGun(void); + + + void UseAttatchment(const WEAPON_FIRE &usage, float dt); + void Update(float dt); + + private: + Oyster::Math::Float damage; + private: + void ShootBullet(const WEAPON_FIRE &usage, float dt); + + }; +} +#endif + diff --git a/Code/Game/GameLogic/AttatchmentMassDriver.cpp b/Code/Game/GameLogic/AttatchmentMassDriver.cpp index 6abe81b6..4e584a44 100644 --- a/Code/Game/GameLogic/AttatchmentMassDriver.cpp +++ b/Code/Game/GameLogic/AttatchmentMassDriver.cpp @@ -43,7 +43,7 @@ void AttatchmentMassDriver::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, //switch case to determin what functionallity to use in the attatchment switch (usage) { - case WEAPON_FIRE::WEAPON_USE_PRIMARY_PRESS: + case WEAPON_USE_PRIMARY_PRESS: //if(currentEnergy >= 9.0f) { currentEnergy -= 9.0f; @@ -51,23 +51,24 @@ void AttatchmentMassDriver::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, // add CD ((Game*)&Game::Instance())->onActionEventFnc(this->owner, WeaponAction::WeaponAction_PrimaryShoot); } - break; + break; - case WEAPON_FIRE::WEAPON_USE_SECONDARY_PRESS: + case WEAPON_USE_SECONDARY_PRESS: if(this->hasObject) { - ((DynamicObject*)(this->heldObject->GetCustomTag()))->RemoveManipulation(); - this->hasObject = false; - this->heldObject = NULL; + goto CASE_WEAPON_INTERRUPT; } else if( currentEnergy >= 1.0f ) { - currentEnergy -= 1.0f; - if(!this->hasObject) + if(this->hasObject) { - ForcePull(usage,dt); - // add CD - ((Game*)&Game::Instance())->onActionEventFnc(this->owner, WeaponAction::WeaponAction_SecondaryShoot); + currentEnergy -= 1.0f; + if(!this->hasObject) + { + ForcePull(usage,dt); + // add CD + ((Game*)&Game::Instance())->onActionEventFnc(this->owner, WeaponAction::WeaponAction_SecondaryShoot); + } } } else //Energy drained, release object @@ -76,20 +77,27 @@ void AttatchmentMassDriver::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, this->hasObject = false; this->heldObject = NULL; } - break; + break; + + case WEAPON_INTERRUPT: + CASE_WEAPON_INTERRUPT: + ((DynamicObject*)(this->heldObject->GetCustomTag()))->RemoveManipulation(); + this->hasObject = false; + this->heldObject = NULL; + break; case WEAPON_USE_SECONDARY_RELEASE: - { - if (this->hasObject) //Dummy check { - //((DynamicObject*)(this->heldObject->GetCustomTag()))->RemoveManipulation(); - //this->hasObject = false; - //this->heldObject = NULL; + if (this->hasObject) //Dummy check + { + //((DynamicObject*)(this->heldObject->GetCustomTag()))->RemoveManipulation(); + //this->hasObject = false; + //this->heldObject = NULL; + } } - } - break; + break; - case WEAPON_FIRE::WEAPON_USE_UTILLITY_PRESS: + case WEAPON_USE_UTILLITY_PRESS: if(currentEnergy >= 90.0f) { currentEnergy -= 90.0f; @@ -97,9 +105,8 @@ void AttatchmentMassDriver::UseAttatchment(const GameLogic::WEAPON_FIRE &usage, // add CD ((Game*)&Game::Instance())->onActionEventFnc(this->owner, WeaponAction::WeaponAction_UtilityActivate); } - break; + break; } - } void AttatchmentMassDriver::Update(float dt) diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index fd5f372a..f8669591 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -242,6 +242,18 @@ using namespace GameLogic; return; } + Player *player = realObjA->getManipulatingPlayer(); + if( player != nullptr ) + { + player->UseWeapon( WEAPON_INTERRUPT ); + } + + player = realObjB->getManipulatingPlayer(); + if( player != nullptr ) + { + player->UseWeapon( WEAPON_INTERRUPT ); + } + //check which obj is the one that is already affected, if both are then use the special case of changing ownership. if(realObjA->getAffectingPlayer() == NULL && realObjB->getAffectingPlayer() == NULL) //None of the objects have a player affecting them { @@ -350,7 +362,6 @@ using namespace GameLogic; weapon->heldObject = obj; //weapon now holds the object weapon->hasObject = true; dynamicObj->SetManipulatingPlayer(*weapon->owner); //TODO: add if this is to be a struggle of who has the most power in its weapon, the player that is already manipulating the object or you. if you then you take the object from the other player, if not then you do not take the object - break; } diff --git a/Code/Game/GameLogic/GameLogic.vcxproj b/Code/Game/GameLogic/GameLogic.vcxproj index 26c98891..4f1cb1fa 100644 --- a/Code/Game/GameLogic/GameLogic.vcxproj +++ b/Code/Game/GameLogic/GameLogic.vcxproj @@ -159,6 +159,7 @@ + @@ -185,6 +186,7 @@ + diff --git a/Code/Game/GameLogic/GameLogicStates.h b/Code/Game/GameLogic/GameLogicStates.h index f006ad27..88fda7e5 100644 --- a/Code/Game/GameLogic/GameLogicStates.h +++ b/Code/Game/GameLogic/GameLogicStates.h @@ -32,6 +32,7 @@ namespace GameLogic WEAPON_USE_SECONDARY_RELEASE = 4, WEAPON_USE_UTILLITY_PRESS = 8, WEAPON_USE_UTILLITY_RELEASE = 16, + WEAPON_INTERRUPT = 32 }; enum WEAPON_STATE @@ -46,6 +47,10 @@ namespace GameLogic Oyster::Math::Float3 pushForce; Player *p; }; + struct firedBullet + { + Oyster::Math::Float hitDamage; + }; diff --git a/Code/Game/GameLogic/Player.cpp b/Code/Game/GameLogic/Player.cpp index 209287a8..9cd4635e 100644 --- a/Code/Game/GameLogic/Player.cpp +++ b/Code/Game/GameLogic/Player.cpp @@ -71,9 +71,6 @@ void Player::BeginFrame() { weapon->Update(0.002f); - - - Oyster::Math::Float maxSpeed = 30; // Rotate player accordingly @@ -137,15 +134,11 @@ void Player::BeginFrame() rightVelocity *= Oyster::Math::Float3(0.2f*fabs(rightDir.x), 0.2f*fabs(rightDir.y), 0.2f*fabs(rightDir.z)); } } - - if(walkDirection == Oyster::Math::Float3::null) + if(IsIdle()) { - if(this->playerState != PLAYER_STATE::PLAYER_STATE_JUMPING) - { - if(this->playerState != PLAYER_STATE::PLAYER_STATE_IDLE) - this->gameInstance->onActionEventFnc( this, PlayerAction::PlayerAction_Idle); - this->playerState = PLAYER_STATE::PLAYER_STATE_IDLE; - } + if(this->playerState != PLAYER_STATE::PLAYER_STATE_IDLE) + this->gameInstance->onActionEventFnc( this, PlayerAction::PlayerAction_Idle); + this->playerState = PLAYER_STATE::PLAYER_STATE_IDLE; } // Walk if walkdirection is something if(walkDirection != Oyster::Math::Float3::null) @@ -176,12 +169,13 @@ void Player::BeginFrame() rightVelocity += walkDirection*Oyster::Math::Float3(fabs(rightDir.x), fabs(rightDir.y), fabs(rightDir.z)) * walkSpeed*0.2f; } } - if(this->playerState != PLAYER_STATE::PLAYER_STATE_JUMPING) - { + // TODO not suer if we want to keep jump animation while jumping + //if(this->playerState != PLAYER_STATE::PLAYER_STATE_JUMPING) + //{ if(this->playerState != PLAYER_STATE::PLAYER_STATE_WALKING) this->gameInstance->onActionEventFnc( this, PlayerAction::PlayerAction_Walk); this->playerState = PLAYER_STATE::PLAYER_STATE_WALKING; - } + //} } // Adjust velocities so no squaring occurs @@ -205,14 +199,6 @@ void Player::BeginFrame() this->playerState = PLAYER_STATE::PLAYER_STATE_JUMPING; } } - else - { - if(this->playerState == PLAYER_STATE::PLAYER_STATE_JUMPING) - { - this->gameInstance->onActionEventFnc( this, PlayerAction::PlayerAction_Idle); - this->playerState = PLAYER_STATE::PLAYER_STATE_IDLE; - } - } } } @@ -305,7 +291,7 @@ bool Player::IsJumping() } bool Player::IsIdle() { - return (this->rigidBody->GetLambdaUp() == 1.0f && this->rigidBody->GetLinearVelocity().GetMagnitude() < 0.0001f); + return (this->rigidBody->GetLambdaUp() < 1.0f && this->rigidBody->GetLinearVelocity().GetMagnitude() < 0.1f); } void Player::Inactivate()