diff options
-rw-r--r-- | build/01HelloWorld/01HelloWorld.vcxproj | 19 | ||||
-rw-r--r-- | build/lib/SDL2-2.0.5/lib/x86/SDL2test.lib | bin | 899966 -> 0 bytes | |||
-rw-r--r-- | build/libjin/libjin.vcxproj | 14 | ||||
-rw-r--r-- | build/libjin/libjin.vcxproj.filters | 12 | ||||
-rw-r--r-- | libjin/3rdparty/smount/smount.c | 2 | ||||
-rw-r--r-- | libjin/Audio/SDL/SDLAudio.h | 2 | ||||
-rw-r--r-- | libjin/Common/Singleton.hpp | 3 | ||||
-rw-r--r-- | libjin/Core/Game.cpp | 38 | ||||
-rw-r--r-- | libjin/Core/Game.h | 56 | ||||
-rw-r--r-- | libjin/Graphics/Window.cpp | 11 | ||||
-rw-r--r-- | libjin/Graphics/Window.h | 2 | ||||
-rw-r--r-- | test/01HelloWorld/main.cpp | 47 |
12 files changed, 142 insertions, 64 deletions
diff --git a/build/01HelloWorld/01HelloWorld.vcxproj b/build/01HelloWorld/01HelloWorld.vcxproj index 8b42290..cab9535 100644 --- a/build/01HelloWorld/01HelloWorld.vcxproj +++ b/build/01HelloWorld/01HelloWorld.vcxproj @@ -74,8 +74,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <CompileAs>CompileAsCpp</CompileAs> </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <AdditionalLibraryDirectories>$(SolutionDir)\lib\SDL2-2.0.5\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>SDL2.lib;SDL2main.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ClCompile> @@ -91,11 +97,15 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <AdditionalIncludeDirectories>$(SolutionDir)..\libjin\;$(SolutionDir)\lib\SDL2-2.0.5\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <CompileAs>CompileAsCpp</CompileAs> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> + <SubSystem>Console</SubSystem> + <AdditionalLibraryDirectories>$(SolutionDir)\lib\SDL2-2.0.5\lib\x86\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>SDL2.lib;SDL2main.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> @@ -114,6 +124,11 @@ <ItemGroup> <ClCompile Include="..\..\test\01HelloWorld\main.cpp" /> </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\libjin\libjin.vcxproj"> + <Project>{407e9199-d39c-4460-b218-0c29ab42483b}</Project> + </ProjectReference> + </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> diff --git a/build/lib/SDL2-2.0.5/lib/x86/SDL2test.lib b/build/lib/SDL2-2.0.5/lib/x86/SDL2test.lib Binary files differdeleted file mode 100644 index c26c50f..0000000 --- a/build/lib/SDL2-2.0.5/lib/x86/SDL2test.lib +++ /dev/null diff --git a/build/libjin/libjin.vcxproj b/build/libjin/libjin.vcxproj index bd83f54..a1ba5df 100644 --- a/build/libjin/libjin.vcxproj +++ b/build/libjin/libjin.vcxproj @@ -68,8 +68,8 @@ <ClInclude Include="..\..\libjin\Audio\SDL\SDLSource.h" /> <ClInclude Include="..\..\libjin\Audio\Source.h" /> <ClInclude Include="..\..\libjin\Common\Data.h" /> - <ClInclude Include="..\..\libjin\Common\Singleton.h" /> - <ClInclude Include="..\..\libjin\Common\Subsystem.h" /> + <ClInclude Include="..\..\libjin\Common\Singleton.hpp" /> + <ClInclude Include="..\..\libjin\Common\Subsystem.hpp" /> <ClInclude Include="..\..\libjin\Core\Core.h" /> <ClInclude Include="..\..\libjin\Core\Game.h" /> <ClInclude Include="..\..\libjin\Debug\Debug.h" /> @@ -121,13 +121,13 @@ </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> + <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v140</PlatformToolset> <CharacterSet>Unicode</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> + <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v140</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> @@ -182,9 +182,10 @@ </PrecompiledHeader> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <AdditionalIncludeDirectories>$(SolutionDir)\lib\SDL2-2.0.5\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <CompileAs>CompileAsCpp</CompileAs> </ClCompile> <Link> <SubSystem>Console</SubSystem> @@ -215,9 +216,10 @@ <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <AdditionalIncludeDirectories>$(SolutionDir)\lib\SDL2-2.0.5\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <CompileAs>CompileAsCpp</CompileAs> </ClCompile> <Link> <SubSystem>Console</SubSystem> diff --git a/build/libjin/libjin.vcxproj.filters b/build/libjin/libjin.vcxproj.filters index 83bc4be..0f3b2e4 100644 --- a/build/libjin/libjin.vcxproj.filters +++ b/build/libjin/libjin.vcxproj.filters @@ -221,12 +221,6 @@ <ClInclude Include="..\..\libjin\Common\Data.h"> <Filter>Common</Filter> </ClInclude> - <ClInclude Include="..\..\libjin\Common\Singleton.h"> - <Filter>Common</Filter> - </ClInclude> - <ClInclude Include="..\..\libjin\Common\Subsystem.h"> - <Filter>Common</Filter> - </ClInclude> <ClInclude Include="..\..\libjin\Core\Core.h"> <Filter>Core</Filter> </ClInclude> @@ -340,6 +334,12 @@ <ClInclude Include="..\..\libjin\Time\Timer.h"> <Filter>Time</Filter> </ClInclude> + <ClInclude Include="..\..\libjin\Common\Subsystem.hpp"> + <Filter>Common</Filter> + </ClInclude> + <ClInclude Include="..\..\libjin\Common\Singleton.hpp"> + <Filter>Common</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <None Include="..\..\libjin\README.md" /> diff --git a/libjin/3rdparty/smount/smount.c b/libjin/3rdparty/smount/smount.c index c4e2ef0..3006fa3 100644 --- a/libjin/3rdparty/smount/smount.c +++ b/libjin/3rdparty/smount/smount.c @@ -109,7 +109,7 @@ int smtexists(smtShared* S, const char *path) static struct stat smtgetstat(smtShared* S, const char*path) { char* r = concat(S->mount->path, "/", path, 0); - struct stat s = {}; + struct stat s = {0}; if (!r) return s; int res = stat(r, &s); free(r); diff --git a/libjin/Audio/SDL/SDLAudio.h b/libjin/Audio/SDL/SDLAudio.h index 4c9ab34..bac4544 100644 --- a/libjin/Audio/SDL/SDLAudio.h +++ b/libjin/Audio/SDL/SDLAudio.h @@ -59,8 +59,6 @@ namespace audio }; - typedef SDLAudio::Setting SDLAudioSetting; - } } diff --git a/libjin/Common/Singleton.hpp b/libjin/Common/Singleton.hpp index 2783927..c3ce467 100644 --- a/libjin/Common/Singleton.hpp +++ b/libjin/Common/Singleton.hpp @@ -21,11 +21,10 @@ namespace jin protected: Singleton() {}; virtual ~Singleton() {}; + static T* _instance; private: Singleton(const Singleton&); Singleton& operator = (const Singleton&); - - static T* _instance; }; template<class T> T* Singleton<T>::_instance = nullptr; diff --git a/libjin/Core/Game.cpp b/libjin/Core/Game.cpp index 308bbec..f2223b2 100644 --- a/libjin/Core/Game.cpp +++ b/libjin/Core/Game.cpp @@ -1,16 +1,46 @@ #include "game.h" +#include "../Time/Timer.h" +#include "../input/Event.h" namespace jin { namespace core { - Game::Game() :_run(true) {}; + using namespace jin::input; + + Game::Game() :_running(true) {}; void Game::run() { + _running = true; + Event e; + while (_running) + { + while (jin::input::pollEvent(&e)) + { + if (_instance != nullptr && _onEvent) + _onEvent(&e); + } + if (!_running) + break; + } + } + bool Game::initSystem(const SettingBase* setting) + { + if (setting == nullptr) + return false; + Game::Setting* s = (Game::Setting*) setting; + _onEvent = s->eventHandler; + _onUpdate = s->updater; + _onDraw = s->drawer; + return true; } - -} -}
\ No newline at end of file + + void Game::quitSystem() + { + } + +} // core +} // jin
\ No newline at end of file diff --git a/libjin/Core/Game.h b/libjin/Core/Game.h index 3928943..7ae1855 100644 --- a/libjin/Core/Game.h +++ b/libjin/Core/Game.h @@ -3,38 +3,33 @@ #include "SDL2/SDL.h" -#include "../common/singleton.h" +#include "../Common/Subsystem.hpp" #include "../utils/macros.h" +#include "../Input/Event.h" namespace jin { namespace core { - class Game : public Singleton<Game> + + class Game : public Subsystem<Game> { public: - struct Setting - { + typedef void(*onEvent)(jin::input::Event* e); + typedef void(*onUpdate)(float dt); + typedef void(*onDraw)(); - }; - - inline void quit() + struct Setting : SettingBase { - CALLONCE(_quit()); - } - - inline bool running() - { - return run; - } - - inline void exit() - { - CALLONCE(_exit()); - } + onEvent eventHandler; + onUpdate updater; + onDraw drawer; + }; void run(); + inline void stop() { _running = false; }; + inline bool running() { return _running; }; private: @@ -43,19 +38,18 @@ namespace core SINGLETON(Game); - bool _run; + onEvent _onEvent; + onUpdate _onUpdate; + onDraw _onDraw; - inline void _exit() - { - SDL_Quit(); - } + bool _running; + + onlyonce bool initSystem(const SettingBase* setting); + onlyonce void quitSystem(); - inline void _quit() - { - _run = false; - } }; -} -} -#endif
\ No newline at end of file +} // core +} // jin + +#endif // __JIN_CORE_GAME_H
\ No newline at end of file diff --git a/libjin/Graphics/Window.cpp b/libjin/Graphics/Window.cpp index 2d0fa82..28e5b84 100644 --- a/libjin/Graphics/Window.cpp +++ b/libjin/Graphics/Window.cpp @@ -14,14 +14,14 @@ namespace jin namespace graphics { - onlyonce bool WindowSystem::initSystem(const SettingBase* s) + bool WindowSystem::initSystem(const SettingBase* s) { Loghelper::log(Loglevel::LV_INFO, "Init window system"); if (SDL_Init(SDL_INIT_VIDEO) < 0) return false; - const WindowSetting* setting = (WindowSetting*)s; + const Setting* setting = (Setting*)s; width = setting->width; height = setting->height; @@ -73,9 +73,10 @@ namespace graphics return true; } - onlyonce void WindowSystem::quitSystem() + void WindowSystem::quitSystem() { SDL_DestroyWindow(wnd); + SDL_Quit(); } inline void WindowSystem::swapBuffers() @@ -84,7 +85,7 @@ namespace graphics SDL_GL_SwapWindow(wnd); } -} -} +} // graphics +} // jin #endif // JIN_MODULES_RENDER
\ No newline at end of file diff --git a/libjin/Graphics/Window.h b/libjin/Graphics/Window.h index 55492f6..6213cee 100644 --- a/libjin/Graphics/Window.h +++ b/libjin/Graphics/Window.h @@ -51,8 +51,6 @@ namespace graphics onlyonce void quitSystem() override; }; - typedef WindowSystem::Setting WindowSetting; - } // render } // jin diff --git a/test/01HelloWorld/main.cpp b/test/01HelloWorld/main.cpp index 701d53f..09a12d3 100644 --- a/test/01HelloWorld/main.cpp +++ b/test/01HelloWorld/main.cpp @@ -1,7 +1,48 @@ +#include <iostream> #include "jin.h" -int main() +using namespace jin::core; +using namespace jin::graphics; +using namespace jin::input; + +void onEvent(jin::input::Event* e) +{ + static Game* game = Game::get(); + if (e->type == EventType::QUIT) + game->stop(); +} + +void onUpdate(float dt) +{ + +} + +void onDraw() { - jin::core::Game* game; - jin::graphics::WindowSystem; + +} + +int main(int argc, char* argv[]) +{ + Game* game = Game::get(); + Game::Setting setting; + setting.eventHandler = onEvent; + setting.updater = onUpdate; + setting.drawer = onDraw; + game->init(&setting); + + WindowSystem* wnd = WindowSystem::get(); + WindowSystem::Setting wndSetting; + wndSetting.width = 600; + wndSetting.height = 512; + wndSetting.title = "test"; + wndSetting.vsync = false; + wnd->init(&wndSetting); + + game->run(); + + game->quit(); + wnd->quit(); + + return 0; }
\ No newline at end of file |