diff --git a/2d-game.aps b/2d-game.aps new file mode 100644 index 0000000000000000000000000000000000000000..2288afa8e760d9b8d4750520cf9a684e8603441a Binary files /dev/null and b/2d-game.aps differ diff --git a/2d-game.rc b/2d-game.rc new file mode 100644 index 0000000000000000000000000000000000000000..fa5f753308806d6f53536ce5adfeecc7045f6e33 --- /dev/null +++ b/2d-game.rc @@ -0,0 +1,60 @@ +// Microsoft Visual C++ generated resource script. +// + +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE 9, 1 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/2d-game.vcxproj b/2d-game.vcxproj index 0b9da378da01091738909e51f6d5432e6f2aace4..69db831f0abf35f44b4c3f630397a45fe3d48c56 100644 --- a/2d-game.vcxproj +++ b/2d-game.vcxproj @@ -146,9 +146,13 @@ <ClCompile Include="Entity.cpp" /> <ClCompile Include="game.cpp" /> <ClCompile Include="LazySprite.cpp" /> + <ClCompile Include="mainGame.cpp" /> <ClCompile Include="ResourceManager.cpp" /> + <ClCompile Include="SimpleSprite.cpp" /> </ItemGroup> <ItemGroup> + <ClInclude Include="DynamicArray.hpp" /> + <ClInclude Include="mainGame.h" /> <ClInclude Include="olc.h" /> <ClInclude Include="ITexture.h" /> <ClInclude Include="Entity.h" /> @@ -156,7 +160,9 @@ <ClInclude Include="LazySprite.h" /> <ClInclude Include="olcPGEX_TransformedView.h" /> <ClInclude Include="olcPixelGameEngine.h" /> + <ClInclude Include="resource.h" /> <ClInclude Include="ResourceManager.h" /> + <ClInclude Include="SimpleSprite.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/2d-game.vcxproj.filters b/2d-game.vcxproj.filters index 3e26ef3744dd20196f8ac7fcc202263c331aa7f8..4b6dbb151326f1a1b1b9fa3e27ba792e5d8ba5a2 100644 --- a/2d-game.vcxproj.filters +++ b/2d-game.vcxproj.filters @@ -9,10 +9,6 @@ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> <Filter Include="Header Files\gameObj"> <UniqueIdentifier>{ff9a19d0-75c0-4779-86ff-f20d7446f234}</UniqueIdentifier> </Filter> @@ -25,6 +21,9 @@ <Filter Include="olc::PGE"> <UniqueIdentifier>{0ebc0167-4ba6-47e4-93df-4984963d5751}</UniqueIdentifier> </Filter> + <Filter Include="Header Files\gameObj\management"> + <UniqueIdentifier>{886a9672-46a0-46f4-a068-e12dce07d024}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="game.cpp"> @@ -39,6 +38,12 @@ <ClCompile Include="LazySprite.cpp"> <Filter>Source Files\gameObj</Filter> </ClCompile> + <ClCompile Include="SimpleSprite.cpp"> + <Filter>Source Files\gameObj</Filter> + </ClCompile> + <ClCompile Include="mainGame.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="interfaces.h"> @@ -59,11 +64,23 @@ <ClInclude Include="olcPixelGameEngine.h"> <Filter>olc::PGE</Filter> </ClInclude> + <ClInclude Include="olc.h"> + <Filter>olc::PGE</Filter> + </ClInclude> <ClInclude Include="ITexture.h"> + <Filter>Header Files\gameObj\render</Filter> + </ClInclude> + <ClInclude Include="SimpleSprite.h"> + <Filter>Header Files\gameObj\render</Filter> + </ClInclude> + <ClInclude Include="mainGame.h"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="olc.h"> - <Filter>olc::PGE</Filter> + <ClInclude Include="resource.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="DynamicArray.hpp"> + <Filter>Header Files</Filter> </ClInclude> </ItemGroup> </Project> \ No newline at end of file diff --git a/DynamicArray.hpp b/DynamicArray.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4d7988a90b19977f1543033afb5d291e3dbc008a --- /dev/null +++ b/DynamicArray.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include <list> +#include <vector> + +//I won't be able to do an enhanced (Range-based) for with this... + + +//Dynamic data type, set (not ordered), I'll use arrays for entry pointers, I will leave nullptr in the list. +//I don't want to waste time with resizing this, I'll allocate more memory and if I delete from this, I'll do it in +template<typename T> +class DynamicArray +{ +private: + std::vector<T> entries; + std::list<T> newEntries; + +public: + + auto begin() + { + return entries.begin(); + } +}; + diff --git a/Entity.cpp b/Entity.cpp index 40d2ac4acd6e0155d1e7422d063f16a29f0f18f4..32356befc6fc231b0a8a6fc01f00ec3322975b3b 100644 --- a/Entity.cpp +++ b/Entity.cpp @@ -5,6 +5,14 @@ namespace entities { :pos(pos), texture(texture) { + } + olc::vf2d Entity::getPos() const + { + return this->pos; + } + void Entity::render(olc::TransformedView& scene) const + { + this->texture.render(scene, *this); } Entity::~Entity() { diff --git a/Entity.h b/Entity.h index a268a970340e9a8228e7f4b32c77566299e79b65..561c20722027efd3b3c570d2dab1f2e59c3f70fe 100644 --- a/Entity.h +++ b/Entity.h @@ -9,14 +9,14 @@ namespace entities { { protected: olc::vf2d pos; //I can store these safely directly - render::ITexture& texture; + virtual render::ITexture& getTexture() = 0; public: Entity(render::ITexture& texture, const olc::vf2d& pos); virtual olc::vf2d getPos() const; - virtual void tick(float deltaT); + virtual void tick(float deltaT){} //this shouldn't change it's state virtual void render(olc::TransformedView& scene) const; diff --git a/LazySprite.cpp b/LazySprite.cpp index f82ace39b81e90246f1196ac66be65c442b3aaef..ae1f5c7583c8a66890c4bd9a7ffb0e4da1f22ddc 100644 --- a/LazySprite.cpp +++ b/LazySprite.cpp @@ -11,11 +11,11 @@ namespace render { return this->sprite; } - LazySprite::LazySprite(int u, int v, int sizeU, int sizeV) - : LazySprite(olc::vi2d(u, v), olc::vi2d(sizeU, sizeV)) + 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(olc::vi2d pos, olc::vi2d size) - : uv(pos), size(size) + LazySprite::LazySprite(const std::string& resName, olc::vi2d pos, olc::vi2d size) + : resourceName(resName), uv(pos), size(size) { sprite = nullptr; } diff --git a/LazySprite.h b/LazySprite.h index 8c3d888e414e84d90d5493a8da8cd70c0fb220fd..e657043236f2aeef48ee15d7c03d471553b52235 100644 --- a/LazySprite.h +++ b/LazySprite.h @@ -25,14 +25,14 @@ namespace render { * u, v the texture coordinates on the image, * sizeU, V are the size of that sprite */ - LazySprite(int u, int v, int sizeU = 16, int sizeV = 16); + LazySprite(const std::string& resName, int u, int v, int sizeU = 16, int sizeV = 16); - LazySprite(olc::vi2d pos, olc::vi2d size = olc::vi2d(16, 16)); + LazySprite(const std::string& resName, olc::vi2d pos, olc::vi2d size = olc::vi2d(16, 16)); /** * Render the sprite in world-space */ - void render(olc::TransformedView& scene, olc::vf2d, olc::vf2d scale); + void render(olc::TransformedView& scene, olc::vf2d, olc::vf2d scale = olc::vf2d(1, 1)); void renderCentered(olc::TransformedView& scene, olc::vf2d, olc::vf2d scale); diff --git a/SimpleSprite.cpp b/SimpleSprite.cpp new file mode 100644 index 0000000000000000000000000000000000000000..85c79cf176c44522450309de08f87b84513e74f0 --- /dev/null +++ b/SimpleSprite.cpp @@ -0,0 +1,12 @@ +#include "SimpleSprite.h" + +render::SimpleSprite::SimpleSprite(const std::string name, olc::vi2d pos) + : sprite(name, pos) +{ + +} + +void render::SimpleSprite::render(olc::TransformedView& scene, entities::Entity& entity) +{ + this->sprite.render(scene, entity.getPos()); +} diff --git a/SimpleSprite.h b/SimpleSprite.h new file mode 100644 index 0000000000000000000000000000000000000000..7f2cc91bf0b8ff773435738fb8a81bbcf8efa60a --- /dev/null +++ b/SimpleSprite.h @@ -0,0 +1,21 @@ +#pragma once +#include "ITexture.h" +#include <string> +#include "LazySprite.h" + + +namespace render { + + class SimpleSprite : + public ITexture + { + private: + LazySprite sprite; + + public: + SimpleSprite(const std::string name, olc::vi2d pos); + + void render(olc::TransformedView& scene, entities::Entity& entity) override; + }; +} + diff --git a/game.cpp b/game.cpp index 7945a5a8818828f02913842ece4595bdaccf2d5b..c6fc277aa010b1c6dcf3b63cddc7d5487136ca6b 100644 --- a/game.cpp +++ b/game.cpp @@ -1,5 +1,6 @@ #define OLC_PGE_APPLICATION #include "olcPixelGameEngine.h" +#include "mainGame.h" #include <iostream> #include <string> @@ -9,4 +10,29 @@ using namespace std; int main(int argc, char* argv[]) { cout << argv[0] << endl; + + bool invalidArg = false; + for(int i = 0; i < argc; i++){ + std::string tmp(argv[i]); + if(tmp == "-r" || tmp == "--resource"){ + if(i + 1 < argc){ + cout << "O.K. I'll read it, but //TODO" << endl; + //TODO + } + else{ + invalidArg = true; + } + } + } + if(invalidArg){ + cout << "Invalid arguments" << endl; + //TODO write something meaningful + } + + GameClient client; + + if(client.Construct(256, 240, 4, 4)){ + client.Start(); + } + return 0; } diff --git a/mainGame.cpp b/mainGame.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d88e626242068c193efd30c68248a08db65693b4 --- /dev/null +++ b/mainGame.cpp @@ -0,0 +1,30 @@ +#include "mainGame.h" +#include "ResourceManager.h" + +GameClient::GameClient() +{ + this->sAppName = "KosmX's game"; +} + +bool GameClient::OnUserCreate() +{ + + //Set resource parent! + render::ResourceManager::createInstance(); + + + + return true; +} + +bool GameClient::OnUserUpdate(float fElapsedTime) +{ + + //return false if it want to exit. + return true; +} + +GameClient::~GameClient() +{ + //TODO free anything +} diff --git a/mainGame.h b/mainGame.h new file mode 100644 index 0000000000000000000000000000000000000000..23ef574b64ce7dd161976d43c2c41e469f610088 --- /dev/null +++ b/mainGame.h @@ -0,0 +1,25 @@ +#pragma once +#include "olcPixelGameEngine.h" +#include "DynamicArray.hpp" +#include <memory> +#include "Entity.h" + + +class GameClient : + public olc::PixelGameEngine +{ +private: + DynamicArray<std::shared_ptr<entities::Entity>> basicEntities; +public: + GameClient(); + + bool OnUserCreate() override; + + bool OnUserUpdate(float fElapsedTime) override; + + ~GameClient(); + + //for some reason, probably I won't need it + //bool OnUserDestroy() override; +}; + diff --git a/resource.h b/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..8113ee39dbf66af001bc22a6fa86fcbd17024ce4 --- /dev/null +++ b/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by 2d-game.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif