diff --git a/Code/Game/DanBiasGame/GameClientState/GameState.cpp b/Code/Game/DanBiasGame/GameClientState/GameState.cpp index 556ee28d..17ac3677 100644 --- a/Code/Game/DanBiasGame/GameClientState/GameState.cpp +++ b/Code/Game/DanBiasGame/GameClientState/GameState.cpp @@ -142,6 +142,13 @@ bool GameState::LoadModels() this->staticObjects.Push(new C_StaticObj()); this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData); + // add jumppad + modelData.position = Oyster::Math::Float3(4, 600.3, 0); + modelData.modelPath = L"jumppad_round.dan"; + modelData.id = id++; + // load models + this->staticObjects.Push(new C_StaticObj()); + this->staticObjects[this->staticObjects.Size() -1 ]->Init(modelData); // add player model modelData.position = Oyster::Math::Float3(0, 602, 0); @@ -159,13 +166,7 @@ bool GameState::LoadModels() this->dynamicObjects.Push(new C_DynamicObj()); this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); - // add jumppad - modelData.position = Oyster::Math::Float3(4, 600.3, 0); - modelData.modelPath = L"jumppad_round.dan"; - modelData.id = id++; - // load models - this->dynamicObjects.Push(new C_DynamicObj()); - this->dynamicObjects[this->dynamicObjects.Size() -1 ]->Init(modelData); + // add sky sphere modelData.position = Oyster::Math::Float3(0,0,0); diff --git a/Code/Game/GameLogic/AttatchmentMassDriver.cpp b/Code/Game/GameLogic/AttatchmentMassDriver.cpp index bb7a30f8..1e5d0640 100644 --- a/Code/Game/GameLogic/AttatchmentMassDriver.cpp +++ b/Code/Game/GameLogic/AttatchmentMassDriver.cpp @@ -60,17 +60,18 @@ void AttatchmentMassDriver::Update(float dt) //update position of heldObject if there is an object being held if(hasObject) { - Oyster::Physics::ICustomBody::State state; - state = heldObject->GetState(); + //Oyster::Physics::ICustomBody::State state; + //state = heldObject->GetState(); Oyster::Math::Float3 ownerPos = owner->GetPosition(); Oyster::Physics::ICustomBody::State ownerState = owner->GetRigidBody()->GetState(); Oyster::Math::Float3 up = -ownerState.GetOrientation().v[2]; up *= -0.3; - Oyster::Math::Float3 pos = ownerPos + up + (owner->GetLookDir().GetNormalized()*10); + Oyster::Math::Float3 pos = ownerPos + (owner->GetLookDir().GetNormalized()*5); - state.centerPos = pos; + //state.centerPos = pos; + heldObject->SetPosition(pos); - heldObject->SetState(state); + //heldObject->SetState(state); } } @@ -86,10 +87,8 @@ void AttatchmentMassDriver::ForcePush(const GameLogic::WEAPON_FIRE &usage, float if(hasObject) { Oyster::Physics::API::Instance().ReleaseFromLimbo(heldObject); - pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (700); - Oyster::Physics::ICustomBody::State state = heldObject->GetState(); - //state.ApplyLinearImpulse((Oyster::Math::Float3)pushForce); - heldObject->SetState(state); + pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (400); + heldObject->ApplyImpulse((Oyster::Math::Float3)pushForce); hasObject = false; heldObject = NULL; @@ -101,7 +100,7 @@ void AttatchmentMassDriver::ForcePush(const GameLogic::WEAPON_FIRE &usage, float Oyster::Math::Float lenght = 10; Oyster::Math::Float3 pos = owner->GetRigidBody()->GetState().centerPos; - pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (100); + pushForce = Oyster::Math::Float4(this->owner->GetLookDir()) * (400); Oyster::Collision3D::Cone *hitCone = new Oyster::Collision3D::Cone(lenght,pos,(Oyster::Math::Float4)owner->GetRigidBody()->GetState().quaternion,radius); diff --git a/Code/Game/GameLogic/CollisionManager.cpp b/Code/Game/GameLogic/CollisionManager.cpp index a0d768a3..9aef6b6c 100644 --- a/Code/Game/GameLogic/CollisionManager.cpp +++ b/Code/Game/GameLogic/CollisionManager.cpp @@ -61,11 +61,7 @@ using namespace GameLogic; void SendObjectFlying(Oyster::Physics::ICustomBody &obj, Oyster::Math::Float3 force) { - Oyster::Physics::ICustomBody::State state; - - state = obj.GetState(); - //state.ApplyLinearImpulse(force); - obj.SetState(state); + obj.ApplyImpulse(force); } @@ -135,7 +131,7 @@ using namespace GameLogic; { case ObjectSpecialType_StandarsBox: //move obj to limbo in physics to make sure it wont collide with anything - Oyster::Physics::API::Instance().MoveToLimbo(obj); +// Oyster::Physics::API::Instance().MoveToLimbo(obj); weapon->heldObject = obj; //weapon now holds the object weapon->hasObject = true; diff --git a/Code/Game/GameLogic/JumpPad.cpp b/Code/Game/GameLogic/JumpPad.cpp index 2a7d7043..d52acb45 100644 --- a/Code/Game/GameLogic/JumpPad.cpp +++ b/Code/Game/GameLogic/JumpPad.cpp @@ -8,11 +8,10 @@ JumpPad::JumpPad(void) { } - -JumpPad::JumpPad(Oyster::Physics::ICustomBody *rigidBody, Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss), ObjectSpecialType type, Oyster::Math::Float3 pushForce) +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) { - + this->pushForce = pushForce; } diff --git a/Code/Game/GameLogic/JumpPad.h b/Code/Game/GameLogic/JumpPad.h index 23601849..4fad54e4 100644 --- a/Code/Game/GameLogic/JumpPad.h +++ b/Code/Game/GameLogic/JumpPad.h @@ -9,8 +9,9 @@ namespace GameLogic JumpPad(void); JumpPad(Oyster::Physics::ICustomBody *rigidBody - ,Oyster::Physics::ICustomBody::SubscriptMessage (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) - ,ObjectSpecialType type, Oyster::Math::Float3 pushForce); + ,void (*collisionFuncAfter)(Oyster::Physics::ICustomBody *proto,Oyster::Physics::ICustomBody *deuter,Oyster::Math::Float kineticEnergyLoss) + ,ObjectSpecialType type, Oyster::Math::Float3 pushForce); + ~JumpPad(void); diff --git a/Code/Game/GameLogic/Level.cpp b/Code/Game/GameLogic/Level.cpp index 6ccf6c5d..3cdab709 100644 --- a/Code/Game/GameLogic/Level.cpp +++ b/Code/Game/GameLogic/Level.cpp @@ -289,6 +289,13 @@ void Level::InitiateLevel(float radius) this->staticObjects.Push(new StaticObject(rigidBody_House, Object::DefaultCollisionAfter, ObjectSpecialType_Generic)); rigidBody_House->SetCustomTag(this->staticObjects[0]); 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))); + rigidBody_Jumppad->SetCustomTag(this->staticObjects[1]); + this->staticObjects[1]->objectID = idCount++; } void Level::AddPlayerToTeam(Player *player, int teamID) diff --git a/Code/Game/GameLogic/Level.h b/Code/Game/GameLogic/Level.h index 15f4a832..b8c3f744 100644 --- a/Code/Game/GameLogic/Level.h +++ b/Code/Game/GameLogic/Level.h @@ -9,6 +9,7 @@ #include "StaticObject.h" #include "DynamicObject.h" #include "GameModeType.h" +#include "JumpPad.h" #include "Player.h" #include "PhysicsAPI.h" #include "TeamManager.h" diff --git a/Code/GamePhysics/GamePhysics.vcxproj b/Code/GamePhysics/GamePhysics.vcxproj index dd2f8fd5..9b883bb3 100644 --- a/Code/GamePhysics/GamePhysics.vcxproj +++ b/Code/GamePhysics/GamePhysics.vcxproj @@ -112,6 +112,7 @@ true + $(SolutionDir)Physics/lib/debug/BulletCollision_Debugx64.lib;$(SolutionDir)Physics/lib/debug/BulletDynamics_Debugx64.lib;$(SolutionDir)Physics/lib/debug/LinearMath_Debugx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -130,6 +131,7 @@ true + $(SolutionDir)Physics/lib/release/BulletCollision.lib;$(SolutionDir)Physics/lib/release/BulletDynamics.lib;$(SolutionDir)Physics/lib/release/LinearMath.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -148,6 +150,7 @@ true + $(SolutionDir)Physics/lib/release/BulletCollisionx64.lib;$(SolutionDir)Physics/lib/release/BulletDynamicsx64.lib;$(SolutionDir)Physics/lib/release/LinearMathx64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) diff --git a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp index 3b4fc74d..26da0998 100644 --- a/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp +++ b/Code/GamePhysics/Implementation/PhysicsAPI_Impl.cpp @@ -201,7 +201,7 @@ void API_Impl::UpdateWorld() { SimpleRigidBody* simpleBody = dynamic_cast(this->customBodies[i]); btTransform trans; - simpleBody->GetMotionState()->getWorldTransform(trans); + trans = simpleBody->GetRigidBody()->getWorldTransform(); this->customBodies[i]->SetPosition(Float3(trans.getOrigin().x(), trans.getOrigin().y(), trans.getOrigin().z())); this->customBodies[i]->SetRotation(Quaternion(Float3(trans.getRotation().x(), trans.getRotation().y(), trans.getRotation().z()), trans.getRotation().w())); diff --git a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp index 7cd2f2b6..5670d32b 100644 --- a/Code/GamePhysics/Implementation/SimpleRigidBody.cpp +++ b/Code/GamePhysics/Implementation/SimpleRigidBody.cpp @@ -106,36 +106,36 @@ void SimpleRigidBody::SetLinearVelocity(Float3 velocity) void SimpleRigidBody::SetPosition(::Oyster::Math::Float3 position) { btTransform trans; - this->motionState->getWorldTransform(trans); + trans = this->rigidBody->getWorldTransform(); trans.setOrigin(btVector3(position.x, position.y, position.z)); - this->motionState->setWorldTransform(trans); + this->rigidBody->setWorldTransform(trans); this->state.centerPos = position; } void SimpleRigidBody::SetRotation(Float4 quaternion) { btTransform trans; - this->motionState->getWorldTransform(trans); + trans = this->rigidBody->getWorldTransform(); trans.setRotation(btQuaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w)); - this->motionState->setWorldTransform(trans); + this->rigidBody->setWorldTransform(trans); this->state.quaternion = Quaternion(quaternion.xyz, quaternion.w); } void SimpleRigidBody::SetRotation(::Oyster::Math::Quaternion quaternion) { btTransform trans; - this->motionState->getWorldTransform(trans); + trans = this->rigidBody->getWorldTransform(); trans.setRotation(btQuaternion(quaternion.imaginary.x, quaternion.imaginary.y, quaternion.imaginary.z, quaternion.real)); - this->motionState->setWorldTransform(trans); + this->rigidBody->setWorldTransform(trans); this->state.quaternion = quaternion; } void SimpleRigidBody::SetRotation(Float3 eulerAngles) { btTransform trans; - this->motionState->getWorldTransform(trans); + trans = this->rigidBody->getWorldTransform(); trans.setRotation(btQuaternion(eulerAngles.x, eulerAngles.y, eulerAngles.z)); - this->motionState->setWorldTransform(trans); + this->rigidBody->setWorldTransform(trans); this->state.quaternion = Quaternion(Float3(trans.getRotation().x(), trans.getRotation().y(), trans.getRotation().z()), trans.getRotation().w()); } diff --git a/Code/Physics/lib/Debug/BulletCollision_Debugx64.lib b/Code/Physics/lib/Debug/BulletCollision_Debugx64.lib new file mode 100644 index 00000000..1f9eb7e1 Binary files /dev/null and b/Code/Physics/lib/Debug/BulletCollision_Debugx64.lib differ diff --git a/Code/Physics/lib/Debug/BulletDynamics_Debugx64.lib b/Code/Physics/lib/Debug/BulletDynamics_Debugx64.lib new file mode 100644 index 00000000..2c6e7742 Binary files /dev/null and b/Code/Physics/lib/Debug/BulletDynamics_Debugx64.lib differ diff --git a/Code/Physics/lib/Debug/LinearMath_Debugx64.lib b/Code/Physics/lib/Debug/LinearMath_Debugx64.lib new file mode 100644 index 00000000..cd808fa7 Binary files /dev/null and b/Code/Physics/lib/Debug/LinearMath_Debugx64.lib differ diff --git a/Code/Physics/lib/Release/BulletCollision.lib b/Code/Physics/lib/Release/BulletCollision.lib new file mode 100644 index 00000000..d6bf723a Binary files /dev/null and b/Code/Physics/lib/Release/BulletCollision.lib differ diff --git a/Code/Physics/lib/Release/BulletCollisionx64.lib b/Code/Physics/lib/Release/BulletCollisionx64.lib new file mode 100644 index 00000000..f83e4263 Binary files /dev/null and b/Code/Physics/lib/Release/BulletCollisionx64.lib differ diff --git a/Code/Physics/lib/Release/BulletDynamics.lib b/Code/Physics/lib/Release/BulletDynamics.lib new file mode 100644 index 00000000..2d09af6d Binary files /dev/null and b/Code/Physics/lib/Release/BulletDynamics.lib differ diff --git a/Code/Physics/lib/Release/BulletDynamicsx64.lib b/Code/Physics/lib/Release/BulletDynamicsx64.lib new file mode 100644 index 00000000..3b18bc9e Binary files /dev/null and b/Code/Physics/lib/Release/BulletDynamicsx64.lib differ diff --git a/Code/Physics/lib/Release/LinearMath.lib b/Code/Physics/lib/Release/LinearMath.lib new file mode 100644 index 00000000..be761363 Binary files /dev/null and b/Code/Physics/lib/Release/LinearMath.lib differ diff --git a/Code/Physics/lib/Release/LinearMathx64.lib b/Code/Physics/lib/Release/LinearMathx64.lib new file mode 100644 index 00000000..d5971534 Binary files /dev/null and b/Code/Physics/lib/Release/LinearMathx64.lib differ