From 25b8960b92181fa6451168650f38776a50747c9a Mon Sep 17 00:00:00 2001 From: Jasper Date: Fri, 6 Mar 2015 16:19:57 +0100 Subject: [PATCH] Added endgame. --- data/levels/Level1.xml | 6 +++--- data/levels/scripts/sunStart.lua | 2 +- data/levels/scripts/sunUpdate.lua | 2 +- level.cc | 5 +++++ level.hh | 1 + physics.cc | 27 +++++++++++++++++++++++---- physics.hh | 2 ++ 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/data/levels/Level1.xml b/data/levels/Level1.xml index f48c5b2..03f01d1 100644 --- a/data/levels/Level1.xml +++ b/data/levels/Level1.xml @@ -11944,7 +11944,7 @@ 34 - - - 10 + 2 false 0 sunStart.lua @@ -11956,11 +11956,11 @@ sunUpdate false -216 - 20 + 27.5 34 - - - 10 + 12 false 0 sunUpdate.lua diff --git a/data/levels/scripts/sunStart.lua b/data/levels/scripts/sunStart.lua index c7865c0..f2d55fb 100644 --- a/data/levels/scripts/sunStart.lua +++ b/data/levels/scripts/sunStart.lua @@ -13,7 +13,7 @@ function trigger(objectToChange) local time = os.clock() global.sunStartTime = time global.triggeredSunStart = true - + level:activateEndgame() print("sunStart") end end diff --git a/data/levels/scripts/sunUpdate.lua b/data/levels/scripts/sunUpdate.lua index 972c629..9160ad9 100644 --- a/data/levels/scripts/sunUpdate.lua +++ b/data/levels/scripts/sunUpdate.lua @@ -7,7 +7,7 @@ function trigger(objectToChange) return end - local maxTimeDiff = 5 + local maxTimeDiff = 20 local timeDiff = os.clock()- global.sunStartTime if(timeDiff > maxTimeDiff)then timeDiff = maxTimeDiff diff --git a/level.cc b/level.cc index 6ac2f8f..754aa5a 100644 --- a/level.cc +++ b/level.cc @@ -41,6 +41,7 @@ void Level::load() { .addFunction("resetPlayer", &Level::resetPlayer) .addFunction("movePlayer", &Level::movePlayer) .addFunction("setSunDirection", &Level::setSunDirection) + .addFunction("activateEndgame", &Level::activateEndgame) .endClass(); //Push the level to Lua as a global variable luabridge::push(luaState, this); @@ -272,3 +273,7 @@ Terrain* Level::getTerrain() { Skydome* Level::getSkydome() { return &skydome; } + +void Level::activateEndgame(){ + physics.activateEndgame(); +} diff --git a/level.hh b/level.hh index e18db48..f5979fd 100644 --- a/level.hh +++ b/level.hh @@ -61,6 +61,7 @@ class Level { void resetPlayer(); void movePlayer(float xPosition, float yPosition, float zPosition); void setPlayerIndex(int index); + void activateEndgame(); private: lua_State* luaState=nullptr; std::vector objects; diff --git a/physics.cc b/physics.cc index c3b5a86..3fc24c9 100644 --- a/physics.cc +++ b/physics.cc @@ -44,14 +44,17 @@ void Physics::takeUpdateStep(float timeDiff) } } + if(endgame) + { + currentDirection = playerBall->getCenterOfMassPosition(); + currentDirection.setY(0); + currentDirection.normalize(); + } + btVector3 position = currentDirection; - btVector3 position = cameraBody->getCenterOfMassPosition() - playerBall->getCenterOfMassPosition(); //gets a vector from the player to the camera - position = currentDirection; position.normalize(); position *= cameraDistance; position += playerBall->getCenterOfMassPosition(); //is the position cameraDistance away from the player in the direction of the camera - - //prevent the camera from being dragged along on the ground btVector3 dir = cameraBody->getCenterOfMassPosition() - position; float str = 50 * dir.length() / cameraBody->getInvMass(); //getInvMass() returns the inverted mass @@ -66,6 +69,9 @@ void Physics::takeUpdateStep(float timeDiff) position.normalize(); cameraBody->setLinearVelocity(position*20); } + + + world->stepSimulation(timeDiff); } else @@ -630,6 +636,19 @@ void Physics::forceMoveCamera(btVector3 newPosition) cameraBody->setCenterOfMassTransform(btTransform(btQuaternion(0,0,0,1),newPosition)); } +void Physics::activateEndgame() +{ + if(endgame) + return; + endgame = true; + positionConstraint cons; + cons.body = playerBall; + cons.strength = 1; + cons.position = playerBall->getCenterOfMassPosition() + btVector3(0,15,0); + playerBall->setGravity(btVector3(0,0,0)); + allPositionConstraints.push_back(cons); +} + void Physics::kill() //delete dynamically allocated memory { if (world == NULL) { diff --git a/physics.hh b/physics.hh index 49d9571..98fbe53 100644 --- a/physics.hh +++ b/physics.hh @@ -77,6 +77,7 @@ class Physics { void prepareCollisionDetection(); bool playerWithGround(); bool playerWithObject(); + void activateEndgame(); void forcePlayer(glm::vec3 newPosition); struct positionConstraint{btRigidBody* body; float strength; btVector3 position;}; @@ -86,6 +87,7 @@ class Physics { float resetHight = 0; bool simulationActive = true; bool sinking = true; + bool endgame = false; btVector3 currentDirection = btVector3(1,1,1); btRigidBody* playerBall; //allows for easier access to the ball btRigidBody* terrainBody; //duh