aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/01HelloWorld/01HelloWorld.vcxproj19
-rw-r--r--build/lib/SDL2-2.0.5/lib/x86/SDL2test.libbin899966 -> 0 bytes
-rw-r--r--build/libjin/libjin.vcxproj14
-rw-r--r--build/libjin/libjin.vcxproj.filters12
-rw-r--r--libjin/3rdparty/smount/smount.c2
-rw-r--r--libjin/Audio/SDL/SDLAudio.h2
-rw-r--r--libjin/Common/Singleton.hpp3
-rw-r--r--libjin/Core/Game.cpp38
-rw-r--r--libjin/Core/Game.h56
-rw-r--r--libjin/Graphics/Window.cpp11
-rw-r--r--libjin/Graphics/Window.h2
-rw-r--r--test/01HelloWorld/main.cpp47
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
deleted file mode 100644
index c26c50f..0000000
--- a/build/lib/SDL2-2.0.5/lib/x86/SDL2test.lib
+++ /dev/null
Binary files differ
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