olc::CodeJam 2022 Entry #olcCodeJam2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Seasons-Of-Loneliness/SeasonsOfLoneliness.cpp

133 lines
3.3 KiB

2 years ago
#define OLC_PGE_APPLICATION
#include "pixelGameEngine.h"
#include "data.h"
2 years ago
using namespace std;
enum GAMESTATE{
CUTSCENE_1,
GAMEWORLD
};
#define WIDTH 256
#define HEIGHT 224
#define ALPHA_SCREEN1 128
#define ALPHA_SCREEN2 20
class SeasonsOfLoneliness : public olc::PixelGameEngine
2 years ago
{
public:
SeasonsOfLoneliness()
2 years ago
{
sAppName = "Seasons of Loneliness";
2 years ago
}
public:
GAMESTATE GAME_STATE=CUTSCENE_1;
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 = "";
2 years ago
bool OnUserCreate() override
{
SetPixelMode(olc::Pixel::ALPHA);
//ConsoleCaptureStdOut(true);
2 years ago
// Called once at the start, so create things here
return true;
}
bool GetAnyKey() {
cout << "Something has changed.";
}
2 years ago
bool OnUserUpdate(float fElapsedTime) override
{
elapsedTime+=fElapsedTime;
while (elapsedTime>TARGET_RATE) {
elapsedTime-=TARGET_RATE;
updateGame();
}
drawGame();
2 years ago
// called once per frame
return true;
}
void updateGame(){
frameCount++;
if (fade&&transparency>0) {
transparency--;
} else
if (!fade&&transparency<255) {
transparency++;
}
switch (GAME_STATE) {
case CUTSCENE_1:{
if (textInd<STORY_TEXT1.length()) {
char c = STORY_TEXT1[textInd++];
CUTSCENE_CONSOLE_TEXT+=c;
if (c!='\n') {
cursorX++;
} else {
cursorX=0;
}
if (GetTextSize(CUTSCENE_CONSOLE_TEXT).x>WIDTH-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<textInd) {
CUTSCENE_CONSOLE_TEXT+=STORY_TEXT1[tempIndex++];
cursorX++;
}
}
}
}break;
}
}
void drawGame(){
switch (GAME_STATE) {
FillRectDecal({0,0},{WIDTH,HEIGHT},olc::Pixel(0,0,0,transparency));
case CUTSCENE_1:{
DrawStringDecal({16,16},CUTSCENE_CONSOLE_TEXT,olc::GREEN,{1,1});
if (textInd<STORY_TEXT1.length()) {
FillRectDecal({16+(cursorX)*8%(WIDTH-32),8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0)},{4,8},olc::GREEN);
} else {
FillRectDecal({16+(cursorX)*8%(WIDTH-32),8+GetTextSize(CUTSCENE_CONSOLE_TEXT).y+((cursorX==28)?8:0)},{4,8},olc::Pixel(0,255,0,(0.5*sin(frameCount*4/60.0)+0.5)*256));
}
GradientFillRectDecal({0,0},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1});
GradientFillRectDecal({WIDTH/2,0},{WIDTH/2,HEIGHT/2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN2},{20, 28, 22,ALPHA_SCREEN1},{20, 28, 22,ALPHA_SCREEN1});
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});
}break;
}
}
void fadeOut() {
fade=true;
}
void fadeIn() {
fade=false;
}
2 years ago
};
int main()
{
SeasonsOfLoneliness demo;
if (demo.Construct(256, 224, 4, 4))
2 years ago
demo.Start();
return 0;
}