diff --git a/SeasonsOfLoneliness.cpp b/SeasonsOfLoneliness.cpp index 25b0b0c..3aa2e31 100644 --- a/SeasonsOfLoneliness.cpp +++ b/SeasonsOfLoneliness.cpp @@ -1,6 +1,8 @@ #define OLC_PGE_APPLICATION #include "pixelGameEngine.h" #include "data.h" +#define OLC_PGEX_SPLASHSCREEN +#include "splash.h" using namespace std; @@ -48,7 +50,7 @@ public: } public: - GAMESTATE GAME_STATE=GAMEWORLD; + GAMESTATE GAME_STATE=CUTSCENE_1; int textInd=0; int cursorX=0; int transitionTime=0; @@ -79,6 +81,7 @@ public: int foodCount=3; bool oxygenMeterVisible=false; int oxygenQualityLevel=34; + olc::SplashScreen splash; olc::Decal*DOME_DECAL,*FOOD_METER_DECAL,*OXYGEN_METER_DECAL; std::map BASE_OBJECTS; @@ -143,6 +146,7 @@ public: { SetPixelMode(olc::Pixel::ALPHA); //ConsoleCaptureStdOut(true); + //ConsoleShow(olc::F1,false); // Called once at the start, so create things here TILES=new olc::Decal(new olc::Sprite("assets/tiles.png")); DOME_DECAL=new olc::Decal(new olc::Sprite("assets/dome.png")); diff --git a/Seasons_of_Loneliness b/Seasons_of_Loneliness index 177e6ae..68abca0 100755 Binary files a/Seasons_of_Loneliness and b/Seasons_of_Loneliness differ diff --git a/splash.h b/splash.h new file mode 100644 index 0000000..71c19f1 --- /dev/null +++ b/splash.h @@ -0,0 +1,154 @@ +#pragma once + +#include "pixelGameEngine.h" + +namespace olc +{ + class SplashScreen : public olc::PGEX + { + public: + SplashScreen(); + + protected: + virtual void OnAfterUserCreate() override; + virtual bool OnBeforeUserUpdate(float& fElapsedTime) override; + + private: + olc::Renderable spr; + std::vector> vBoom; + olc::vf2d vScale; + olc::vf2d vPosition; + float fParticleTime = 0.0f; + float fAspect = 0.0f; + bool bComplete = false; + }; + + +} + +#ifdef OLC_PGEX_SPLASHSCREEN +#undef OLC_PGEX_SPLASHSCREEN + +namespace olc +{ + SplashScreen::SplashScreen() : olc::PGEX(true) + { + } + + void SplashScreen::OnAfterUserCreate() + { + const char logo[] = + "000000000000000000000000000000000000000000000000000000000000000000005" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED1EE" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED5EEE" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE@E@000" + "0000000000000000000000000000000000000000000000000000000000001E1D:ZZZZ" + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ1D5BZZZZZZ" + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ5@E:P0002Z0" + "02ZZX000000000000ZP0000000000000000000000000000ZX000Z002XE1DX?o`o:Poo" + "800SooaE5@E1ED5BX?ol5E@E0E1ED?oo5@E1ED5DE1D5E@ZQEEBPEE2QD5BSooclZ?olQ" + "AB?oo5DEEDEEDE:SooaEEAE5DEEDoolEADEEDEAE5AEEBZ5EE:5EE:5@E:?oo?bXoob55" + "8o3lEAEEAD5ADZ?oo5@E5EEAD5Cl01E5AD5AE5DE5@E:X01DXEEDXE1DXo3lo:Sl0800S" + "ooaE1ED5EE5BXo00EEDEEE5EE?oo5EE5EE5DEEDEEDZQEEBQD5BQD5BSl?cl0?`0ZZZ?o" + "o5D5E@EEDE03loaEEAEEDEEDoolEED5EDEAEEAEEBZ5EE:5@E:5@E:?oo?oloob008o00" + "EAEEAD01EE?co5EE5EEAD03l01DE@05AE5AE5@0:XE000EEDXE1DXooloocoo8DDSlZQE" + "5EE5EE5EDoolE1DE4E5EE?oo5AE5EE5DE5DEEDZQEEAAEEBQD5BPoo3oo3olQAB?bZ5DE" + "1D5EDEE@ooaD5AD1D5EDoolE1DEE@EAD5@EEBZ5EE51ED:5@E:P000000020080:X0000" + "00000000000000000000000000000000000:X0000002XE1DZZZZZZZZZZZZZZZZZZZZZ" + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZQD5@ZZZZZZZZZZZZZZZZZZZZZZ" + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZX5@E@00000000000000000000000" + "00000000000000000000000000000000000000001E1EEEEEEEEEEEEEEEEEEEEEEEEEE" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED5EEEEEEEEEEEEEEEEEEEEEEEEEEE" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE@5EEEEEEEEEEEEEEEEEEEEEEEEEEEE" + "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED0000000000000000000000000000000" + "0000000000000000000000000000000000000"; + + spr.Create(203, 24); + int px = 0, py = 0; + for (size_t b = 0; b < 1624; b += 4) + { + uint32_t sym1 = (uint32_t)logo[b + 0] - 48; + uint32_t sym2 = (uint32_t)logo[b + 1] - 48; + uint32_t sym3 = (uint32_t)logo[b + 2] - 48; + uint32_t sym4 = (uint32_t)logo[b + 3] - 48; + uint32_t r = sym1 << 18 | sym2 << 12 | sym3 << 6 | sym4; + + for (int i = 0; i < 12; i++) + { + olc::Pixel p = olc::RED; + switch ((r & 0xC00000) >> 22) + { + case 0: p = olc::Pixel(0, 0, 0, 255); break; + case 1: p = olc::Pixel(255, 255, 255, 255); break; + case 2: p = olc::Pixel(255, 120, 26, 255); break; + case 3: p = olc::Pixel(79, 193, 255, 255); break; + } + spr.Sprite()->SetPixel(px, py, p); + if (++px == 203) { py++; px = 0; } + r <<= 2; + } + } + + spr.Decal()->Update(); + vBoom.resize(spr.Sprite()->width * spr.Sprite()->height); + vScale = { float(pge->ScreenWidth()) / 500.0f, float(pge->ScreenWidth()) / 500.0f }; + fAspect = float(pge->ScreenWidth()) / float(pge->ScreenHeight()); + vPosition = olc::vf2d( + (250 - spr.Sprite()->width) / 2.0f, + (250 - spr.Sprite()->height) / 2.0f / fAspect); + for (int y = 0; y < spr.Sprite()->height; y++) + for (int x = 0; x < spr.Sprite()->width; x++) + vBoom[y * spr.Sprite()->width + x] = std::make_pair( + vPosition + olc::vf2d(x, y), + olc::vf2d( + (float(rand()) / float(RAND_MAX)) * 10.0f - 5.0f, + (float(rand()) / float(RAND_MAX)) * 10.0f - 5.0f) + ); + } + + bool SplashScreen::OnBeforeUserUpdate(float& fElapsedTime) + { + if (bComplete) return false; + + fParticleTime += fElapsedTime; + + for (int y = 0; y < spr.Sprite()->height; y++) + for (int x = 0; x < spr.Sprite()->width; x++) + { + + + if (fParticleTime < 1.0f) + { + + } + else if (fParticleTime < 2.0f) + { + vBoom[y * spr.Sprite()->width + x].first = + olc::vf2d( + (250 - spr.Sprite()->width) / 2.0f + float(x), + (250 - spr.Sprite()->height) / 2.0f / fAspect + float(y) + ) + + olc::vf2d( + (float(rand()) / float(RAND_MAX)) * 0.5f - 0.25f, + (float(rand()) / float(RAND_MAX)) * 0.5f - 0.25f); + } + else if(fParticleTime < 5.0f) + { + vBoom[y * spr.Sprite()->width + x].first += vBoom[y * spr.Sprite()->width + x].second * fElapsedTime * 20.0f; + } + else + { + bComplete = true; + } + + pge->DrawPartialDecal(vScale * vBoom[y * spr.Sprite()->width + x].first * 2.0f, spr.Decal(), olc::vf2d(x, y), { 1, 1 }, vScale * 2.0f, olc::PixelF(1.0f, 1.0f, 1.0f, std::min(1.0f, std::max(4.0f - fParticleTime, 0.0f)))); + } + + olc::vi2d vSize = pge->GetTextSizeProp("Copyright OneLoneCoder.com 2022"); + pge->DrawStringPropDecal(olc::vf2d(float(pge->ScreenWidth()/2) - vSize.x/2, float(pge->ScreenHeight()) - vSize.y * 3.0f), "Copyright OneLoneCoder.com 2022", olc::PixelF(1.0f, 1.0f, 1.0f, 0.5f), olc::vf2d(1.0, 2.0f)); + return true; + } + +} + +#endif \ No newline at end of file