mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-20 13:24:40 -04:00
Allow Gamemodes to interrupt flow on file creation
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include "dusk/menu_pointer.h"
|
||||
#include "helpers/string.hpp"
|
||||
#include "dusk/mods/svc/save.hpp"
|
||||
#include "dusk/gamemode.hpp"
|
||||
|
||||
namespace {
|
||||
constexpr u8 pointer_target(u8 group, u8 index) noexcept {
|
||||
@@ -1313,6 +1314,24 @@ void dFile_select_c::selectDataNameMove() {
|
||||
bool isNameMove = nameMoveAnm();
|
||||
bool isModoruTxtDisp = modoruTxtDispAnm();
|
||||
|
||||
#ifdef TARGET_PC
|
||||
const dusk::gamemode::Gamemode* gamemode = dusk::gamemode::getGamemodeManager().getCurrentGamemode();
|
||||
if (gamemode) {
|
||||
if (isHeaderTxtChange == true && isFileRecScale == true && isModoruTxtDisp == true) {
|
||||
bool gamemodeFlowClosed = gamemode->invokeOnNewSaveSelectFunction(this);
|
||||
if (mGamemodeSaveStartBuildUi == true) {
|
||||
mGamemodeSaveStartBuildUi = false;
|
||||
}
|
||||
if (!gamemodeFlowClosed) {
|
||||
return;
|
||||
}
|
||||
}else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
mGamemodeSaveStartBuildUi = true;
|
||||
#endif
|
||||
|
||||
if (isHeaderTxtChange == true && isFileRecScale == true && isNameMove == true &&
|
||||
isModoruTxtDisp == true)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include "d/d_file_select.h"
|
||||
|
||||
namespace dusk::gamemode {
|
||||
using GamemodeId = std::string;
|
||||
@@ -50,6 +51,13 @@ public:
|
||||
mOnNewSaveFunction();
|
||||
}
|
||||
}
|
||||
|
||||
bool invokeOnNewSaveSelectFunction(dFile_select_c* fileSelect) const {
|
||||
if (mOnNewSaveSelectFunction) {
|
||||
return mOnNewSaveSelectFunction(fileSelect);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void invokeOnGameResetFunction() const {
|
||||
if (mOnGameResetFunction) {
|
||||
@@ -68,6 +76,7 @@ public:
|
||||
std::function<void()> mOnPlayFunction;
|
||||
std::function<void()> mOnSaveLoadedFunction;
|
||||
std::function<void()> mOnNewSaveFunction;
|
||||
std::function<bool(dFile_select_c* fileSelect)> mOnNewSaveSelectFunction;
|
||||
std::function<void()> mOnGameResetFunction;
|
||||
std::function<void()> mOnTickFunction;
|
||||
};
|
||||
|
||||
@@ -65,16 +65,10 @@ ModResult register_gamemode(ModContext* ctx, const GamemodeDesc* desc) {
|
||||
}
|
||||
}
|
||||
|
||||
std::string saveName;
|
||||
if (!desc->saveName) {
|
||||
Log.warn("Attempted to register gamemode {} with a null save name! Defaulting to: (gczelda2)",id);
|
||||
std::string saveName = desc->saveName;
|
||||
if (saveName.empty()) {
|
||||
Log.warn("Attempted to register gamemode {} with an empty save name! Defaulting to: (gczelda2)",id);
|
||||
saveName = "gczelda2";
|
||||
}else{
|
||||
saveName = desc->saveName;
|
||||
if (saveName.empty()) {
|
||||
Log.warn("Attempted to register gamemode {} with an empty save name! Defaulting to: (gczelda2)",id);
|
||||
saveName = "gczelda2";
|
||||
}
|
||||
}
|
||||
|
||||
dusk::gamemode::Gamemode gamemode(id, fullName, saveName);
|
||||
@@ -94,6 +88,9 @@ ModResult register_gamemode(ModContext* ctx, const GamemodeDesc* desc) {
|
||||
if (desc->onNewSaveFunction) {
|
||||
gamemode.mOnNewSaveFunction = desc->onNewSaveFunction;
|
||||
}
|
||||
if (desc->onNewSaveSelectFunction) {
|
||||
gamemode.mOnNewSaveSelectFunction = desc->onNewSaveSelectFunction;
|
||||
}
|
||||
if (desc->onGameResetFunction) {
|
||||
gamemode.mOnGameResetFunction = desc->onGameResetFunction;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user