diff --git a/2d-game.vcxproj b/2d-game.vcxproj index 69db831f0abf35f44b4c3f630397a45fe3d48c56..6e89048060844b151b9f7025156e331e6f1fd164 100644 --- a/2d-game.vcxproj +++ b/2d-game.vcxproj @@ -149,6 +149,7 @@ <ClCompile Include="mainGame.cpp" /> <ClCompile Include="ResourceManager.cpp" /> <ClCompile Include="SimpleSprite.cpp" /> + <ClCompile Include="WallEntity.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="DynamicArray.hpp" /> @@ -163,6 +164,7 @@ <ClInclude Include="resource.h" /> <ClInclude Include="ResourceManager.h" /> <ClInclude Include="SimpleSprite.h" /> + <ClInclude Include="WallEntity.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/2d-game.vcxproj.filters b/2d-game.vcxproj.filters index 4b6dbb151326f1a1b1b9fa3e27ba792e5d8ba5a2..9cf0a13ba51445fe962c57faee6126995cb26eca 100644 --- a/2d-game.vcxproj.filters +++ b/2d-game.vcxproj.filters @@ -24,14 +24,17 @@ <Filter Include="Header Files\gameObj\management"> <UniqueIdentifier>{886a9672-46a0-46f4-a068-e12dce07d024}</UniqueIdentifier> </Filter> + <Filter Include="Header Files\gameObj\entities"> + <UniqueIdentifier>{2a6abf62-06d5-4f89-a9e3-f572fb2f7d2f}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files\gameObj\entities"> + <UniqueIdentifier>{df2376d0-03f2-4c26-aabc-0cfcf53c4a2c}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="game.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="Entity.cpp"> - <Filter>Source Files\gameObj</Filter> - </ClCompile> <ClCompile Include="ResourceManager.cpp"> <Filter>Source Files\gameObj</Filter> </ClCompile> @@ -44,14 +47,17 @@ <ClCompile Include="mainGame.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="Entity.cpp"> + <Filter>Source Files\gameObj\entities</Filter> + </ClCompile> + <ClCompile Include="WallEntity.cpp"> + <Filter>Source Files\gameObj\entities</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="interfaces.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="Entity.h"> - <Filter>Header Files\gameObj</Filter> - </ClInclude> <ClInclude Include="LazySprite.h"> <Filter>Header Files\gameObj\render</Filter> </ClInclude> @@ -82,5 +88,11 @@ <ClInclude Include="DynamicArray.hpp"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="Entity.h"> + <Filter>Header Files\gameObj\entities</Filter> + </ClInclude> + <ClInclude Include="WallEntity.h"> + <Filter>Header Files\gameObj\entities</Filter> + </ClInclude> </ItemGroup> </Project> \ No newline at end of file diff --git a/Entity.h b/Entity.h index 76ecd859308e948aeecd7fad18da92a20a810704..f823398aba02b52ba9f8af0fc1e483949ff69161 100644 --- a/Entity.h +++ b/Entity.h @@ -2,10 +2,13 @@ #include "olc.h" #include "ITexture.h" -#include "mainGame.h" + +class GameClient; namespace entities { + class WallEntity; + class Entity { protected: @@ -29,6 +32,12 @@ namespace entities { virtual ~Entity() = default; //TODO getAs*** stuff, all virtual + //same purpose to dynamic_cast, but without using language server + virtual WallEntity* getAsWallEntity() + { + return nullptr; + } + }; diff --git a/ITexture.h b/ITexture.h index 8aa9e78701d558bb7131a5b336c3eea0ada9ae51..8cb504bed35e0547ec9c21d00c2d539c1dc053a5 100644 --- a/ITexture.h +++ b/ITexture.h @@ -1,7 +1,11 @@ #pragma once -#include "Entity.h" + #include "olcPGEX_TransformedView.h" +namespace entities { + class Entity; +} + namespace render { @@ -10,7 +14,7 @@ namespace render public: //Giving the entity will reduce the variables needed, and will make it's use more dynamic - virtual void render(olc::TransformedView& scene, Entity& entity) = 0; + virtual void render(olc::TransformedView& scene, entities::Entity& entity) = 0; virtual ~ITexture() = default; }; diff --git a/LazySprite.cpp b/LazySprite.cpp index ae1f5c7583c8a66890c4bd9a7ffb0e4da1f22ddc..9ed1caabbb7cb2af618691883680249352087d0f 100644 --- a/LazySprite.cpp +++ b/LazySprite.cpp @@ -6,28 +6,24 @@ namespace render { olc::Decal* LazySprite::getDecay() { if (sprite == nullptr) { - this->sprite = render::ResourceManager::getSprite(this->resourceName); + this->sprite = ResourceManager::getSprite(this->resourceName); } return this->sprite; } - LazySprite::LazySprite(const std::string& resName, int u, int v, int sizeU, int sizeV) - : LazySprite(resName, olc::vi2d(u, v), olc::vi2d(sizeU, sizeV)) + + LazySprite::LazySprite(const std::string& resName) + : sprite(nullptr), resourceName(resName) {} - LazySprite::LazySprite(const std::string& resName, olc::vi2d pos, olc::vi2d size) - : resourceName(resName), uv(pos), size(size) - { - sprite = nullptr; - } - - void LazySprite::render(olc::TransformedView& scene, olc::vf2d pos, olc::vf2d scale) + void LazySprite::render(olc::TransformedView& scene, const olc::vi2d& pos, const olc::vf2d& uv, const olc::vf2d& size, olc::vf2d scale) { scene.DrawPartialDecal(pos, this->getDecay(), uv, size, scale); } - void LazySprite::renderCentered(olc::TransformedView& scene, olc::vf2d pos, olc::vf2d scale) + + + void LazySprite::renderCentered(olc::TransformedView& scene, const olc::vi2d& pos, const olc::vf2d& uv, const olc::vf2d& size, olc::vf2d scale) { - //probably modify the ints to doubles??? - render(scene, pos + size*2.0, scale); + this->render(scene, pos + size / 2.0f, uv, size, scale); } } diff --git a/LazySprite.h b/LazySprite.h index e657043236f2aeef48ee15d7c03d471553b52235..f38867cda2ce5f095087e7eb0dcc4bb5408bd344 100644 --- a/LazySprite.h +++ b/LazySprite.h @@ -13,28 +13,26 @@ namespace render { class LazySprite { private: - olc::Decal* sprite = nullptr; + olc::Decal* sprite; protected: const std::string resourceName; //int const u, v, sizeU, sizeV; - olc::vi2d const uv, size; + //olc::vi2d const uv, size; olc::Decal* getDecay(); public: /** * u, v the texture coordinates on the image, * sizeU, V are the size of that sprite */ - LazySprite(const std::string& resName, int u, int v, int sizeU = 16, int sizeV = 16); - - LazySprite(const std::string& resName, olc::vi2d pos, olc::vi2d size = olc::vi2d(16, 16)); + explicit LazySprite(const std::string& resName); /** * Render the sprite in world-space */ - void render(olc::TransformedView& scene, olc::vf2d, olc::vf2d scale = olc::vf2d(1, 1)); + void render(olc::TransformedView& scene, const olc::vi2d& pos, const olc::vf2d& uv, const olc::vf2d& size, olc::vf2d scale = olc::vf2d(1, 1)); - void renderCentered(olc::TransformedView& scene, olc::vf2d, olc::vf2d scale); + void renderCentered(olc::TransformedView& scene, const olc::vi2d& pos, const olc::vf2d& uv, const olc::vf2d& size, olc::vf2d scale = olc::vf2d(1, 1)); //decal reference is not my stuff, I don't have to delete it. }; diff --git a/ResourceManager.cpp b/ResourceManager.cpp index 56885329566111e526e977d0c6297ccb6f3cb996..edad00e16667500dd65e36bcf8beaf2b335e9133 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -37,7 +37,10 @@ namespace render */ void ResourceManager::createInstance(std::string* parent) { - instance = std::make_unique<ResourceManager>(*new ResourceManager(parent)); + if(instance != nullptr){ + throw std::runtime_error("Can't create a second instance of a singleton resource manager"); + } + instance = new ResourceManager(parent); } olc::Decal* ResourceManager::getSprite(const std::string& key) @@ -59,5 +62,5 @@ namespace render return &this->decalData; } - //std::unique_ptr<ResourceManager> ResourceManager::instance; + ResourceManager* ResourceManager::instance = nullptr; } \ No newline at end of file diff --git a/ResourceManager.h b/ResourceManager.h index 99e9dc52e66bb545420e5dafaa6c0443ea5035ef..f2eb3146dac5c6542f51f96fdc43eb04d6069607 100644 --- a/ResourceManager.h +++ b/ResourceManager.h @@ -1,8 +1,6 @@ #pragma once #include <string> -#include <map> -#include <memory> #include "olcPixelGameEngine.h" namespace render @@ -15,7 +13,7 @@ namespace render class ResourceManager { private: //static - static std::unique_ptr<ResourceManager> instance; + static ResourceManager* instance; static ResourceManager& getInstance(); //who needs that??? public: //static diff --git a/SimpleSprite.cpp b/SimpleSprite.cpp index 85c79cf176c44522450309de08f87b84513e74f0..ef87941efbc9aadc439d170d309a9cb2fb728ad3 100644 --- a/SimpleSprite.cpp +++ b/SimpleSprite.cpp @@ -1,12 +1,12 @@ #include "SimpleSprite.h" +#include "Entity.h" -render::SimpleSprite::SimpleSprite(const std::string name, olc::vi2d pos) - : sprite(name, pos) -{ - -} +using namespace olc; + +render::SimpleSprite::SimpleSprite(const std::string& name, const vi2d& pos, const vf2d& size) + : sprite(name), uv(pos), size(size) {} void render::SimpleSprite::render(olc::TransformedView& scene, entities::Entity& entity) { - this->sprite.render(scene, entity.getPos()); + this->sprite.render(scene, entity.getPos(), uv, size); } diff --git a/SimpleSprite.h b/SimpleSprite.h index 7f2cc91bf0b8ff773435738fb8a81bbcf8efa60a..ff6a8163fb0d1b44b8a623bd837936c0ed274db5 100644 --- a/SimpleSprite.h +++ b/SimpleSprite.h @@ -3,7 +3,6 @@ #include <string> #include "LazySprite.h" - namespace render { class SimpleSprite : @@ -11,9 +10,10 @@ namespace render { { private: LazySprite sprite; - + const olc::vf2d uv, size; + public: - SimpleSprite(const std::string name, olc::vi2d pos); + SimpleSprite(const std::string& name, const olc::vi2d& pos, const olc::vf2d& size); void render(olc::TransformedView& scene, entities::Entity& entity) override; }; diff --git a/WallEntity.cpp b/WallEntity.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4c161e92377a3dd031c8c43d149eb224855ff902 --- /dev/null +++ b/WallEntity.cpp @@ -0,0 +1 @@ +#include "WallEntity.h" diff --git a/WallEntity.h b/WallEntity.h new file mode 100644 index 0000000000000000000000000000000000000000..280b8fe49493c4b0b01c3c824bfd21aaeb8ae993 --- /dev/null +++ b/WallEntity.h @@ -0,0 +1,20 @@ +#pragma once + +#include "Entity.h" + +namespace entities { + class WallEntity : public Entity + { + public: + + + + + //This is a wall entity after all. + WallEntity* getAsWallEntity() override + { + return this; + } + }; + +} diff --git a/game.cpp b/game.cpp index 0cad066ba2eae28683f5672574a6a3f3e311396c..e136c856347bbf01e2f02159dae41af1fc0a4023 100644 --- a/game.cpp +++ b/game.cpp @@ -1,4 +1,5 @@ #define OLC_PGE_APPLICATION +#define OLC_PGEX_TRANSFORMEDVIEW #include "olcPixelGameEngine.h" #include "mainGame.h" diff --git a/mainGame.cpp b/mainGame.cpp index ea3b542f211ff86eb30a12e7b6bd671d28a8a953..d9946be58a656b7dcfa8f9976b55c49a3816d7e4 100644 --- a/mainGame.cpp +++ b/mainGame.cpp @@ -49,3 +49,5 @@ bool GameClient::OnUserUpdate(float fElapsedTime) return true; } + +GameClient* GameClient::instance = nullptr; \ No newline at end of file diff --git a/x64/Release/2d-game.Build.CppClean.log b/x64/Release/2d-game.Build.CppClean.log new file mode 100644 index 0000000000000000000000000000000000000000..8ec59e3ac3193cfe5f28d681c4e9d8568473a390 --- /dev/null +++ b/x64/Release/2d-game.Build.CppClean.log @@ -0,0 +1,19 @@ +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.ipdb +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.iobj +c:\users\kosmx\documents\github\2d-game\x64\release\vc142.pdb +c:\users\kosmx\documents\github\2d-game\x64\release\wallentity.obj +c:\users\kosmx\documents\github\2d-game\x64\release\simplesprite.obj +c:\users\kosmx\documents\github\2d-game\x64\release\resourcemanager.obj +c:\users\kosmx\documents\github\2d-game\x64\release\maingame.obj +c:\users\kosmx\documents\github\2d-game\x64\release\lazysprite.obj +c:\users\kosmx\documents\github\2d-game\x64\release\game.obj +c:\users\kosmx\documents\github\2d-game\x64\release\entity.obj +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.exe +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.pdb +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\2d-game.write.1u.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\cl.command.1.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\cl.read.1.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\cl.write.1.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\link.command.1.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\link.read.1.tlog +c:\users\kosmx\documents\github\2d-game\x64\release\2d-game.tlog\link.write.1.tlog diff --git a/x64/Release/2d-game.exe.recipe b/x64/Release/2d-game.exe.recipe new file mode 100644 index 0000000000000000000000000000000000000000..fcf2687d3b7c1e1bf442f0edb8b9eacbe4914b49 --- /dev/null +++ b/x64/Release/2d-game.exe.recipe @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project> + <ProjectOutputs> + <ProjectOutput> + <FullPath>C:\Users\kosmx\Documents\GitHub\2d-game\x64\Release\2d-game.exe</FullPath> + </ProjectOutput> + </ProjectOutputs> + <ContentFiles /> + <SatelliteDlls /> + <NonRecipeFileRefs /> +</Project> \ No newline at end of file diff --git a/x64/Release/2d-game.log b/x64/Release/2d-game.log new file mode 100644 index 0000000000000000000000000000000000000000..5f282702bb03ef11d7184d19c80927b47f919764 --- /dev/null +++ b/x64/Release/2d-game.log @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x64/Release/2d-game.vcxproj.FileListAbsolute.txt b/x64/Release/2d-game.vcxproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391