From 5d6557a49f2440dc2f83504660856877f70a710c Mon Sep 17 00:00:00 2001 From: Tobias Loose Date: Mon, 9 Dec 2013 16:50:51 +0100 Subject: [PATCH] Add easing to task list and fix a bug where opening the task list a second time was not possible --- projects/mtg/include/Tasks.h | 13 ++++++++++-- projects/mtg/src/GameStateShop.cpp | 2 +- projects/mtg/src/Tasks.cpp | 32 +++++++++++++++++------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/projects/mtg/include/Tasks.h b/projects/mtg/include/Tasks.h index b257752a6..290b8218e 100644 --- a/projects/mtg/include/Tasks.h +++ b/projects/mtg/include/Tasks.h @@ -2,8 +2,15 @@ #define TASK_H #include +#include + +#include "Easing.h" + +using namespace std; class GameObserver; +class JQuad; +class JTexture; // Task type constant @@ -72,8 +79,11 @@ class TaskList { protected: string fileName; + float vPos; - float mElapsed; + InOutQuadEasing vPosInEasing; + InOutQuadEasing vPosOutEasing; + int mState; JQuad * mBg[9]; JTexture * mBgTex; @@ -97,7 +107,6 @@ public: { return mState; } - ; void addTask(string params, bool rand = false); void addTask(Task *task); void addRandomTask(int diff = 100); diff --git a/projects/mtg/src/GameStateShop.cpp b/projects/mtg/src/GameStateShop.cpp index 34ddfa558..7055ed9f5 100644 --- a/projects/mtg/src/GameStateShop.cpp +++ b/projects/mtg/src/GameStateShop.cpp @@ -496,7 +496,7 @@ void GameStateShop::Update(float dt) } break; case STAGE_SHOP_TASKS: - if (menu) + if (menu && !menu->isClosed()) { menu->Update(dt); return; diff --git a/projects/mtg/src/Tasks.cpp b/projects/mtg/src/Tasks.cpp index d1e32a63b..a2399f1e9 100644 --- a/projects/mtg/src/Tasks.cpp +++ b/projects/mtg/src/Tasks.cpp @@ -258,9 +258,10 @@ Task* Task::createFromStr(const string params, bool rand) /*---------------- TaskList -----------------*/ -TaskList::TaskList(string _fileName) +TaskList::TaskList(string _fileName): + fileName(_fileName), vPos(-SCREEN_HEIGHT), vPosInEasing(vPos), vPosOutEasing(vPos) { - fileName = _fileName; + if (fileName == "") { fileName = options.profileFile(PLAYER_TASKS).c_str(); @@ -378,9 +379,10 @@ void TaskList::removeTask(Task *task) void TaskList::Start() { - vPos = -SCREEN_HEIGHT; //Offscreen - mElapsed = 0; mState = TASKS_IN; + vPos = -SCREEN_HEIGHT; //Offscreen + vPosInEasing.start(0.0f, 2.0f); + if (!mBgTex) { mBgTex = WResourceManager::Instance()->RetrieveTexture("taskboard.png", RETRIEVE_LOCK); @@ -410,7 +412,7 @@ void TaskList::Start() void TaskList::End() { mState = TASKS_OUT; - mElapsed = 0; + vPosOutEasing.start(float(-SCREEN_HEIGHT), 2.0f); } void TaskList::passOneDay() @@ -451,21 +453,23 @@ int TaskList::getTaskCount() void TaskList::Update(float dt) { - mElapsed += dt; - - if (mState == TASKS_IN && vPos < 0) + if(!vPosInEasing.finished()) { - vPos = -SCREEN_HEIGHT + (SCREEN_HEIGHT * mElapsed / 0.75f); //Todo: more physical drop-in. - if (vPos >= 0) + vPosInEasing.update(dt); + + if(vPosInEasing.finished()) { - vPos = 0; mState = TaskList::TASKS_ACTIVE; } } - else if (mState == TASKS_OUT && vPos > -SCREEN_HEIGHT) + else if(!vPosOutEasing.finished()) { - vPos = -(SCREEN_HEIGHT * mElapsed / 0.75f); - if (vPos <= -SCREEN_HEIGHT) mState = TASKS_INACTIVE; + vPosOutEasing.update(dt); + + if(vPosOutEasing.finished()) + { + mState = TASKS_INACTIVE; + } } }