Cutscene management implemented

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 20613f37c3
commit 1636be889b
  1. 61
      SeasonsOfLoneliness.cpp
  2. BIN
      Seasons_of_Loneliness

@ -6,6 +6,7 @@ using namespace std;
enum GAMESTATE{ enum GAMESTATE{
CUTSCENE_1, CUTSCENE_1,
CUTSCENE_2,
GAMEWORLD GAMEWORLD
}; };
@ -15,6 +16,10 @@ enum TILES{
WATER WATER
}; };
enum CUTSCENE{
PAN_DOME,
};
#define WIDTH 256 #define WIDTH 256
#define HEIGHT 224 #define HEIGHT 224
#define ALPHA_SCREEN1 128 #define ALPHA_SCREEN1 128
@ -37,7 +42,7 @@ public:
} }
public: public:
GAMESTATE GAME_STATE=GAMEWORLD; GAMESTATE GAME_STATE=CUTSCENE_1;
int textInd=0; int textInd=0;
int cursorX=0; int cursorX=0;
int transitionTime=0; int transitionTime=0;
@ -53,6 +58,10 @@ public:
olc::Decal*TILES; olc::Decal*TILES;
float PLAYER_COORDS[2] = {}; float PLAYER_COORDS[2] = {};
std::vector<Object> OBJECTS; std::vector<Object> OBJECTS;
bool CUTSCENE_ACTIVE=false;
CUTSCENE CURRENT_CUTSCENE=PAN_DOME;
int CUTSCENE_TIMER=0;
bool CUTSCENE_FLAGS[8];
olc::Decal*DOME_DECAL; olc::Decal*DOME_DECAL;
std::map<std::string,olc::Decal*> BASE_OBJECTS; std::map<std::string,olc::Decal*> BASE_OBJECTS;
@ -141,6 +150,7 @@ public:
updateGame(); updateGame();
} }
if (!CUTSCENE_ACTIVE) {
if (GetKey(olc::D).bHeld||GetKey(olc::RIGHT).bHeld) { if (GetKey(olc::D).bHeld||GetKey(olc::RIGHT).bHeld) {
PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]+MOVE_SPD,0.0,(double)MAP_WIDTH); PLAYER_COORDS[0]=clamp(PLAYER_COORDS[0]+MOVE_SPD,0.0,(double)MAP_WIDTH);
} }
@ -153,6 +163,7 @@ public:
if (GetKey(olc::S).bHeld||GetKey(olc::DOWN).bHeld) { if (GetKey(olc::S).bHeld||GetKey(olc::DOWN).bHeld) {
PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]+MOVE_SPD,0.0,(double)MAP_HEIGHT); PLAYER_COORDS[1]=clamp(PLAYER_COORDS[1]+MOVE_SPD,0.0,(double)MAP_HEIGHT);
} }
}
drawGame(); drawGame();
// called once per frame // called once per frame
@ -162,9 +173,8 @@ public:
void fadeOutCompleted() { void fadeOutCompleted() {
switch (GAME_STATE) { switch (GAME_STATE) {
case CUTSCENE_1:{ case CUTSCENE_1:{
GAME_STATE=GAMEWORLD; GAME_STATE=CUTSCENE_2;
PLAYER_COORDS[0]=21; PlayCutscene(PAN_DOME);
PLAYER_COORDS[1]=17;
fadeIn(); fadeIn();
}break; }break;
} }
@ -174,8 +184,25 @@ public:
} }
void PlayCutscene(CUTSCENE scene) {
switch (scene) {
case PAN_DOME:{
PLAYER_COORDS[0]=14;
PLAYER_COORDS[1]=18+(64/2/32);
}break;
}
for (int i=0;i<8;i++) {
CUTSCENE_FLAGS[i]=false;
}
CUTSCENE_ACTIVE=true;
CUTSCENE_TIMER=0;
}
void updateGame(){ void updateGame(){
frameCount++; frameCount++;
if (CUTSCENE_ACTIVE) {
CUTSCENE_TIMER++;
}
if (fade&&transparency<255) { if (fade&&transparency<255) {
transparency=clamp(transparency+FADE_SPD,0,255); transparency=clamp(transparency+FADE_SPD,0,255);
if (transparency==255) { if (transparency==255) {
@ -214,6 +241,21 @@ public:
} }
} }
}break; }break;
case CUTSCENE_2:{
//FLAG 0 - When flipped on, camera stops.
if (!CUTSCENE_FLAGS[0]) {
PLAYER_COORDS[0]+=0.06;
} else {
if (CUTSCENE_TIMER>120) {
fadeOut();
}
}
if (PLAYER_COORDS[0]>38+(128/2/32)) {
PLAYER_COORDS[0]=38+(128/2/32);
CUTSCENE_FLAGS[0]=true;
CUTSCENE_TIMER=0;
}
}break;
} }
} }
@ -231,7 +273,15 @@ public:
GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2}); GradientFillRectDecal({0,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2});
GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1}); GradientFillRectDecal({WIDTH/2,HEIGHT/2},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1});
}break; }break;
case CUTSCENE_2:
case GAMEWORLD:{ case GAMEWORLD:{
DrawGameWorld();
}break;
}
FillRectDecal({0,0},{WIDTH,HEIGHT},olc::Pixel(0,0,0,transparency));
}
void DrawGameWorld() {
for (int y=-1;y<=HEIGHT/32;y++) { for (int y=-1;y<=HEIGHT/32;y++) {
for (int x=-1;x<=WIDTH/32;x++) { for (int x=-1;x<=WIDTH/32;x++) {
int xOffset=PLAYER_COORDS[0]-(WIDTH/64); int xOffset=PLAYER_COORDS[0]-(WIDTH/64);
@ -244,9 +294,6 @@ public:
for (auto&obj:OBJECTS) { for (auto&obj:OBJECTS) {
DrawDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},obj.spr); DrawDecal({(obj.x-PLAYER_COORDS[0])*32+WIDTH/2,(obj.y-PLAYER_COORDS[1])*32+HEIGHT/2},obj.spr);
} }
}break;
}
FillRectDecal({0,0},{WIDTH,HEIGHT},olc::Pixel(0,0,0,transparency));
} }
void fadeOut() { void fadeOut() {

Binary file not shown.
Loading…
Cancel
Save