#define OLC_PGE_APPLICATION #include "pixelGameEngine.h" #include "data.h" using namespace std; enum GAMESTATE{ CUTSCENE_1, GAMEWORLD }; enum TILES{ DIRT, GRASS, WATER }; #define WIDTH 256 #define HEIGHT 224 #define ALPHA_SCREEN1 128 #define ALPHA_SCREEN2 20 #define FADE_SPD 6 #define MOVE_SPD 0.01 class SeasonsOfLoneliness : public olc::PixelGameEngine { public: SeasonsOfLoneliness() { sAppName = "Seasons of Loneliness"; } public: GAMESTATE GAME_STATE=GAMEWORLD; int textInd=0; int cursorX=0; int transitionTime=0; bool fade=false; int transparency=0; int frameCount=0; float elapsedTime=0; const float TARGET_RATE = 1/60.0; std::string CUTSCENE_CONSOLE_TEXT = ""; int**MAP=NULL; int MAP_WIDTH=-1; int MAP_HEIGHT=-1; olc::Decal*TILES; float PLAYER_COORDS[2] = {}; void LoadMap(char*mapName) { std::ifstream f("assets/maps/map1"); std::string data; MAP_WIDTH=MAP_HEIGHT=-1; if (MAP!=NULL) { for (int y=0;y>data; if (MAP_WIDTH==-1) { std::stringstream stream(data); stream>>MAP_WIDTH; } else if (MAP_HEIGHT==-1) { std::stringstream stream(data); stream>>MAP_HEIGHT; } else { if (MAP==NULL) { MAP=(int**)malloc(sizeof(int**)*MAP_HEIGHT); } MAP[y]=(int*)malloc(sizeof(int*)*MAP_WIDTH); for (int i=0;i=STORY_TEXT1.length()) { fadeOut(); } }break; } } bool OnUserUpdate(float fElapsedTime) override { elapsedTime+=fElapsedTime; while (elapsedTime>TARGET_RATE) { elapsedTime-=TARGET_RATE; updateGame(); } if (GetKey(olc::D).bHeld||GetKey(olc::RIGHT).bHeld) { PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]+MOVE_SPD,0.0,(double)MAP_WIDTH); } if (GetKey(olc::A).bHeld||GetKey(olc::LEFT).bHeld) { PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]-MOVE_SPD,0.0,(double)MAP_WIDTH); } if (GetKey(olc::W).bHeld||GetKey(olc::UP).bHeld) { PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]-MOVE_SPD,0.0,(double)MAP_HEIGHT); } if (GetKey(olc::S).bHeld||GetKey(olc::DOWN).bHeld) { PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]+MOVE_SPD,0.0,(double)MAP_HEIGHT); } drawGame(); // called once per frame return true; } void fadeOutCompleted() { switch (GAME_STATE) { case CUTSCENE_1:{ GAME_STATE=GAMEWORLD; PLAYER_COORDS[0]=21; PLAYER_COORDS[1]=17; fadeIn(); }break; } } void fadeInCompleted() { } void updateGame(){ frameCount++; if (fade&&transparency<255) { transparency=clamp(transparency+FADE_SPD,0,255); if (transparency==255) { fadeOutCompleted(); } } else if (!fade&&transparency>0) { transparency=clamp(transparency-FADE_SPD,0,255); if (transparency==0) { fadeInCompleted(); } } switch (GAME_STATE) { case CUTSCENE_1:{ if (textIndWIDTH-32) { int tempIndex=textInd; while (CUTSCENE_CONSOLE_TEXT[--tempIndex]!=' ') { CUTSCENE_CONSOLE_TEXT.erase(tempIndex); cursorX--; } CUTSCENE_CONSOLE_TEXT.erase(tempIndex++); CUTSCENE_CONSOLE_TEXT+='\n'; cursorX=0; while (tempIndex=0&&xOffset+x=0&&yOffset+y