|
|
|
#define OLC_PGE_APPLICATION
|
|
|
|
#include "pixelGameEngine.h"
|
|
|
|
#include "data.h"
|
|
|
|
|
|
|
|
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
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
SeasonsOfLoneliness()
|
|
|
|
{
|
|
|
|
sAppName = "Seasons of Loneliness";
|
|
|
|
}
|
|
|
|
|
|
|
|
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 = "";
|
|
|
|
|
|
|
|
bool OnUserCreate() override
|
|
|
|
{
|
|
|
|
SetPixelMode(olc::Pixel::ALPHA);
|
|
|
|
//ConsoleCaptureStdOut(true);
|
|
|
|
// Called once at the start, so create things here
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool GetAnyKey() {
|
|
|
|
cout << "Something has changed.";
|
|
|
|
}
|
|
|
|
|
|
|
|
bool OnUserUpdate(float fElapsedTime) override
|
|
|
|
{
|
|
|
|
elapsedTime+=fElapsedTime;
|
|
|
|
while (elapsedTime>TARGET_RATE) {
|
|
|
|
elapsedTime-=TARGET_RATE;
|
|
|
|
updateGame();
|
|
|
|
}
|
|
|
|
|
|
|
|
drawGame();
|
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
{
|
|
|
|
SeasonsOfLoneliness demo;
|
|
|
|
if (demo.Construct(256, 224, 4, 4))
|
|
|
|
demo.Start();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|