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="Ability.cpp" />
|
||||||
<ClCompile Include="Animation.cpp" />
|
<ClCompile Include="Animation.cpp" />
|
||||||
<ClCompile Include="Arrow.cpp" />
|
<ClCompile Include="Arrow.cpp" />
|
||||||
|
<ClCompile Include="ArtificerWindow.cpp" />
|
||||||
<ClCompile Include="AttributableStat.cpp">
|
<ClCompile Include="AttributableStat.cpp">
|
||||||
<SubType>
|
<SubType>
|
||||||
</SubType>
|
</SubType>
|
||||||
|
@ -1160,6 +1160,9 @@
|
|||||||
<ClCompile Include="State_Dialog.cpp">
|
<ClCompile Include="State_Dialog.cpp">
|
||||||
<Filter>Source Files\Game States</Filter>
|
<Filter>Source Files\Game States</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="ArtificerWindow.cpp">
|
||||||
|
<Filter>Source Files\Interface</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="cpp.hint" />
|
<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();
|
InitializePauseWindow();
|
||||||
InitializeDeathWindow();
|
InitializeDeathWindow();
|
||||||
InitializeCreditsWindow();
|
InitializeCreditsWindow();
|
||||||
|
InitializeArtificerWindow();
|
||||||
|
|
||||||
for(MenuType type=MenuType(int(MenuType::ENUM_START)+1);type<MenuType::ENUM_END;type=MenuType(int(type+1))){
|
for(MenuType type=MenuType(int(MenuType::ENUM_START)+1);type<MenuType::ENUM_END;type=MenuType(int(type+1))){
|
||||||
if(menus.count(type)==0){
|
if(menus.count(type)==0){
|
||||||
|
@ -112,6 +112,7 @@ class Menu:public IAttributable{
|
|||||||
static void InitializePauseWindow();
|
static void InitializePauseWindow();
|
||||||
static void InitializeDeathWindow();
|
static void InitializeDeathWindow();
|
||||||
static void InitializeCreditsWindow();
|
static void InitializeCreditsWindow();
|
||||||
|
static void InitializeArtificerWindow();
|
||||||
|
|
||||||
friend class AiL;
|
friend class AiL;
|
||||||
friend class ItemInfo;
|
friend class ItemInfo;
|
||||||
|
@ -69,6 +69,7 @@ enum MenuType{
|
|||||||
PAUSE, //100% Controller Compatibility
|
PAUSE, //100% Controller Compatibility
|
||||||
DEATH, //100% Controller Compatibility
|
DEATH, //100% Controller Compatibility
|
||||||
CREDITS, //100% Controller Compatibility
|
CREDITS, //100% Controller Compatibility
|
||||||
|
ARTIFICER, //100% Controller Compatibility
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
/*DO NOT REMOVE!!*/ENUM_END////////////////////////////////
|
/*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(m.npcData.function=="Artificer"){
|
||||||
if(!Tutorial::TaskIsComplete(TutorialTaskName::ARTIFICER_INTRO)){
|
if(!Tutorial::TaskIsComplete(TutorialTaskName::ARTIFICER_INTRO)){
|
||||||
Tutorial::CompleteTask(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();
|
commands.clear();
|
||||||
commandIndex=0;
|
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.storyLevel=dialogName;
|
||||||
novel.Reset();
|
novel.Reset();
|
||||||
for(std::unique_ptr<Command>&command:storyLevelData.at(dialogName)){
|
for(std::unique_ptr<Command>&command:storyLevelData.at(dialogName)){
|
||||||
@ -236,6 +237,7 @@ void VisualNovel::ExecuteNextCommand(){
|
|||||||
if(GameState::STATE==GameState::states[States::DIALOG]){
|
if(GameState::STATE==GameState::states[States::DIALOG]){
|
||||||
Reset();
|
Reset();
|
||||||
GameState::STATE=GameState::states[States::GAME_RUN];
|
GameState::STATE=GameState::states[States::GAME_RUN];
|
||||||
|
dialogFinishedCallbackFunc();
|
||||||
}else{
|
}else{
|
||||||
if(game->GetCurrentMapName()=="NPCs.Greg.Camp Notification Unlock Condition"_S&&
|
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();
|
!Unlock::IsUnlocked("NPCs.Greg.Camp Notification Unlock Condition"_S))State_OverworldMap::ConnectionPointFromString("HUB").value()->ResetVisitedFlag();
|
||||||
|
@ -174,6 +174,7 @@ class VisualNovel{
|
|||||||
float prevBackgroundScrollAmt=0;
|
float prevBackgroundScrollAmt=0;
|
||||||
static constexpr float maxTextScrollTime=1.0f;
|
static constexpr float maxTextScrollTime=1.0f;
|
||||||
float audioPitch=1.f;
|
float audioPitch=1.f;
|
||||||
|
std::function<void()>dialogFinishedCallbackFunc{[](){}};
|
||||||
public:
|
public:
|
||||||
static Font font,narratorFont,locationFont;
|
static Font font,narratorFont,locationFont;
|
||||||
private:
|
private:
|
||||||
@ -187,7 +188,7 @@ public:
|
|||||||
VisualNovel(VisualNovel&)=delete;
|
VisualNovel(VisualNovel&)=delete;
|
||||||
VisualNovel(VisualNovel&&)=delete;
|
VisualNovel(VisualNovel&&)=delete;
|
||||||
static void Initialize();
|
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);
|
static void LoadVisualNovel(std::string storyLevelName);
|
||||||
void ExecuteNextCommand();
|
void ExecuteNextCommand();
|
||||||
void Update();
|
void Update();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user