Skip to content

Commit

Permalink
Merge pull request #1717 from fmatthew5876/scene_fixes
Browse files Browse the repository at this point in the history
Scene + Transition fixes
  • Loading branch information
Ghabry committed May 6, 2019
2 parents 3ef8b59 + 2d96720 commit 028c5cc
Show file tree
Hide file tree
Showing 23 changed files with 158 additions and 120 deletions.
2 changes: 0 additions & 2 deletions src/game_temp.cpp
Expand Up @@ -24,7 +24,6 @@ bool Game_Temp::to_title;
bool Game_Temp::transition_processing;
Transition::TransitionType Game_Temp::transition_type;
bool Game_Temp::transition_erase;
bool Game_Temp::transition_menu;
bool Game_Temp::shop_buys;
bool Game_Temp::shop_sells;
int Game_Temp::shop_type;
Expand All @@ -51,7 +50,6 @@ void Game_Temp::Init() {
transition_processing = false;
transition_type = Transition::TransitionNone;
transition_erase = false;
transition_menu = false;
shop_buys = true;
shop_sells = true;
shop_type = 0;
Expand Down
1 change: 0 additions & 1 deletion src/game_temp.h
Expand Up @@ -39,7 +39,6 @@ class Game_Temp {
static bool transition_processing;
static Transition::TransitionType transition_type;
static bool transition_erase;
static bool transition_menu;

static bool shop_buys;
static bool shop_sells;
Expand Down
24 changes: 16 additions & 8 deletions src/scene.cpp
Expand Up @@ -68,6 +68,7 @@ enum PushPopOperation {
};

int Scene::push_pop_operation = 0;
Scene::SceneType prev_scene = Scene::Null;

Scene::Scene() {
type = Scene::Null;
Expand Down Expand Up @@ -101,16 +102,16 @@ void Scene::MainFunction() {
Start();
initialized = true;
} else {
Continue();
Continue(prev_scene);
}
break;
default:;
}

push_pop_operation = 0;

TransitionIn();
Resume();
TransitionIn(prev_scene);
Resume(prev_scene);

init = true;
return;
Expand All @@ -127,7 +128,7 @@ void Scene::MainFunction() {
Graphics::Update();

Suspend();
TransitionOut();
TransitionOut(instance ? instance->type : Null);

// TransitionOut stored a screenshot of the last scene
Graphics::UpdateSceneCallback();
Expand All @@ -139,20 +140,20 @@ void Scene::MainFunction() {
void Scene::Start() {
}

void Scene::Continue() {
void Scene::Continue(SceneType prev_scene) {
}

void Scene::Resume() {
void Scene::Resume(SceneType prev_scene) {
}

void Scene::Suspend() {
}

void Scene::TransitionIn() {
void Scene::TransitionIn(SceneType) {
Graphics::GetTransition().Init(Transition::TransitionFadeIn, this, 6);
}

void Scene::TransitionOut() {
void Scene::TransitionOut(SceneType) {
Graphics::GetTransition().Init(Transition::TransitionFadeOut, this, 6, true);
}

Expand Down Expand Up @@ -186,7 +187,12 @@ bool Scene::IsAsyncPending() {
void Scene::Update() {
}

void Scene::UpdatePrevScene() {
prev_scene = instance ? instance->type : Null;
}

void Scene::Push(std::shared_ptr<Scene> const& new_scene, bool pop_stack_top) {
UpdatePrevScene();
if (pop_stack_top) {
old_instances.push_back(instances.back());
instances.pop_back();
Expand All @@ -201,6 +207,7 @@ void Scene::Push(std::shared_ptr<Scene> const& new_scene, bool pop_stack_top) {
}

void Scene::Pop() {
UpdatePrevScene();
old_instances.push_back(instances.back());
instances.pop_back();

Expand All @@ -216,6 +223,7 @@ void Scene::Pop() {
}

void Scene::PopUntil(SceneType type) {
UpdatePrevScene();
int count = 0;

for (int i = (int)instances.size() - 1 ; i >= 0; --i) {
Expand Down
17 changes: 13 additions & 4 deletions src/scene.h
Expand Up @@ -85,16 +85,20 @@ class Scene {
* Continue processing.
* This function is executed when returning from a
* nested scene (instead of Start).
*
* @param prev_scene The previous scene
*/
virtual void Continue();
virtual void Continue(SceneType prev_scene);

/**
* Resume processing.
* This function is executed after the fade in,
* either when starting the scene or when returning
* from a nested scene
*
* @param prev_scene The previous scene
*/
virtual void Resume();
virtual void Resume(SceneType prev_scene);

/**
* Suspend processing.
Expand All @@ -107,14 +111,18 @@ class Scene {
/**
* Does the transition upon starting or resuming
* the scene
*
* @param prev_scene the scene we transitioned from
*/
virtual void TransitionIn();
virtual void TransitionIn(SceneType prev_scene);

/**
* Does the transition upon ending or suspending
* the scene
*
* @param next_scene the scene we will transition to
*/
virtual void TransitionOut();
virtual void TransitionOut(SceneType next_scene);

/**
* Called when a transition or async load is finished.
Expand Down Expand Up @@ -231,6 +239,7 @@ class Scene {
Graphics::State state;

static void DebugValidate(const char* caller);
static void UpdatePrevScene();

Scene::SceneType request_scene = Null;
};
Expand Down
25 changes: 12 additions & 13 deletions src/scene_battle.cpp
Expand Up @@ -96,22 +96,22 @@ void Scene_Battle::Start() {
SetState(State_Start);
}

void Scene_Battle::TransitionIn() {
if (Game_Temp::transition_menu) {
Game_Temp::transition_menu = false;
Scene::TransitionIn();
} else {
Graphics::GetTransition().Init((Transition::TransitionType)Game_System::GetTransition(Game_System::Transition_BeginBattleShow), this, 32);
void Scene_Battle::TransitionIn(SceneType prev_scene) {
if (prev_scene == Scene::Debug) {
Scene::TransitionIn(prev_scene);
return;
}
Graphics::GetTransition().Init((Transition::TransitionType)Game_System::GetTransition(Game_System::Transition_BeginBattleShow), this, 32);
}

void Scene_Battle::TransitionOut() {
if (Player::exit_flag || Game_Battle::battle_test.enabled || Game_Temp::transition_menu || Scene::instance->type == Scene::Title) {
Scene::TransitionOut();
}
else {
Graphics::GetTransition().Init((Transition::TransitionType)Game_System::GetTransition(Game_System::Transition_EndBattleErase), this, 32, true);
void Scene_Battle::TransitionOut(SceneType next_scene) {
if (Player::exit_flag
|| Game_Battle::battle_test.enabled
|| next_scene == Scene::Debug || next_scene == Scene::Title) {
Scene::TransitionOut(next_scene);
return;
}
Graphics::GetTransition().Init((Transition::TransitionType)Game_System::GetTransition(Game_System::Transition_EndBattleErase), this, 32, true);
}

void Scene_Battle::DrawBackground() {
Expand Down Expand Up @@ -622,7 +622,6 @@ void Scene_Battle::ActionSelectedCallback(Game_Battler* for_battler) {

void Scene_Battle::CallDebug() {
if (Player::debug_flag) {
Game_Temp::transition_menu = true;
Scene::Push(std::make_shared<Scene_Debug>());
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/scene_battle.h
Expand Up @@ -63,8 +63,8 @@ class Scene_Battle : public Scene {
void Start() override;
void Update() override;

void TransitionIn() override;
void TransitionOut() override;
void TransitionIn(SceneType prev_scene) override;
void TransitionOut(SceneType next_scene) override;
void DrawBackground() override;

enum State {
Expand Down
1 change: 0 additions & 1 deletion src/scene_debug.cpp
Expand Up @@ -247,7 +247,6 @@ void Scene_Debug::Update() {
Game_Temp::battle_first_strike = 0;
Game_Temp::battle_result = Game_Temp::BattleVictory;
Game_Battle::SetBattleMode(0);
Game_Temp::transition_menu = false;
static_cast<Scene_Map*>(Scene::instance.get())->CallBattle();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/scene_gamebrowser.cpp
Expand Up @@ -45,7 +45,7 @@ void Scene_GameBrowser::Start() {
Player::FrameReset();
}

void Scene_GameBrowser::Continue() {
void Scene_GameBrowser::Continue(SceneType prev_scene) {
#ifdef _WIN32
SetCurrentDirectory(L"..");
#endif
Expand Down
2 changes: 1 addition & 1 deletion src/scene_gamebrowser.h
Expand Up @@ -36,7 +36,7 @@ class Scene_GameBrowser : public Scene {
Scene_GameBrowser();

void Start() override;
void Continue() override;
void Continue(SceneType prev_scene) override;
void Update() override;

/**
Expand Down
4 changes: 2 additions & 2 deletions src/scene_gameover.cpp
Expand Up @@ -51,10 +51,10 @@ void Scene_Gameover::OnBackgroundReady(FileRequestResult* result) {
background->SetBitmap(Cache::Gameover(result->file));
}

void Scene_Gameover::TransitionIn() {
void Scene_Gameover::TransitionIn(SceneType prev_scene) {
Graphics::GetTransition().Init(Transition::TransitionFadeIn, this, 80);
}

void Scene_Gameover::TransitionOut() {
void Scene_Gameover::TransitionOut(SceneType next_scene) {
Graphics::GetTransition().Init(Transition::TransitionFadeOut, this, 80, true);
}
4 changes: 2 additions & 2 deletions src/scene_gameover.h
Expand Up @@ -39,8 +39,8 @@ class Scene_Gameover : public Scene {

void Start() override;
void Update() override;
void TransitionIn() override;
void TransitionOut() override;
void TransitionIn(SceneType prev_scene) override;
void TransitionOut(SceneType next_scene) override;
private:
/** Background graphic. */
std::unique_ptr<Sprite> background;
Expand Down
17 changes: 16 additions & 1 deletion src/scene_item.cpp
Expand Up @@ -29,6 +29,7 @@
#include "scene_map.h"
#include "scene_teleport.h"
#include "output.h"
#include "transition.h"

Scene_Item::Scene_Item(int item_index) :
item_index(item_index) {
Expand All @@ -44,7 +45,7 @@ void Scene_Item::Start() {
item_window->SetIndex(item_index);
}

void Scene_Item::Continue() {
void Scene_Item::Continue(SceneType prev_scene) {
item_window->Refresh();
}

Expand Down Expand Up @@ -106,3 +107,17 @@ void Scene_Item::Update() {
}
}
}

void Scene_Item::TransitionOut(Scene::SceneType next_scene) {
const auto* item = item_window->GetItem();
const RPG::Skill* skill = nullptr;
if (item && item->type == RPG::Item::Type_special && item->skill_id > 0) {
skill = ReaderUtil::GetElement(Data::skills, item->skill_id);
}

if (next_scene == Map && skill && skill->type == RPG::Skill::Type_escape) {
Graphics::GetTransition().Init(Transition::TransitionFadeOut, this, 32, true);
} else {
Scene::TransitionOut(next_scene);
}
}
3 changes: 2 additions & 1 deletion src/scene_item.h
Expand Up @@ -37,8 +37,9 @@ class Scene_Item : public Scene {
Scene_Item(int item_index = 0);

void Start() override;
void Continue() override;
void Continue(SceneType prev_scene) override;
void Update() override;
void TransitionOut(Scene::SceneType next_scene) override;

private:
/** Displays description about the selected item. */
Expand Down

0 comments on commit 028c5cc

Please sign in to comment.