aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/jin.exebin1548800 -> 1553408 bytes
-rw-r--r--build/vs2015/jin.vcxproj2
-rw-r--r--build/vs2015/jin.vcxproj.filters6
-rw-r--r--src/libjin/audio/sdl/audio.cpp3
-rw-r--r--src/libjin/common/subsystem.h2
-rw-r--r--src/libjin/render/window.cpp4
-rw-r--r--src/libjin/utils/log.cpp2
-rw-r--r--src/libjin/utils/log.h134
8 files changed, 150 insertions, 3 deletions
diff --git a/bin/jin.exe b/bin/jin.exe
index b11d1f7..dc7cfa6 100644
--- a/bin/jin.exe
+++ b/bin/jin.exe
Binary files differ
diff --git a/build/vs2015/jin.vcxproj b/build/vs2015/jin.vcxproj
index 2b86243..a0c11a6 100644
--- a/build/vs2015/jin.vcxproj
+++ b/build/vs2015/jin.vcxproj
@@ -190,6 +190,7 @@
<ClCompile Include="..\..\src\3rdparty\tekcos\tekcos.c" />
<ClCompile Include="..\..\src\libjin\math\matrix.cpp" />
<ClCompile Include="..\..\src\libjin\math\vector.cpp" />
+ <ClCompile Include="..\..\src\libjin\utils\log.cpp" />
<ClCompile Include="..\..\src\libjin\utils\unittest.cpp" />
<ClCompile Include="..\..\src\lua\audio\luaopen_audio.cpp" />
<ClCompile Include="..\..\src\lua\audio\luaopen_Source.cpp" />
@@ -289,6 +290,7 @@
<ClInclude Include="..\..\src\libjin\physics\rigid.h" />
<ClInclude Include="..\..\src\libjin\render\render.h" />
<ClInclude Include="..\..\src\libjin\tilemap\tilemap.h" />
+ <ClInclude Include="..\..\src\libjin\utils\log.h" />
<ClInclude Include="..\..\src\lua\embed\debug.lua.h" />
<ClInclude Include="..\..\src\lua\embed\embed.h" />
<ClInclude Include="..\..\src\lua\embed\graphics.lua.h" />
diff --git a/build/vs2015/jin.vcxproj.filters b/build/vs2015/jin.vcxproj.filters
index 381ac84..89557f8 100644
--- a/build/vs2015/jin.vcxproj.filters
+++ b/build/vs2015/jin.vcxproj.filters
@@ -366,6 +366,9 @@
<ClCompile Include="..\..\src\3rdparty\cmixer\cmixer.c">
<Filter>src\3rdparty\cmixer</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\libjin\utils\log.cpp">
+ <Filter>src\libjin\utils</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\3rdparty\GLEE\GLee.h">
@@ -644,6 +647,9 @@
<ClInclude Include="..\..\src\libjin\common\singleton.h">
<Filter>src\libjin\common</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\libjin\utils\log.h">
+ <Filter>src\libjin\utils</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\..\src\3rdparty\lua51\Makefile">
diff --git a/src/libjin/audio/sdl/audio.cpp b/src/libjin/audio/sdl/audio.cpp
index 8a0fc86..4e565dc 100644
--- a/src/libjin/audio/sdl/audio.cpp
+++ b/src/libjin/audio/sdl/audio.cpp
@@ -2,6 +2,7 @@
#include "audio.h"
#include "source.h"
#include "../../math/math.h"
+#include "../../utils/log.h"
namespace jin
{
@@ -20,7 +21,7 @@ namespace audio
onlyonce bool SDLAudio::initSystem(const SettingBase* s)
{
- std::cout << "Init Audio System" << std::endl;
+ Loghelper::log(Loglevel::LV_INFO, "Init Audio System");
if (SDL_Init(SDL_INIT_AUDIO) < 0)
return false;
diff --git a/src/libjin/common/subsystem.h b/src/libjin/common/subsystem.h
index 4f3c5ab..55b0f0d 100644
--- a/src/libjin/common/subsystem.h
+++ b/src/libjin/common/subsystem.h
@@ -16,7 +16,7 @@ namespace jin
void init(const SettingBase* setting)
{
- initSystem(setting);
+ CallOnce(initSystem(setting));
}
void quit()
diff --git a/src/libjin/render/window.cpp b/src/libjin/render/window.cpp
index fe81f58..677618d 100644
--- a/src/libjin/render/window.cpp
+++ b/src/libjin/render/window.cpp
@@ -4,6 +4,8 @@
#include "3rdparty/GLee/GLee.h"
#include "canvas.h"
#include "../utils/utils.h"
+#include "../audio/sdl/audio.h"
+#include "../utils/log.h"
namespace jin
{
@@ -12,7 +14,7 @@ namespace render
onlyonce bool Window::initSystem(const SettingBase* s)
{
- std::cout << "Init window system" << std::endl;
+ Loghelper::log(Loglevel::LV_INFO, "Init window system");
if (SDL_Init(SDL_INIT_VIDEO) < 0)
return false;
diff --git a/src/libjin/utils/log.cpp b/src/libjin/utils/log.cpp
new file mode 100644
index 0000000..5299942
--- /dev/null
+++ b/src/libjin/utils/log.cpp
@@ -0,0 +1,2 @@
+#define LOGHELPER_IMPLEMENT
+#include "log.h" \ No newline at end of file
diff --git a/src/libjin/utils/log.h b/src/libjin/utils/log.h
new file mode 100644
index 0000000..b047402
--- /dev/null
+++ b/src/libjin/utils/log.h
@@ -0,0 +1,134 @@
+/**
+* Single.h/loghelper.h
+* Copyright (C) 2017~2018 chai
+*/
+#ifndef __LOG_HELPER_H
+#define __LOG_HELPER_H
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <stdarg.h>
+
+class Loghelper
+{
+public:
+ // logĿ
+ enum Direction
+ {
+ DIR_CERR = 1 << 1, // ׼
+ DIR_FILE = 1 << 2, // logļ
+ };
+
+ // ȼ
+ enum Level
+ {
+ LV_NONE = 0, // none
+ LV_ERROR = 1 << 1, // error
+ LV_WARN = 1 << 2, // warn
+ LV_INFO = 1 << 3, // info
+ LV_DEBUG = 1 << 4, // debug
+ LV_ALL = 0xffffffff
+ };
+
+ static void log(Level _level, const char* _fmt, ...);
+
+ // ض
+ static void redirect(unsigned int _dir, char* _path = nullptr);
+
+ // ɸѡȼ
+ static void restrict(unsigned int levels);
+
+ static void close();
+
+private:
+ static unsigned int dir; // Ŀ
+ static unsigned int levels; // ȼ
+ static std::ofstream fs; // ļ
+};
+
+typedef Loghelper::Level Loglevel;
+
+#ifdef LOGHELPER_IMPLEMENT
+
+#define hasbit(flag, bit) ((flag & bit) == bit)
+
+unsigned int Loghelper::dir = Loghelper::Direction::DIR_CERR;
+unsigned int Loghelper::levels = Loghelper::Level::LV_ALL;
+std::ofstream Loghelper::fs;
+
+void Loghelper::log(Level _level, const char* _fmt, ...)
+{
+ if (!hasbit(levels, _level))
+ return;
+#define FORMAT_MSG_BUFFER_SIZE (204800)
+ char* levelStr = nullptr;
+ switch (_level)
+ {
+ case LV_ERROR:
+ levelStr = "Error: ";
+ break;
+ case LV_WARN:
+ levelStr = "Warn: ";
+ break;
+ case LV_INFO:
+ levelStr = "Info: ";
+ break;
+ case LV_DEBUG:
+ levelStr = "Debug: ";
+ break;
+ default:
+ levelStr = "Unknown: ";
+ break;
+ }
+ char buffer[FORMAT_MSG_BUFFER_SIZE + 1] = { 0 };
+ strcpy(buffer, levelStr);
+ va_list args;
+ va_start(args, _fmt);
+ vsnprintf(buffer + strlen(buffer), FORMAT_MSG_BUFFER_SIZE, _fmt, args);
+ va_end(args);
+ if (hasbit(dir, DIR_CERR))
+ {
+ std::cerr << buffer << std::endl;
+ }
+ if (hasbit(dir, DIR_FILE))
+ {
+ fs << buffer << std::endl;
+ }
+#undef FORMAT_MSG_BUFFER_SIZE
+}
+
+// ض
+void Loghelper::redirect(unsigned int _dir, char* _path)
+{
+ dir = _dir;
+ if (hasbit(dir, DIR_FILE))
+ {
+ try
+ {
+ fs.open(_path, std::ios_base::app);
+ }
+ catch (std::ios_base::failure& e) {
+ dir = DIR_CERR;
+ log(Level::LV_WARN, "ضlog· %s ʧ", _path);
+ }
+ }
+}
+
+// ɸѡȼ
+void Loghelper::restrict(unsigned int _levels)
+{
+ levels = _levels;
+}
+
+void Loghelper::close()
+{
+ if (!fs.fail())
+ fs.close();
+ fs.clear();
+}
+
+#undef hasbit
+
+#endif
+
+#endif