diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 3401795..d3bcc0d 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/main.cpp b/main.cpp index 80baf1f..b6b1d4d 100644 --- a/main.cpp +++ b/main.cpp @@ -41,6 +41,7 @@ namespace layer{ GROUND, BACKGROUND, OBJECT, //The object layer doesn't actually exist, it's used to tell the editor we are adding an object instead. + ENCOUNTER, //The encounter layer doesn't actually exist, it's used to tell the editor we are adding encounters instead. }; } @@ -363,6 +364,8 @@ public: std::mapMOVELIST; std::array partyTrail={vd2d{0,0}}; int PARTY_MEMBER_COUNT = 1; + int ENCOUNTER_SELECTED = 0; + int ENCOUNTER_OFFSET = 0; bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things. @@ -630,6 +633,11 @@ goes on a very long time, I hope you can understand this is only for testing pur } } }break; + case GameState::ENCOUNTER_SELECT:{ + if (!GetKey(SHIFT).bHeld) { + GAME_STATE=GameState::EDITOR; + } + }break; case GameState::GAME_WORLD:{ if (PlayerCanMove()) { if (UpHeld()) { @@ -658,6 +666,9 @@ goes on a very long time, I hope you can understand this is only for testing pur if (TabHeld()) { GAME_STATE=GameState::TILE_SELECT; } + if (GetKey(SHIFT).bHeld) { + GAME_STATE=GameState::ENCOUNTER_SELECT; + } if (PlayerCanMove()) { if (GetKey(I).bHeld) { if (PARTY_MEMBER_OBJ[0]->SmoothMove({0,-1})) { @@ -866,6 +877,9 @@ goes on a very long time, I hope you can understand this is only for testing pur if (GetKey(ESCAPE).bPressed) { GAME_STATE=GameState::OBJ_SELECT; } + if (EDITING_LAYER==layer::ENCOUNTER&&GetMouse(0).bPressed) { + //LoadEncounter(CURRENT_MAP,HIGHLIGHTED_TILE*32,CURRENT_MAP->encounters) //TODO Make up the encounter reference list and then come back. + } else if (EDITING_LAYER==layer::OBJECT&&GetMouse(0).bPressed) { AddObjectToWorld(CreateObject(SELECTED_OBJ_ID,HIGHLIGHTED_TILE*32)); } else @@ -906,6 +920,9 @@ goes on a very long time, I hope you can understand this is only for testing pur DrawGameWorld(); SetDrawTarget(nullptr); DrawRectDecal((HIGHLIGHTED_TILE)*32-cameraPos,{32,32},YELLOW); + if (EDITING_LAYER==layer::ENCOUNTER) { + DrawStringPropDecal({2,2},"Editing Encounters"); + } else if (EDITING_LAYER==layer::OBJECT) { DrawStringPropDecal({2,2},"Editing Objects"); } else { @@ -951,6 +968,45 @@ goes on a very long time, I hope you can understand this is only for testing pur counter++; } }break; + case GameState::ENCOUNTER_SELECT:{ + vd2d drawpos={0,0}; + int counter=0; + for (int i=0;iencounters.size();i++){ + if (counterHEIGHT) { + break; + } + Encounter*enc = CURRENT_MAP->encounters[i]; + if (GetMouse(0).bHeld&& + GetMousePos().x>=drawpos.x&& + GetMousePos().x=drawpos.y&& + GetMousePos().yid; + EDITING_LAYER=layer::ENCOUNTER; + } + FillRectDecal(drawpos,{16,24},VERY_DARK_GREY); + for (int i=0;iobjs.size();i+=2) { + DrawPartialDecal({drawpos.x+((double)8/(enc->objs.size()))*i-4,drawpos.y},{16,16},enc->objs[i]->obj->spr->spr,{(enc->objs[i]->obj->frameIndex%enc->objs[i]->obj->spr->frames)*enc->objs[i]->obj->spr->width,0},{enc->objs[i]->obj->spr->width,enc->objs[i]->obj->spr->spr->sprite->height},enc->objs[i]->obj->color); + } + for (int i=1;iobjs.size();i+=2) { + DrawPartialDecal({drawpos.x+((double)8/(enc->objs.size()))*i-4,drawpos.y+6},{16,16},enc->objs[i]->obj->spr->spr,{(enc->objs[i]->obj->frameIndex%enc->objs[i]->obj->spr->frames)*enc->objs[i]->obj->spr->width,0},{enc->objs[i]->obj->spr->width,enc->objs[i]->obj->spr->spr->sprite->height},enc->objs[i]->obj->color); + } + if (ENCOUNTER_SELECTED==enc->id) { + DrawRectDecal(drawpos,{16,24},YELLOW); + } + DrawStringDecal({drawpos.x+2,drawpos.y+24-GetTextSize(std::to_string(enc->id)).y},std::to_string(enc->id),WHITE,{12.0/GetTextSize(std::to_string(enc->id)).x,1.0}); + drawpos.x+=16; + if (drawpos.x>=WIDTH) { + drawpos.x=0; + drawpos.y+=24; + } + counter++; + } + }break; } if (messageBoxVisible) { SetDrawTarget(layer::INTERFACE); diff --git a/states.h b/states.h index 75ebfbd..cb016b8 100644 --- a/states.h +++ b/states.h @@ -3,6 +3,7 @@ namespace GameState{ EDITOR, TILE_SELECT, OBJ_SELECT, + ENCOUNTER_SELECT, GAME_WORLD, }; } \ No newline at end of file