diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 0668014..c0e0f5f 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/SeasonI.h b/SeasonI.h index a0c4703..f609d61 100644 --- a/SeasonI.h +++ b/SeasonI.h @@ -5,7 +5,6 @@ #include "soundwaveEngine.h" #include "defines.h" #include "flags.h" -#include "cutscene.h" using namespace olc; @@ -17,6 +16,7 @@ class Object; enum class ActionType; class Entity; class Effect; +class Cutscene; namespace Battle{ class Move; } diff --git a/cutscene.h b/cutscene.h index aead0a3..78992b4 100644 --- a/cutscene.h +++ b/cutscene.h @@ -3,22 +3,18 @@ #include "pixelGameEngine.h" #include "defines.h" #include "flags.h" +#include "object.h" #define CAMERA_MOVESPD 5 #define BATTLE_CAMERA_MOVESPD 2.5 using namespace olc; -enum PriorityDirection{ - HORZ_FIRST, - VERT_FIRST, - BOTH -}; - namespace CutsceneName{ enum Cutscene{ TEST_CUTSCENE, TRANSFER_MAP_CUTSCENE, + LOAD_FILE_CUTSCENE, }; } @@ -38,6 +34,7 @@ enum class ActionType{ MODIFY_OBJECT, LOAD_MAP, MOVE_PLAYER_OBJS, + LOAD_FILE, }; class CutsceneAction{ @@ -290,6 +287,18 @@ class MovePlayerObjects:public CutsceneAction{ } }; +class LoadGame:public CutsceneAction{ + protected: + int saveslot; + public: + LoadGame(int saveslot) + :saveslot(saveslot) {} + ActionType GetActionType() override{return ActionType::LOAD_FILE;} + int GetSaveFileSlot(){ + return saveslot; + } +}; + /* To use this class, specify multiple actions back-to-back, filling their appropriate arguments. @@ -383,4 +392,19 @@ class MapTransitionCutscene:public Cutscene{ return actions; } }; + +extern std::array PARTY_MEMBER_OBJ; + +class LoadFileCutscene:public Cutscene{ + public: + LoadFileCutscene() + :Cutscene({ + 액션 Fade(), + 액션 LoadGame(0), + 액션 Fade(true), + }){} + std::vectorGetActions(){ + return actions; + } +}; #endif \ No newline at end of file diff --git a/defines.h b/defines.h index 0fe6006..cc69716 100644 --- a/defines.h +++ b/defines.h @@ -68,6 +68,12 @@ enum class Direction{ NORTHWEST, }; +enum PriorityDirection{ + HORZ_FIRST, + VERT_FIRST, + BOTH +}; + extern vd2d cameraPos; #endif \ No newline at end of file diff --git a/main.cpp b/main.cpp index b82bfa8..20690f6 100644 --- a/main.cpp +++ b/main.cpp @@ -176,6 +176,7 @@ Map* ORIGINATING_MAP=nullptr; std::array PARTY_MEMBER_NAMES={"PLAYER","NESS","PAULA","JEFF","ANNA","KING","POO"}; std::array SAVE_FILE_DATA={{}}; int CHAPTER_NUMBER=0; +int SAVE_FILE_CURSOR=0; /* [Choice1,Choice2,Choice3] @@ -1378,7 +1379,7 @@ void SeasonI::updateGame(){ } if (moved) { const vi2d cameraOffset={WIDTH/2,HEIGHT/2}; - cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()-cameraOffset; + cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()+PARTY_MEMBER_OBJ[0]->originPoint/2-cameraOffset; } if (moved&&BATTLE_ENCOUNTER==nullptr) { for (int i=0;iencounters.size();i++) { @@ -1957,6 +1958,12 @@ void SeasonI::keyUpdates() { } switch (GAME_STATE) { + case GameState::FILE_LOAD_SELECT:{ + CursorControl(SAVE_FILE_CURSOR,3); + if (ACTIONKEYPRESSED) { + StartCutscene(CUTSCENES[CutsceneName::LOAD_FILE_CUTSCENE]); + } + }break; case GameState::TILE_SELECT:{ if (UpPressed()) { SELECTED_TILE.y=SELECTED_TILE.y-1; @@ -2755,8 +2762,9 @@ void SeasonI::drawGame(){ case GameState::FILE_LOAD_SELECT:{ DrawDialogBox({4,4},{(int)(WIDTH-8),HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220)); for (int i=0;i<3;i++) { - DrawStringDecal({8.f,(float)(8+i*12)},SAVE_FILE_DATA[i].playerName+" Chapter "+std::to_string(SAVE_FILE_DATA[i].chapterNumber)+" "+SAVE_FILE_DATA[i].playTime); + DrawStringDecal({16.f,(float)(12+i*16)},SAVE_FILE_DATA[i].playerName+" Chapter "+std::to_string(SAVE_FILE_DATA[i].chapterNumber)+" "+SAVE_FILE_DATA[i].playTime); } + DrawRotatedDecal({10.F,(float)16+SAVE_FILE_CURSOR*16},SPRITES["cursor.png"],0,{4,4}); }break; case GameState::GAME_WORLD: case GameState::OVERWORLD_MENU: @@ -3925,6 +3933,13 @@ void SeasonI::HandleCutscenes() { cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()-cameraOffset; CurrentCutscene->AdvanceAction(); }break; + case ActionType::LOAD_FILE:{ + LoadGameSaveData(SAVE_FILE_CURSOR); + const vi2d cameraOffset={WIDTH/2,HEIGHT/2}; + cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()+PARTY_MEMBER_OBJ[0]->originPoint/2-cameraOffset; + GAME_STATE=GameState::GAME_WORLD; + CurrentCutscene->AdvanceAction(); + }break; } for (int i=0;i