Artificer initial discussion window menu and setup. Add dialog finish callback function to perform actions once a dialog finishes.
This commit is contained in:
parent
db50617371
commit
2ccb63a74d
@ -726,6 +726,7 @@
|
||||
<ClCompile Include="Ability.cpp" />
|
||||
<ClCompile Include="Animation.cpp" />
|
||||
<ClCompile Include="Arrow.cpp" />
|
||||
<ClCompile Include="ArtificerWindow.cpp" />
|
||||
<ClCompile Include="AttributableStat.cpp">
|
||||
<SubType>
|
||||
</SubType>
|
||||
|
@ -1160,6 +1160,9 @@
|
||||
<ClCompile Include="State_Dialog.cpp">
|
||||
<Filter>Source Files\Game States</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ArtificerWindow.cpp">
|
||||
<Filter>Source Files\Interface</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="cpp.hint" />
|
||||
|
100
Adventures in Lestoria/ArtificerWindow.cpp
Normal file
100
Adventures in Lestoria/ArtificerWindow.cpp
Normal file
@ -0,0 +1,100 @@
|
||||
#pragma region License
|
||||
/*
|
||||
License (OLC-3)
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions or derivations of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions or derivative works in binary form must reproduce the above
|
||||
copyright notice. This list of conditions and the following disclaimer must be
|
||||
reproduced in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
Portions of this software are copyright © 2024 The FreeType
|
||||
Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
|
||||
All rights reserved.
|
||||
*/
|
||||
#pragma endregion
|
||||
|
||||
#include "Menu.h"
|
||||
#include "MenuComponent.h"
|
||||
#include "GameState.h"
|
||||
#include "AdventuresInLestoria.h"
|
||||
#include "Unlock.h"
|
||||
#include "MenuLabel.h"
|
||||
#include "VisualNovel.h"
|
||||
|
||||
INCLUDE_game
|
||||
|
||||
void Menu::InitializeArtificerWindow(){
|
||||
Menu*artificerWindow=CreateMenu(ARTIFICER,CENTERED,vi2d{144,144});
|
||||
|
||||
artificerWindow->ADD("Refine Button",MenuComponent)(geom2d::rect<float>{{0.f,4.f},{144.f,24.f}},"Refine",[](MenuFuncData data){
|
||||
|
||||
return true;
|
||||
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
|
||||
artificerWindow->ADD("Disassemble Button",MenuComponent)(geom2d::rect<float>{{0.f,32.f},{144.f,24.f}},"Disassemble",[](MenuFuncData data){
|
||||
return true;
|
||||
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
|
||||
artificerWindow->ADD("Enchant Button",MenuComponent)(geom2d::rect<float>{{0.f,60.f},{144.f,24.f}},"Enchant",[](MenuFuncData data){
|
||||
|
||||
return true;
|
||||
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
|
||||
artificerWindow->ADD("Help Button",MenuComponent)(geom2d::rect<float>{{0.f,88.f},{144.f,24.f}},"Help",[](MenuFuncData data){
|
||||
VisualNovel::LoadDialog("ARTIFICER_HELP",[](){Menu::OpenMenu(MenuType::ARTIFICER);});
|
||||
return true;
|
||||
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
|
||||
artificerWindow->ADD("Leave Button",MenuComponent)(geom2d::rect<float>{{0.f,116.f},{144.f,24.f}},"Leave",[](MenuFuncData data){
|
||||
Menu::CloseMenu();
|
||||
return true;
|
||||
},vf2d{2.f,2.f},ButtonAttr::FIT_TO_LABEL)END;
|
||||
|
||||
artificerWindow->SetupKeyboardNavigation(
|
||||
[](MenuType type,Data&returnData){ //On Open
|
||||
returnData="Refine Button";
|
||||
},
|
||||
{ //Button Key
|
||||
{game->KEY_SCROLL,{"Navigate",[](MenuType type){}}},
|
||||
{game->KEY_BACK,{"Stay",[](MenuType type){
|
||||
Menu::CloseMenu();
|
||||
}}},
|
||||
{game->KEY_CONFIRM,{"Select",[](MenuType type){}}},
|
||||
}
|
||||
,{ //Button Navigation Rules
|
||||
{"Refine Button",{
|
||||
.up="Leave Button",
|
||||
.down="Disassemble Button",}},
|
||||
{"Disassemble Button",{
|
||||
.up="Refine Button",
|
||||
.down="Enchant Button",}},
|
||||
{"Enchant Button",{
|
||||
.up="Disassemble Button",
|
||||
.down="Help Button",}},
|
||||
{"Help Button",{
|
||||
.up="Enchant Button",
|
||||
.down="Leave Button",}},
|
||||
{"Leave Button",{
|
||||
.up="Help Button",
|
||||
.down="Refine Button",}},
|
||||
});
|
||||
}
|
@ -118,6 +118,7 @@ void Menu::InitializeMenus(){
|
||||
InitializePauseWindow();
|
||||
InitializeDeathWindow();
|
||||
InitializeCreditsWindow();
|
||||
InitializeArtificerWindow();
|
||||
|
||||
for(MenuType type=MenuType(int(MenuType::ENUM_START)+1);type<MenuType::ENUM_END;type=MenuType(int(type+1))){
|
||||
if(menus.count(type)==0){
|
||||
|
@ -112,6 +112,7 @@ class Menu:public IAttributable{
|
||||
static void InitializePauseWindow();
|
||||
static void InitializeDeathWindow();
|
||||
static void InitializeCreditsWindow();
|
||||
static void InitializeArtificerWindow();
|
||||
|
||||
friend class AiL;
|
||||
friend class ItemInfo;
|
||||
|
@ -69,6 +69,7 @@ enum MenuType{
|
||||
PAUSE, //100% Controller Compatibility
|
||||
DEATH, //100% Controller Compatibility
|
||||
CREDITS, //100% Controller Compatibility
|
||||
ARTIFICER, //100% Controller Compatibility
|
||||
///////////////////////////////////////////////////////////
|
||||
/*DO NOT REMOVE!!*/ENUM_END////////////////////////////////
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -88,7 +88,9 @@ void Monster::STRATEGY::NPC(Monster&m,float fElapsedTime,std::string strategy){
|
||||
if(m.npcData.function=="Artificer"){
|
||||
if(!Tutorial::TaskIsComplete(TutorialTaskName::ARTIFICER_INTRO)){
|
||||
Tutorial::CompleteTask(TutorialTaskName::ARTIFICER_INTRO);
|
||||
VisualNovel::LoadDialog("ARTIFICER_INTRO");
|
||||
VisualNovel::LoadDialog("ARTIFICER_INTRO",[](){Menu::OpenMenu(MenuType::ARTIFICER);});
|
||||
}else{
|
||||
Menu::OpenMenu(MenuType::ARTIFICER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -192,7 +192,8 @@ void VisualNovel::Reset(){
|
||||
commands.clear();
|
||||
commandIndex=0;
|
||||
}
|
||||
void VisualNovel::LoadDialog(std::string dialogName){
|
||||
void VisualNovel::LoadDialog(std::string dialogName,std::function<void()>dialogFinishedCallbackFunc){
|
||||
novel.dialogFinishedCallbackFunc=dialogFinishedCallbackFunc;
|
||||
novel.storyLevel=dialogName;
|
||||
novel.Reset();
|
||||
for(std::unique_ptr<Command>&command:storyLevelData.at(dialogName)){
|
||||
@ -236,6 +237,7 @@ void VisualNovel::ExecuteNextCommand(){
|
||||
if(GameState::STATE==GameState::states[States::DIALOG]){
|
||||
Reset();
|
||||
GameState::STATE=GameState::states[States::GAME_RUN];
|
||||
dialogFinishedCallbackFunc();
|
||||
}else{
|
||||
if(game->GetCurrentMapName()=="NPCs.Greg.Camp Notification Unlock Condition"_S&&
|
||||
!Unlock::IsUnlocked("NPCs.Greg.Camp Notification Unlock Condition"_S))State_OverworldMap::ConnectionPointFromString("HUB").value()->ResetVisitedFlag();
|
||||
|
@ -174,6 +174,7 @@ class VisualNovel{
|
||||
float prevBackgroundScrollAmt=0;
|
||||
static constexpr float maxTextScrollTime=1.0f;
|
||||
float audioPitch=1.f;
|
||||
std::function<void()>dialogFinishedCallbackFunc{[](){}};
|
||||
public:
|
||||
static Font font,narratorFont,locationFont;
|
||||
private:
|
||||
@ -187,7 +188,7 @@ public:
|
||||
VisualNovel(VisualNovel&)=delete;
|
||||
VisualNovel(VisualNovel&&)=delete;
|
||||
static void Initialize();
|
||||
static void LoadDialog(std::string dialogName);
|
||||
static void LoadDialog(std::string dialogName,std::function<void()>dialogFinishedCallbackFunc=[](){});
|
||||
static void LoadVisualNovel(std::string storyLevelName);
|
||||
void ExecuteNextCommand();
|
||||
void Update();
|
||||
|
Loading…
x
Reference in New Issue
Block a user