From 8198922b43936ab5cc42e63e5b9ba9b084ca78ff Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 6 Sep 2020 01:50:48 +0100 Subject: [PATCH] forgot to commit, lighting and animations --- TODO | 12 +- The Great Machine/Camera.hpp | 2 +- The Great Machine/Collisions.cpp | 18 +- The Great Machine/Dungeon.cpp | 194 ++++++++-- The Great Machine/Dungeon.hpp | 5 +- The Great Machine/The Great Machine.vcxproj | 1 + .../The Great Machine.vcxproj.filters | 3 + The Great Machine/Things.hpp | 8 +- The Great Machine/main.cpp | 4 +- The Great Machine/olcPGEX_AnimatedSprite.hpp | 354 ++++++++++++++++++ The Great Machine/res/player.png | Bin 0 -> 36945 bytes res/player.png | Bin 0 -> 36945 bytes 12 files changed, 557 insertions(+), 44 deletions(-) create mode 100644 The Great Machine/olcPGEX_AnimatedSprite.hpp create mode 100644 The Great Machine/res/player.png create mode 100644 res/player.png diff --git a/TODO b/TODO index ad047c8..082d6ab 100644 --- a/TODO +++ b/TODO @@ -4,12 +4,12 @@ # Today -[-] Lighting (and torches) -[ ] Lighting flicker (fire) -[ ] NO TIME raytraced lighting -[ ] Fix collision -[ ] Better player spritesheet -[ ] Animation system +[x] Lighting (and torches) +[x] Lighting flicker (fire) +[d] Raytraced lighting +[d] Fix collision +[x] Better player spritesheet +[x] Animation system [ ] Enemies / AI [ ] Dungeon fixed entity spawning [ ] Enemy AI diff --git a/The Great Machine/Camera.hpp b/The Great Machine/Camera.hpp index baa3d16..8be6442 100644 --- a/The Great Machine/Camera.hpp +++ b/The Great Machine/Camera.hpp @@ -22,7 +22,7 @@ class Camera Entity* _Track = nullptr; olc::vi2d _DesiredCoords; - float _SmoothSpeed = 0.025f; + float _SmoothSpeed = 0.015f; }; diff --git a/The Great Machine/Collisions.cpp b/The Great Machine/Collisions.cpp index 4b3229e..2f9fc34 100644 --- a/The Great Machine/Collisions.cpp +++ b/The Great Machine/Collisions.cpp @@ -7,6 +7,10 @@ bool EntityCollide(Entity* entity, std::vector& nearby, int tileSize, CollisionInfo* info, olc::PixelGameEngine* engine) { + static bool ShowCollisionDebug = false; + if (engine->GetKey(olc::P).bPressed) + ShowCollisionDebug = !ShowCollisionDebug; + if (!entity->HitBox) return false; static Logger& _Logger = Logger::getInstance(); @@ -16,19 +20,21 @@ bool EntityCollide(Entity* entity, std::vector& nearby, int tileSize, Col float entityX = static_cast(entity->Coords.x - entity->TrackingCamera->Coords.x); float entityY = static_cast(entity->Coords.y - entity->TrackingCamera->Coords.y); - float entityW = static_cast(tileSize / 3.0f) * 2.0f; - float entityH = static_cast(tileSize / 3.0f) * 2.0f; + float entityW = static_cast(entity->HitBox->w); + float entityH = static_cast(entity->HitBox->h); int entityLeft = static_cast(entityX); int entityRight = static_cast(entityX + entityW); int entityTop = static_cast(entityY); int entityBottom = static_cast(entityY + entityH); - //engine->DrawRect({(entity->HitBox->x + (int)entity->Coords.x) - (int)entity->TrackingCamera->Coords.x, (entity->HitBox->y + (int)entity->Coords.y) - (int)entity->TrackingCamera->Coords.y}, {entity->HitBox->w, entity->HitBox->h}, olc::RED); + if (ShowDebug) + engine->DrawRect(entityX, entityY, entityW, entityH, olc::RED); for (auto tile : nearby) { - //engine->DrawRect({ static_cast(static_cast((tile->Coords.x * tileSize) - entity->TrackingCamera->Coords.x)), static_cast(static_cast((tile->Coords.y * tileSize) - entity->TrackingCamera->Coords.y)) }, {tileSize, tileSize}, olc::BLUE); + if (ShowDebug) + engine->DrawRect({ static_cast(static_cast((tile->Coords.x * tileSize) - entity->TrackingCamera->Coords.x)), static_cast(static_cast((tile->Coords.y * tileSize) - entity->TrackingCamera->Coords.y)) }, {tileSize, tileSize}, olc::BLUE); // return if not collidable if (!tile->IsSolid) continue; @@ -45,7 +51,8 @@ bool EntityCollide(Entity* entity, std::vector& nearby, int tileSize, Col bool collision = xOverlaps && yOverlaps; - //engine->FillRect({static_cast(static_cast((tile->Coords.x * tileSize) - entity->TrackingCamera->Coords.x)), static_cast(static_cast((tile->Coords.y * tileSize) - entity->TrackingCamera->Coords.y))}, {tileSize, tileSize}, collision ? olc::RED : olc::BLUE); + if (ShowDebug) + engine->FillRect({static_cast(static_cast((tile->Coords.x * tileSize) - entity->TrackingCamera->Coords.x)), static_cast(static_cast((tile->Coords.y * tileSize) - entity->TrackingCamera->Coords.y))}, {tileSize, tileSize}, collision ? olc::RED : olc::BLUE); if (!collision) continue; @@ -59,6 +66,5 @@ bool EntityCollide(Entity* entity, std::vector& nearby, int tileSize, Col } return false; - } diff --git a/The Great Machine/Dungeon.cpp b/The Great Machine/Dungeon.cpp index b79025c..a818356 100644 --- a/The Great Machine/Dungeon.cpp +++ b/The Great Machine/Dungeon.cpp @@ -3,14 +3,73 @@ #include #include +#include "olcPixelGameEngine.hpp" +#include "olcPGEX_AnimatedSprite.hpp" + #include "Collisions.hpp" #include "Things.hpp" #include "Camera.hpp" #include "Logger.hpp" + +void PerlinNoise1D(int nCount, float *fSeed, int nOctaves, float fBias, float *fOutput) +{ + // Used 1D Perlin Noise + for (int x = 0; x < nCount; x++) + { + float fNoise = 0.0f; + float fScaleAcc = 0.0f; + float fScale = 1.0f / fBias; + + for (int o = 0; o < nOctaves; o++) + { + int nPitch = nCount >> o; + int nSample1 = (x / nPitch) * nPitch; + int nSample2 = (nSample1 + nPitch) % nCount; + + float fBlend = (float)(x - nSample1) / (float)nPitch; + + float fSample = (1.0f - fBlend) * fSeed[nSample1] + fBlend * fSeed[nSample2]; + + fScaleAcc += fScale; + fNoise += fSample * fScale; + // fScale = fScale / fBias; + } + + // Scale to seed range + fOutput[x] = fNoise / fScaleAcc; + } +} + +static int perlinSize = 10000; +static float* perlinSeed; +static float* perlinOutput; + +void SetupPerlin() +{ + perlinSeed = (float*)malloc(sizeof(float) * perlinSize); + perlinOutput = (float*)malloc(sizeof(float) * perlinSize); + for (int i = 0; i < perlinSize; i++) + perlinSeed[i] = static_cast(rand()) / static_cast(RAND_MAX); + + PerlinNoise1D(perlinSize, perlinSeed, 8, 2.0f, perlinOutput); +} + +float GetNextPerlin() +{ + static int i = 0; + i++; + if (i > perlinSize) + i = 0; + return perlinOutput[i]; +} + + Dungeon::Dungeon() : _Logger(Logger::getInstance()) { + SetupPerlin(); + ActiveCamera = new Camera(); ActiveCamera->Coords = { 0, 0 }; ActiveCamera->ViewPort = { 1280, 720 }; @@ -21,7 +80,45 @@ Dungeon::Dungeon() Player->Type = EEntity::Type::Player; // Relative to player TL corner // not really used ? lol - Player->HitBox = new Collider{ 0, 0, static_cast((static_cast(TileSize) / 3.0f) * 2.0f), static_cast((static_cast(TileSize) / 3.0f) * 2.0f) } ; + Player->HitBox = new Collider{ 0, 0, 28, 36 } ; + + Player->Renderable = new olc::Renderable(); + Player->Renderable->Load("res/player.png"); + Player->Animator = new olc::AnimatedSprite(); + Player->Animator->mode = olc::AnimatedSprite::SPRITE_MODE::SINGLE; + Player->Animator->type = olc::AnimatedSprite::SPRITE_TYPE::DECAL; + Player->Animator->spriteSheet = Player->Renderable; + Player->Animator->SetSpriteSize({28, 36}); + + Player->Animator->AddState("idle", std::vector{ + {28, 0} + }); + + Player->Animator->AddState("north", std::vector{ + {0, 110}, + {28, 110}, + {56, 110}, + {84, 110} + }); + Player->Animator->AddState("east", std::vector{ + {0, 36}, + {28, 36}, + {56, 36}, + {84, 36} + }); + Player->Animator->AddState("south", std::vector{ + {0, 0}, + {28, 0}, + {56, 0}, + {84, 0} + }); + Player->Animator->AddState("west", std::vector{ + {0, 72}, + {28, 72}, + {56, 72}, + {84, 72} + }); + Player->Animator->SetState("idle"); ActiveCamera->TrackEntity(Player); ActiveCamera->Update(0.0f); @@ -193,38 +290,76 @@ void Dungeon::SpawnEntity(Entity* entity) void Dungeon::Input(olc::PixelGameEngine* engine, float fTime) { + olc::vf2d oldCoords = Player->Coords; + static std::string state = "idle"; + static std::string lastState = "idle"; + if (engine->GetKey(olc::W).bHeld) + { Player->Coords.y -= static_cast(TileSize) * (fTime * Player->Speed); + if (state != "north") + state = "north"; + } if (engine->GetKey(olc::A).bHeld) + { Player->Coords.x -= static_cast(TileSize) * (fTime * Player->Speed); + if (state != "west") + state = "west"; + } if (engine->GetKey(olc::S).bHeld) + { Player->Coords.y += static_cast(TileSize) * (fTime * Player->Speed); + if (state != "south") + state = "south"; + } if (engine->GetKey(olc::D).bHeld) + { Player->Coords.x += static_cast(TileSize) * (fTime * Player->Speed); + if (state != "east") + state = "east"; + } if (engine->GetKey(olc::W).bHeld && engine->GetKey(olc::A).bHeld) { Player->Coords.y += static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); Player->Coords.x += static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); + if (state != "west") + state = "west"; + } if (engine->GetKey(olc::W).bHeld && engine->GetKey(olc::D).bHeld) { Player->Coords.y += static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); Player->Coords.x -= static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); + if (state != "east") + state = "east"; + } if (engine->GetKey(olc::S).bHeld && engine->GetKey(olc::D).bHeld) { Player->Coords.y -= static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); Player->Coords.x -= static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); + if (state != "east") + state = "east"; } if (engine->GetKey(olc::S).bHeld && engine->GetKey(olc::A).bHeld) { Player->Coords.y -= static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); Player->Coords.x += static_cast(TileSize) * (fTime * (Player->Speed / 3.0f)); + if (state != "west") + state = "west"; } + if (oldCoords == Player->Coords) + state = "idle"; + if (state != lastState) + Player->Animator->SetState(state); + lastState = state; + + + // Map collisions olc::vi2d currentTile = { static_cast(Player->Coords.x / TileSize), static_cast(Player->Coords.y / TileSize) }; @@ -304,7 +439,7 @@ olc::Pixel pixelMultiply(const int x, const int y, const olc::Pixel& pSource, co return ret; } -void Dungeon::Draw(olc::PixelGameEngine* engine) +void Dungeon::Draw(olc::PixelGameEngine* engine, float fTime) { // Maps not gonna be big enough for me to care about optimistaion // maybe i should care? i don't @@ -312,57 +447,65 @@ void Dungeon::Draw(olc::PixelGameEngine* engine) // Entities are always (tilesize / 3) * 2 // Dungeon Layer - engine->SetDrawTarget(4); + engine->SetDrawTarget(3); engine->Clear({38, 36, 40}); engine->SetPixelMode(olc::Pixel::ALPHA); for (std::pair tile : DungeonTiles) - { - // if (tile.second->Type == ETile::Type::Void) continue; engine->DrawPartialDecal({ static_cast((tile.first.x * TileSize) - ActiveCamera->Coords.x), static_cast((tile.first.y * TileSize) - ActiveCamera->Coords.y) }, { static_cast(TileSize), static_cast(TileSize) }, TileSet->Decal(), TileSetDictionary->Dictionary[tile.second->Type], { 16, 16 }); - } - // engine->SetPixelMode(olc::Pixel::NORMAL); // Entity Layer - engine->SetDrawTarget(3); + engine->SetDrawTarget(2); engine->Clear(olc::BLANK); // Draw character - engine->DrawPartialDecal({ static_cast(Player->Coords.x - ActiveCamera->Coords.x), static_cast(Player->Coords.y - ActiveCamera->Coords.y) }, - { (static_cast(TileSize) / 3.0f) * 2.0f, (static_cast(TileSize) / 3.0f) * 2.0f }, TileSet->Decal(), { 143, 130 }, { 16, 16 }); + Player->Animator->Draw(fTime, {Player->Coords.x - ActiveCamera->Coords.x, Player->Coords.y - ActiveCamera->Coords.y}); // Lighting layers - engine->SetDrawTarget(2); + engine->SetDrawTarget(1); engine->Clear(olc::BLANK); static std::function fPixelMultiply = pixelMultiply; - float lightX = static_cast(Player->Coords.x - ActiveCamera->Coords.x) - (FireOverlay->Sprite()->width / 2.0f); - float lightY = static_cast(Player->Coords.y - ActiveCamera->Coords.y) - (FireOverlay->Sprite()->height / 2.0f); + // loads to make it more chaotic + float lightScale = 1.4f + GetNextPerlin(); GetNextPerlin(); GetNextPerlin(); GetNextPerlin(); GetNextPerlin(); - float lightLeft = lightX; - float lightRight = lightX + FireOverlay->Sprite()->width; - float lightTop = lightY; - float lightBottom = lightY + FireOverlay->Sprite()->height; + float lightX = static_cast(Player->Coords.x - ActiveCamera->Coords.x) - ((FireOverlay->Sprite()->width * lightScale) / 2.0f); + float lightY = static_cast(Player->Coords.y - ActiveCamera->Coords.y) - ((FireOverlay->Sprite()->height * lightScale) / 2.0f); + + float lightLeft = lightX + 1.0f; + float lightRight = lightX + FireOverlay->Sprite()->width * lightScale - 1.0f; + float lightTop = lightY + 1.0f; + float lightBottom = lightY + FireOverlay->Sprite()->height * lightScale - 1.0f; + + // orange tint + engine->FillRectDecal({0.0f, 0.0f}, {static_cast(engine->ScreenWidth()), static_cast(engine->ScreenHeight())}, olc::Pixel(255, 123, 0, 30)); engine->SetPixelMode(fPixelMultiply); - engine->DrawDecal({ lightX, lightY }, FireOverlay->Decal()); - - engine->SetDrawTarget(1); - engine->Clear(olc::BLANK); - // top - - engine->FillRect({0, static_cast(lightTop)}, {engine->ScreenWidth(), engine->ScreenHeight()}, olc::BLACK); + engine->DrawDecal({ lightX, lightY }, FireOverlay->Decal(), {lightScale, lightScale}, olc::RED); + engine->SetPixelMode(olc::Pixel::ALPHA); + // top + engine->FillRectDecal({0.0f, 0.0f}, {static_cast(engine->ScreenWidth()), lightTop}, olc::BLACK); + // right + engine->FillRectDecal({lightRight, 0.0f}, {static_cast(engine->ScreenWidth()) - lightRight, static_cast(engine->ScreenHeight())}, olc::BLACK); + // bottom + engine->FillRectDecal({0.0f, lightBottom}, {static_cast(engine->ScreenWidth()), static_cast(engine->ScreenHeight()) - lightBottom}, olc::BLACK); + // left + engine->FillRectDecal({0.0f, 0.0f}, {lightLeft, static_cast(engine->ScreenHeight())}, olc::BLACK); } Dungeon::~Dungeon() { + delete Player->HitBox; + delete Player->Renderable; + delete Player->Animator; delete Player; + delete ActiveCamera; delete TileSetDictionary; delete TileSet; @@ -372,4 +515,7 @@ Dungeon::~Dungeon() delete entity.second; for (std::pair entity : FixedItems) delete entity.second; + + free(perlinSeed); + free(perlinOutput); } diff --git a/The Great Machine/Dungeon.hpp b/The Great Machine/Dungeon.hpp index 433d6a9..10d06fa 100644 --- a/The Great Machine/Dungeon.hpp +++ b/The Great Machine/Dungeon.hpp @@ -26,9 +26,9 @@ class Dungeon void Input(olc::PixelGameEngine* engine, float fTime); void Update(olc::PixelGameEngine* engine, float fTime); - void Draw(olc::PixelGameEngine* engine); + void Draw(olc::PixelGameEngine* engine, float fTime); - Playable* Player; + Playable* Player; Camera* ActiveCamera; int TileSize = 64; @@ -41,7 +41,6 @@ class Dungeon TileDictionary* TileSetDictionary; olc::Renderable* TileSet; - olc::Renderable* FireOverlay; ~Dungeon(); diff --git a/The Great Machine/The Great Machine.vcxproj b/The Great Machine/The Great Machine.vcxproj index 1db844f..3eb96a7 100644 --- a/The Great Machine/The Great Machine.vcxproj +++ b/The Great Machine/The Great Machine.vcxproj @@ -154,6 +154,7 @@ + diff --git a/The Great Machine/The Great Machine.vcxproj.filters b/The Great Machine/The Great Machine.vcxproj.filters index 798274f..e5f503e 100644 --- a/The Great Machine/The Great Machine.vcxproj.filters +++ b/The Great Machine/The Great Machine.vcxproj.filters @@ -59,5 +59,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/The Great Machine/Things.hpp b/The Great Machine/Things.hpp index dab04ef..fbf1499 100644 --- a/The Great Machine/Things.hpp +++ b/The Great Machine/Things.hpp @@ -5,6 +5,7 @@ #include #include "olcPixelGameEngine.hpp" +#include "olcPGEX_AnimatedSprite.hpp" class Camera; @@ -101,9 +102,10 @@ class Entity olc::vf2d Coords; EEntity::Type Type; Collider* HitBox; + // Does not own Camera* TrackingCamera; - olc::vf2d SpriteTextureMask; - olc::Renderable* SpriteMap; + olc::Renderable* Renderable; + olc::AnimatedSprite* Animator; }; class Item : public Entity @@ -122,7 +124,7 @@ class FixedItem : public Entity class Playable : public Entity { public: - float Speed = 10.0f; + float Speed = 4.0f; int SelectedInventoryItem = 0; std::array Inventory; }; diff --git a/The Great Machine/main.cpp b/The Great Machine/main.cpp index dd9a4fd..be0f8f7 100644 --- a/The Great Machine/main.cpp +++ b/The Great Machine/main.cpp @@ -2,6 +2,8 @@ #define OLC_PGE_APPLICATION #include "olcPixelGameEngine.hpp" +#define OLC_PGEX_ANIMSPR +#include "olcPGEX_AnimatedSprite.hpp" #include "Dungeon.hpp" @@ -60,7 +62,7 @@ class Game : public olc::PixelGameEngine _Dungeon->Update(this, fTime); - _Dungeon->Draw(this); + _Dungeon->Draw(this, fTime); for (int i = 0; i < 5; i++) EnableLayer(i, true); diff --git a/The Great Machine/olcPGEX_AnimatedSprite.hpp b/The Great Machine/olcPGEX_AnimatedSprite.hpp new file mode 100644 index 0000000..9c7295a --- /dev/null +++ b/The Great Machine/olcPGEX_AnimatedSprite.hpp @@ -0,0 +1,354 @@ +/* + olcPGEX_AnimatedSprite.h + + +-------------------------------------------------------------+ + | OneLoneCoder Pixel Game Engine Extension | + | AnimatedSprites - v2.0.0 | + +-------------------------------------------------------------+ + + What is this? + ~~~~~~~~~~~~~ + This is an extension to the olcPixelGameEngine, which provides + the ability to easily animate sprites with either a single + spritesheets or individual image files for each frame. + + Use of this extension requires the olcPGEX_Graphics2D extension. + + License (OLC-3) + ~~~~~~~~~~~~~~~ + + Copyright 2018 - 2019 OneLoneCoder.com + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions or derivations of source code must retain the above + copyright notice, this list of conditions and the following disclaimer. + + 2. Redistributions or derivative works in binary form must reproduce + the above copyright notice. This list of conditions and the following + disclaimer must be reproduced in the documentation and/or other + materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Links + ~~~~~ + Homepage: https://matthewhayward.co.uk + + Author + ~~~~~~ + Matt Hayward aka SaladinAkara + + Contributors + ~~~~~~~~~~~~ + 0xnicholasc - https://github.com/0xnicholasc + Moros1138 - https://github.com/Moros1138 +*/ + +#ifndef OLC_PGEX_ANIMATEDSPRITE +#define OLC_PGEX_ANIMATEDSPRITE + +namespace olc +{ + class AnimatedSprite : public olc::PGEX + { + public: + enum class SPRITE_MODE { + MULTI, + SINGLE + }; + enum class SPRITE_TYPE { + SPRITE, + DECAL + }; + enum class PLAY_MODE { + LOOP, + PING_PONG + }; + + public: + // Set current state of sprite + void SetState(std::string newState); + // Get current sprite state + std::string GetState(); + // Draw sprite + void Draw(float fElapsedTime, olc::vf2d position, uint8_t flip = olc::Sprite::Flip::NONE, olc::Pixel tint = olc::WHITE); + // Add state for sprite in SPRITE_MODE::MULTI with a specified frameDuration and playMode + void AddState(std::string stateName, float frameDuration, PLAY_MODE mode, std::vector imagePaths); + // Add state for sprite in SPRITE_MODE::SINGLE with a specified frameDuration and playMode + void AddState(std::string stateName, float frameDuration, PLAY_MODE mode, std::vector spriteLocations); + // Add state for sprite in SPRITE_MODE::MULTI using the default frameDuration and playMode + void AddState(std::string stateName, std::vector imagePaths); + // Add state for sprite in SPRITE_MODE::SINGLE using the default frameDuration and playMode + void AddState(std::string stateName, std::vector spriteLocations); + // Set size of sprite + void SetSpriteSize(olc::vi2d size); + // Get size of sprite + olc::vi2d GetSpriteSize(); + // Set sprite scale factor + void SetSpriteScale(float scale); + + protected: + olc::Sprite* GetMultiFrame(float fElapsedTime); + olc::Decal* GetMultiRenderable(float fElapsedTime); + olc::vi2d GetSingleFrame(float fElapsedTime); + olc::vf2d GetDecalScale(uint8_t flip); + olc::vf2d GetDecalPosition(olc::vf2d position, uint8_t flip); + + public: + float defaultFrameDuration = 0.1f; // Frame duration to be used if one is not specified otherwise + SPRITE_MODE mode = SPRITE_MODE::MULTI; + SPRITE_TYPE type = SPRITE_TYPE::SPRITE; + Renderable* spriteSheet; + + protected: + std::string state; + std::map> multiFrames; + std::map> singleFrames; + std::map> multiRenderables; + std::map frameDurations; + std::map playModes; + float frameTimer = 0.0f, spriteScale = 1.0f; + int currentFrame; + olc::vi2d spriteSize; + olc::Sprite* placeholder = nullptr; + bool playForward = true; + }; +} + +#ifdef OLC_PGEX_ANIMSPR +#undef OLC_PGEX_ANIMSPR + +namespace olc +{ + olc::Sprite* AnimatedSprite::GetMultiFrame(float fElapsedTime) + { + frameTimer += fElapsedTime; + + if (frameTimer >= frameDurations[state]) { + frameTimer = 0.0f; + + if (playModes[state] == PLAY_MODE::PING_PONG && !playForward) { + currentFrame--; + } else { + currentFrame++; + } + + if (currentFrame >= multiFrames[state].size()) { + currentFrame = playModes[state] == PLAY_MODE::LOOP + ? 0 + : multiFrames[state].size() - 2; + playForward = false; + } else if (currentFrame <= 0) { + playForward = true; + } + } + + return multiFrames[state][currentFrame]; + } + + olc::Decal* AnimatedSprite::GetMultiRenderable(float fElapsedTime) + { + frameTimer += fElapsedTime; + + if (frameTimer >= frameDurations[state]) { + frameTimer = 0.0f; + + if (playModes[state] == PLAY_MODE::PING_PONG && !playForward) { + currentFrame--; + } else { + currentFrame++; + } + + if (currentFrame >= multiRenderables[state].size()) { + currentFrame = playModes[state] == PLAY_MODE::LOOP + ? 0 + : multiRenderables[state].size() - 2; + playForward = false; + } else if (currentFrame <= 0) { + playForward = true; + } + } + + return multiRenderables[state][currentFrame]->Decal(); + } + + olc::vi2d AnimatedSprite::GetSingleFrame(float fElapsedTime) + { + frameTimer += fElapsedTime; + + if (frameTimer >= frameDurations[state]) { + frameTimer = 0.0f; + + if (playModes[state] == PLAY_MODE::PING_PONG && !playForward) { + currentFrame--; + } else { + currentFrame++; + } + + if (currentFrame >= singleFrames[state].size()) { + currentFrame = playModes[state] == PLAY_MODE::LOOP + ? 0 + : singleFrames[state].size() - 2; + playForward = false; + } else if (currentFrame <= 0) { + playForward = true; + } + } + + return singleFrames[state][currentFrame]; + } + + void AnimatedSprite::SetState(std::string newState) + { + bool stateFound = false; + if (type == SPRITE_TYPE::SPRITE) { + if ((mode == SPRITE_MODE::MULTI && multiFrames.find(newState) == multiFrames.end()) + || (mode == SPRITE_MODE::SINGLE && singleFrames.find(newState) == singleFrames.end())) { + + std::cout << "Error: State " << newState << " does not exist." << std::endl; + return; + } + } else if ((mode == SPRITE_MODE::MULTI && multiRenderables.find(newState) == multiRenderables.end()) + || (mode == SPRITE_MODE::SINGLE && singleFrames.find(newState) == singleFrames.end())) { + + std::cout << "Error: State " << newState << " does not exist." << std::endl; + return; + } + + if (newState != state) { + state = newState; + currentFrame = 0; + } + } + + + std::string AnimatedSprite::GetState() + { + return state; + } + + void AnimatedSprite::AddState(std::string stateName, std::vector imgPaths) + { + AnimatedSprite::AddState(stateName, defaultFrameDuration, PLAY_MODE::LOOP, imgPaths); + } + + void AnimatedSprite::AddState(std::string stateName, std::vector spriteLocations) + { + AnimatedSprite::AddState(stateName, defaultFrameDuration, PLAY_MODE::LOOP, spriteLocations); + } + + void AnimatedSprite::AddState(std::string stateName, float frameDuration, PLAY_MODE mode, std::vector imgPaths) + { + for (std::string& path : imgPaths) { + if (type == SPRITE_TYPE::SPRITE) { + multiFrames[stateName].push_back(new olc::Sprite(path)); + } else { + multiRenderables[stateName].push_back(new Renderable()); + multiRenderables[stateName].back()->Load(path); + } + } + + frameDurations[stateName] = frameDuration; + playModes[stateName] = mode; + } + + void AnimatedSprite::AddState(std::string stateName, float frameDuration, PLAY_MODE mode, std::vector spriteLocations) + { + for (olc::vi2d& location : spriteLocations) { + singleFrames[stateName].push_back(location); + } + + frameDurations[stateName] = frameDuration; + playModes[stateName] = mode; + } + + void AnimatedSprite::SetSpriteSize(olc::vi2d size) + { + spriteSize = size; + if (placeholder != nullptr) { + delete placeholder; + } + placeholder = new olc::Sprite(size.x, size.y); + } + + olc::vi2d AnimatedSprite::GetSpriteSize() + { + return spriteSize; + } + + void AnimatedSprite::SetSpriteScale(float scale) + { + if (scale <= 0.0f) { + spriteScale = 1.0f; + } + else { + spriteScale = scale; + } + } + + void AnimatedSprite::Draw(float fElapsedTime, olc::vf2d position, uint8_t flip, olc::Pixel tint) + { + if (mode == SPRITE_MODE::MULTI) { + if (type == SPRITE_TYPE::SPRITE) { + pge->DrawSprite(position, GetMultiFrame(fElapsedTime), spriteScale, flip); + } else { + pge->DrawDecal(GetDecalPosition(position, flip), GetMultiRenderable(fElapsedTime), GetDecalScale(flip), tint); + } + } + else { + if (type == SPRITE_TYPE::SPRITE) { + pge->DrawPartialSprite(position, spriteSheet->Sprite(), GetSingleFrame(fElapsedTime), spriteSize, spriteScale, flip); + } else { + pge->DrawPartialDecal(GetDecalPosition(position, flip), spriteSheet->Decal(), GetSingleFrame(fElapsedTime), spriteSize, GetDecalScale(flip), tint); + } + } + } + + olc::vf2d AnimatedSprite::GetDecalScale(uint8_t flip) + { + olc::vf2d scale = { (float)spriteScale, (float)spriteScale }; + + if (flip == olc::Sprite::Flip::HORIZ) { + return { -(scale.x), scale.y }; + } + + if (flip == olc::Sprite::Flip::VERT) { + return { scale.x, -scale.y }; + } + + return scale; + } + + olc::vf2d AnimatedSprite::GetDecalPosition(olc::vf2d position, uint8_t flip) + { + if (flip == olc::Sprite::Flip::HORIZ) { + return { position.x + (spriteSize.x * spriteScale), position.y }; + } + + if (flip == olc::Sprite::Flip::VERT) { + return { position.x, position.y + (spriteSize.y * spriteScale) }; + } + + return position; + } +} + +#endif +#endif diff --git a/The Great Machine/res/player.png b/The Great Machine/res/player.png new file mode 100644 index 0000000000000000000000000000000000000000..6954bb96a270b45b1872f439a4a78f2bcf813c81 GIT binary patch literal 36945 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

IMr8+9cn6Vl3^APK^zBud($l0{Bh*uojEW9@ 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 Eg4y}kHvj+t literal 0 HcmV?d00001 diff --git a/res/player.png b/res/player.png new file mode 100644 index 0000000000000000000000000000000000000000..6954bb96a270b45b1872f439a4a78f2bcf813c81 GIT binary patch literal 36945 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

IMr8+9cn6Vl3^APK^zBud($l0{Bh*uojEW9@ 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 Eg4y}kHvj+t literal 0 HcmV?d00001