OSDN Git Service

GenerateJSONの追加
authorangeart <angeart@git.sourceforge.jp>
Tue, 11 Sep 2012 05:46:07 +0000 (14:46 +0900)
committerangeart <angeart@git.sourceforge.jp>
Tue, 11 Sep 2012 05:46:07 +0000 (14:46 +0900)
エッジのコンフィグ追加

client/3d/FieldPlayer.cpp
client/ConfigManager.cpp
client/ConfigManager.hpp
client/GenerateJSON.cpp [new file with mode: 0644]
client/GenerateJSON.hpp [new file with mode: 0644]
client/ResourceManager.cpp
client/ResourceManager.hpp
client/scene/Init.cpp

index ef7edba..9cbe7f4 100644 (file)
@@ -103,6 +103,7 @@ void FieldPlayer::LoadModel(const tstring& name)
        } else {
                SetModel(ResourceManager::LoadModelFromName(name));
        }
+       ResourceManager::SetModelEdgeSize(model_handle_.handle());
 }
 
 void FieldPlayer::SetModel(const ModelHandle& model)
index f5a4805..69cb9b0 100644 (file)
@@ -28,6 +28,7 @@ void ConfigManager::Load(const std::string& filename)
     max_local_storage_size_ = pt.get<int>("max_local_storage_size", 512000);
     upnp_ = pt.get<bool>("upnp", false);
     udp_port_ = pt.get<uint16_t>("udp_port", 39391);
+       model_edge_size_ = pt.get<float>("edge_size",1.0f);
 
 }
 
@@ -98,3 +99,8 @@ bool  ConfigManager::shader_depth_field() const
 {
        return shader_depth_field_;
 }
+
+float ConfigManager::model_edge_size() const
+{
+       return model_edge_size_;
+}
\ No newline at end of file
index df27811..d9a154e 100644 (file)
@@ -33,6 +33,8 @@ class ConfigManager
                bool shader_shadow_;
                bool shader_depth_field_;
 
+               float model_edge_size_;
+
     public:
         bool fullscreen() const;
         int screen_width() const;
@@ -50,6 +52,8 @@ class ConfigManager
                bool shader_shadow() const;
                bool shader_depth_field() const;
 
+               float model_edge_size() const;
+
     private:
         ManagerAccessorPtr manager_accessor_;
 };
diff --git a/client/GenerateJSON.cpp b/client/GenerateJSON.cpp
new file mode 100644 (file)
index 0000000..40a0b20
--- /dev/null
@@ -0,0 +1,360 @@
+#include "GenerateJSON.hpp"\r
+\r
+namespace\r
+{\r
+       int ADFUNC_DXconvAnsiToWide(int destsize, WCHAR* wstrDest, const CHAR* strSrc )\r
+       {\r
+               // \88ø\90\94\82Ì*\82ªNULL\82Ì\8fê\8d\87\82Í\83G\83\89\81[\r
+               if( strSrc==NULL )\r
+                       return 0;\r
+               int ct = strlen(strSrc) + 1;\r
+               if( wstrDest == NULL )\r
+                       return MultiByteToWideChar( CP_ACP, 0, strSrc, ct, NULL, 0 );\r
+               int nResult = MultiByteToWideChar( CP_ACP, 0, strSrc, ct, wstrDest, destsize );\r
+               wstrDest[destsize-1] = 0;\r
+\r
+               if( nResult == 0 )\r
+                       return 0;\r
+               return nResult;\r
+       }\r
+\r
+       TCHAR* _ftot_s( TCHAR* pString, size_t Size, float Value, int FracDigits )\r
+       {\r
+               if( pString == NULL )\r
+                       goto _error;\r
+               TCHAR* pSource = pString;\r
+               if( *(long*)&Value < 0 )\r
+               {\r
+                       if( (size_t)( pString - pSource ) >= Size )\r
+                               goto _error;\r
+                       *pString++ = '-';\r
+                       *(long*)&Value ^= 0x80000000;\r
+               }\r
+               TCHAR* pBegin  = pString;\r
+               int   Integer = (int)Value;\r
+               for( int i = 10; i <= Integer; i *= 10, pString++ );\r
+               if( (size_t)( pString - pSource ) >= Size )\r
+                       goto _error;\r
+               TCHAR* pCode = pString++;\r
+               *pCode-- = '0' + (char)( Integer % 10 );\r
+               for( int i = Integer / 10; i != 0; i /= 10 )\r
+                       *pCode-- = '0' + (char)( i % 10 );\r
+               if( FracDigits > 0 )\r
+               {\r
+                       if( (size_t)( pString - pSource ) >= Size )\r
+                               goto _error;\r
+                       *pString++ = '.';\r
+                       while( FracDigits-- > 1 )\r
+                       {\r
+                               Value -= Integer;\r
+                               Integer = (int)( Value *= 10.0f );\r
+                               if( (size_t)( pString - pSource ) >= Size )\r
+                                       goto _error;\r
+                               *pString++ = '0' + (char)Integer;\r
+                       }\r
+                       Integer = (int)( ( Value - Integer ) * 10.0f + 0.5f );\r
+                       if( Integer < 10 )\r
+                       {\r
+                               if( (size_t)( pString - pSource ) >= Size )\r
+                                       goto _error;\r
+                               *pString++ = '0' + (char)Integer;\r
+                       }\r
+                       else\r
+                       {\r
+                               pCode = pString - 1;\r
+                               if( (size_t)( pString - pSource ) >= Size )\r
+                                       goto _error;\r
+                               *pString++ = '0';\r
+                               do\r
+                               {\r
+                                       if( *pCode == '.' )\r
+                                               pCode--;\r
+                                       if( *pCode != '9' )\r
+                                       {\r
+                                               *pCode += 1;\r
+                                               break;\r
+                                       }\r
+                                       else\r
+                                               *pCode = '0';\r
+                                       if( pCode == pBegin )\r
+                                       {\r
+                                               if( (size_t)( pString - pSource ) >= Size )\r
+                                                       goto _error;\r
+                                               TCHAR* pEnd = pString++;\r
+                                               while( pEnd-- != pCode )\r
+                                                       *( pEnd + 1 ) = *pEnd;\r
+                                               *pCode = '1';\r
+                                       }\r
+                               } while( *pCode-- == '0' );\r
+                       }\r
+               }\r
+               if( (size_t)( pString - pSource ) >= Size )\r
+                       goto _error;\r
+               *pString = '\0';\r
+               return pSource;\r
+_error:\r
+               __debugbreak();\r
+               return NULL;\r
+       }\r
+\r
+       BOOL DeleteDirectory( LPCTSTR lpPathName )\r
+       {\r
+               // \93ü\97Í\92l\83`\83F\83b\83N\r
+               if( NULL == lpPathName )\r
+               {\r
+                       return FALSE;\r
+               }\r
+\r
+               // \83f\83B\83\8c\83N\83g\83\8a\96¼\82Ì\95Û\91\81i\8fI\92[\82É'\'\82ª\82È\82¢\82È\82ç\95t\82¯\82é\81j\r
+               TCHAR szDirectoryPathName[_MAX_PATH];\r
+               _tcsncpy_s( szDirectoryPathName, _MAX_PATH, lpPathName, _TRUNCATE );\r
+               if( '\\' != szDirectoryPathName[_tcslen(szDirectoryPathName) - 1] )\r
+               {       // \88ê\94Ô\8dÅ\8cã\82É'\'\82ª\82È\82¢\82È\82ç\95t\89Á\82·\82é\81B\r
+                       _tcsncat_s( szDirectoryPathName, _MAX_PATH, _T("\\"), _TRUNCATE );\r
+               }\r
+\r
+               // \83f\83B\83\8c\83N\83g\83\8a\93à\82Ì\83t\83@\83C\83\8b\91\96\8d¸\97p\82Ì\83t\83@\83C\83\8b\96¼\8dì\90¬\r
+               TCHAR szFindFilePathName[_MAX_PATH];\r
+               _tcsncpy_s( szFindFilePathName, _MAX_PATH, szDirectoryPathName, _TRUNCATE );\r
+               _tcsncat_s( szFindFilePathName, _MAX_PATH, _T("*"), _TRUNCATE );\r
+\r
+               // \83f\83B\83\8c\83N\83g\83\8a\93à\82Ì\83t\83@\83C\83\8b\91\96\8d¸\8aJ\8en\r
+               WIN32_FIND_DATA         fd;\r
+               HANDLE hFind = FindFirstFile( szFindFilePathName, &fd );\r
+               if( INVALID_HANDLE_VALUE == hFind )\r
+               {       // \91\96\8d¸\91Î\8fÛ\83t\83H\83\8b\83_\82ª\91\8dÝ\82µ\82È\82¢\81B\r
+                       return FALSE;\r
+               }\r
+\r
+               do\r
+               {\r
+                       //if( '.' != fd.cFileName[0] )\r
+                       if( 0 != _tcscmp( fd.cFileName, _T(".") )               // \83J\83\8c\83\93\83g\83t\83H\83\8b\83_\81u.\81v\82Æ\r
+                               && 0 != _tcscmp( fd.cFileName, _T("..") ) )     // \90e\83t\83H\83\8b\83_\81u..\81v\82Í\81A\8f\88\97\9d\82ð\83X\83L\83b\83v\r
+                       {\r
+                               TCHAR szFoundFilePathName[_MAX_PATH];\r
+                               _tcsncpy_s( szFoundFilePathName, _MAX_PATH, szDirectoryPathName, _TRUNCATE );\r
+                               _tcsncat_s( szFoundFilePathName, _MAX_PATH, fd.cFileName, _TRUNCATE );\r
+\r
+                               if( FILE_ATTRIBUTE_DIRECTORY & fd.dwFileAttributes )\r
+                               {       // \83f\83B\83\8c\83N\83g\83\8a\82È\82ç\8dÄ\8bN\8cÄ\82Ñ\8fo\82µ\82Å\8dí\8f\9c\r
+                                       if( !DeleteDirectory( szFoundFilePathName ) )\r
+                                       {\r
+                                               FindClose( hFind );\r
+                                               return FALSE;\r
+                                       }\r
+                               }\r
+                               else\r
+                               {       // \83t\83@\83C\83\8b\82È\82çWin32API\8aÖ\90\94\82ð\97p\82¢\82Ä\8dí\8f\9c\r
+                                       if( !DeleteFile( szFoundFilePathName ) )\r
+                                       {\r
+                                               FindClose( hFind );\r
+                                               return FALSE;\r
+                                       }\r
+                               }\r
+                       }\r
+               } while( FindNextFile( hFind, &fd ) );\r
+\r
+               FindClose( hFind );\r
+\r
+               return RemoveDirectory( lpPathName );\r
+       }\r
+\r
+};\r
+\r
+JsonGen::JsonGen()\r
+{\r
+       HANDLE hFind,hPmdFind,hTxtFind;                                                 // Directory Pmd Text\r
+       WIN32_FIND_DATA win32fd_dir,win32fd_pmd,win32fd_txt;    // Directory Pmd Text\r
+       TCHAR tcsTmpPath[MAX_PATH] = {0};\r
+       TCHAR tcsTmpPath_Pmd[MAX_PATH] = {0};\r
+       TCHAR tcsTmpDir[MAX_PATH] = {0};\r
+\r
+       std::vector<std::wstring> pmd_paths;\r
+       std::wstring prejson;\r
+       DxLib::VECTOR prePos = {0},curPos = {0},lclPos = {0};\r
+       DxLib::MATRIX chglcl = {0};\r
+\r
+       char pmd_model_name_[256] = {0};\r
+       char pmd_author_name_[256] = {0};\r
+\r
+       int exist_num_pmd_ = 0;\r
+\r
+       int model_handle_ = 0;\r
+\r
+       FILE *json_file = 0;\r
+\r
+       // resources/models/\93à\8c\9f\8dõ\81@\97ñ\8b\93\r
+       hFind = FindFirstFile(_T("\\resources\\models\\?*"), &win32fd_dir);\r
+\r
+       if (hFind == INVALID_HANDLE_VALUE) {\r
+               return;\r
+       }\r
+\r
+       do {\r
+               if (win32fd_dir.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&\r
+                       _tcscmp(win32fd_dir.cFileName,_T("."))!=0 &&\r
+                       _tcscmp(win32fd_dir.cFileName,_T(".."))!=0 &&\r
+                       _tcscmp(win32fd_dir.cFileName,_T(".svn"))!=0) {\r
+                       _tcscpy_s(tcsTmpDir,_T("\\resources\\models\\"));\r
+                       _tcscat_s(tcsTmpDir,win32fd_dir.cFileName);\r
+                       _tcscat_s(tcsTmpDir,_T("\\"));\r
+\r
+                       ZeroMemory(tcsTmpPath,MAX_PATH);\r
+                       _tcscpy_s(tcsTmpPath,tcsTmpDir);\r
+                       _tcscat_s(tcsTmpPath,_T("info.json"));\r
+\r
+                       // info.json\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\81Apmd\82É\8f]\82Á\82Ä\8dì\90¬\r
+                       if(!PathFileExists(tcsTmpPath))\r
+                       {\r
+                               ZeroMemory(tcsTmpPath_Pmd,MAX_PATH);\r
+                               _tcscpy_s(tcsTmpPath_Pmd,tcsTmpDir);\r
+                               _tcscat_s(tcsTmpPath_Pmd,_T("*.pmd"));\r
+                               hPmdFind = FindFirstFile(tcsTmpPath_Pmd, &win32fd_pmd);\r
+                               if(hPmdFind < 0)\r
+                               {\r
+                                       FindClose(hPmdFind);\r
+                                       continue;\r
+                               }\r
+\r
+                               TCHAR cur_dir[MAX_PATH];\r
+                               ZeroMemory(cur_dir,MAX_PATH);\r
+                               GetCurrentDirectory(MAX_PATH,cur_dir);\r
+                               bool flag = false;\r
+                               for(int k = MAX_PATH - 1;k != 0;--k)\r
+                               {\r
+                                       if( cur_dir[k] == _T('\\') )\r
+                                       {\r
+                                               cur_dir[k] = 0;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               do {\r
+                                       std::wstring tmp_path = cur_dir;\r
+                                       tmp_path += _T("\\resources\\models\\");\r
+                                       tmp_path += win32fd_dir.cFileName;\r
+                                       tmp_path += _T("\\");\r
+                                       tmp_path += win32fd_pmd.cFileName;\r
+                                       pmd_paths.push_back(tmp_path);\r
+                               } while (FindNextFile(hPmdFind, &win32fd_pmd));\r
+                               FindClose(hPmdFind);\r
+\r
+                               for(int i = 0;i < pmd_paths.size();++i){\r
+                                       char pmd_info[PMDINFO_SIZE+1];\r
+                                       int fd = _topen(pmd_paths[i].c_str(),O_RDONLY);\r
+                                       read(fd,pmd_info,PMDINFO_SIZE);\r
+                                       close(fd);\r
+\r
+                                       // \83\82\83f\83\8b\96¼\8eæ\93¾\r
+                                       strcpy_s(pmd_model_name_,pmd_info+7);\r
+\r
+                                       int cnt = 7 + strlen(pmd_info+7);\r
+                                       while(cnt < PMDINFO_SIZE){\r
+                                               if(!strncmp("\83\82\83f\83\8a\83\93\83O",pmd_info+cnt,10))break;\r
+                                               else    ++cnt;\r
+                                       }\r
+                                       if(cnt == PMDINFO_SIZE)\r
+                                       {\r
+                                               strcpy_s(pmd_author_name_,"Unknown");\r
+                                       }else{\r
+                                               for(cnt;cnt<PMDINFO_SIZE && (*(pmd_info+cnt) != 0x46 && *(pmd_info+cnt-1) != 0x81);++cnt);\r
+                                               int tmp_str_cnt = 1;\r
+                                               for(tmp_str_cnt;cnt+tmp_str_cnt<PMDINFO_SIZE && (*(pmd_info+cnt+tmp_str_cnt) != 0x0a && *(pmd_info+cnt+tmp_str_cnt) != 0x20);++tmp_str_cnt);\r
+                                               // \8dì\8eÒ\8eæ\93¾\r
+                                               strncpy_s(pmd_author_name_,pmd_info+cnt+1,tmp_str_cnt-1);\r
+                                       }\r
+\r
+                                       TCHAR tmp_mv1_path[MAX_PATH] = {0};\r
+                                       _tcscpy_s(tmp_mv1_path,pmd_paths[i].c_str());\r
+\r
+                                       model_handle_ = MV1LoadModel( tmp_mv1_path );\r
+                                       int tex_num = MV1GetTextureNum( model_handle_ );\r
+                                       int frame_num = MV1GetFrameNum( model_handle_ );\r
+\r
+\r
+                                       // \83{\81[\83\93\82É\8aî\82Ã\82¢\82½\83\82\83f\83\8b\82Ì\8d\82\82³\90Ý\92è\r
+                                       for(int j = 0;j < frame_num;++j)\r
+                                       {\r
+                                               curPos = MV1GetFramePosition( model_handle_, j );\r
+                                               chglcl = MV1GetFrameLocalMatrix( model_handle_, j );\r
+                                               lclPos.x = chglcl.m[3][0];\r
+                                               lclPos.y = chglcl.m[3][1];\r
+                                               lclPos.z = chglcl.m[3][2];\r
+\r
+                                               if(     prePos.y < curPos.y &&\r
+                                                       lclPos.x == curPos.x &&\r
+                                                       lclPos.y == curPos.y &&\r
+                                                       lclPos.z == curPos.z)prePos = curPos;\r
+                                       }\r
+\r
+                                       // JSON\82Ì\8d\\92z\r
+                                       prejson = _T("{\n\t\"name\": \"char:");\r
+                                       size_t tmp_w_s_m = ADFUNC_DXconvAnsiToWide(0,0,pmd_model_name_);\r
+                                       TCHAR *tmp_w_m = new TCHAR[tmp_w_s_m + 1];\r
+                                       ADFUNC_DXconvAnsiToWide(tmp_w_s_m,tmp_w_m,pmd_model_name_);\r
+                                       prejson += tmp_w_m;\r
+                                       prejson += _T(":");\r
+                                       size_t tmp_w_s_a = ADFUNC_DXconvAnsiToWide(0,0,pmd_author_name_);\r
+                                       TCHAR *tmp_w_a = new TCHAR[tmp_w_s_a + 1];\r
+                                       ADFUNC_DXconvAnsiToWide(tmp_w_s_a,tmp_w_a,pmd_author_name_);\r
+                                       prejson += tmp_w_a;\r
+                                       prejson += _T("\8e®\",\n\t\"character\":\n\t\t{\n\t\t\t\"height\":");\r
+                                       TCHAR tmp_f[32];\r
+                                       _ftot_s(tmp_f,32,floor(prePos.y*2)/10.0f,2);\r
+                                       prejson += tmp_f;\r
+                                       prejson += _T(",\n\t\t\t\"motions\":\n\t\t\t\t{\n\t\t\t\t\t\"stand\":\"basic_stand.vmd\",\n\t\t\t\t\t\"walk\": \t\"basic_walk.vmd\",\n\t\t\t\t\t\"run\":\t\"basic_run.vmd\"\n\t\t\t\t}\n\t\t}\n}");\r
+                                       TCHAR tmp_dir[MAX_PATH];\r
+                                       _tcscpy_s(tmp_dir,_T("\\resources\\models\\"));\r
+                                       _tcscat_s(tmp_dir,tmp_w_a);\r
+                                       _tcscat_s(tmp_dir,_T("\8e®"));\r
+                                       _tcscat_s(tmp_dir,tmp_w_m);\r
+                                       _tcscat_s(tmp_dir,_T("\\"));\r
+                                       _wmkdir(tmp_dir);\r
+                                       delete [] tmp_w_m;\r
+                                       delete [] tmp_w_a;\r
+                                       TCHAR json_path[MAX_PATH];\r
+                                       _tcscpy_s(json_path,tmp_dir);\r
+                                       _tcscat_s(json_path,_T("info.json"));\r
+                                       _tfopen_s(&json_file,json_path, _T("w, ccs=UTF-8"));\r
+                                       fseek(json_file, 0, SEEK_SET);\r
+                                       _ftprintf_s(json_file,prejson.c_str());\r
+                                       fclose(json_file);\r
+                                       TCHAR tmp_src[MAX_PATH];\r
+                                       TCHAR tmp_cpy[MAX_PATH];\r
+\r
+                                       // \83e\83N\83X\83`\83\83\82Ì\83R\83s\81[\r
+                                       for(int t = 0;t < tex_num;++t)\r
+                                       {\r
+                                               _tcscpy_s(tmp_src,tcsTmpDir);\r
+                                               _tcscat_s(tmp_src,MV1GetTextureName( model_handle_, t));\r
+                                               _tcscpy_s(tmp_cpy,tmp_dir);\r
+                                               _tcscat_s(tmp_cpy,MV1GetTextureName( model_handle_, t));\r
+                                               CopyFile(tmp_src,tmp_cpy,TRUE);\r
+                                       }\r
+                                       TCHAR tmp_txt_f[MAX_PATH];\r
+                                       _tcscpy_s(tmp_txt_f,tcsTmpDir);\r
+                                       _tcscat_s(tmp_txt_f,_T("*.txt"));\r
+                                       hTxtFind = FindFirstFile(tmp_txt_f,&win32fd_txt);\r
+                                       do{\r
+                                               _tcscpy_s(tmp_src,tcsTmpDir);\r
+                                               _tcscat_s(tmp_src,win32fd_txt.cFileName);\r
+                                               _tcscpy_s(tmp_cpy,tmp_dir);\r
+                                               _tcscat_s(tmp_cpy,win32fd_txt.cFileName);\r
+                                               CopyFile(tmp_src,tmp_cpy,TRUE);\r
+                                       }while(FindNextFile(hTxtFind, &win32fd_txt));\r
+                                       FindClose(hTxtFind);\r
+                                       TCHAR tmp_type[128] = {0};\r
+                                       _tsplitpath(pmd_paths[i].c_str(),NULL,NULL,tmp_cpy,tmp_type);\r
+                                       _tcscat_s(tmp_cpy,tmp_type);\r
+                                       _tcscpy_s(tmp_type,tmp_dir);\r
+                                       _tcscat_s(tmp_type,tmp_cpy);\r
+                                       CopyFile(pmd_paths[i].c_str(),tmp_type,TRUE);\r
+                               }\r
+\r
+                               DeleteDirectory(tcsTmpDir);\r
+                       }\r
+               }\r
+       } while (FindNextFile(hFind, &win32fd_dir));\r
+\r
+       FindClose(hFind);\r
+}
\ No newline at end of file
diff --git a/client/GenerateJSON.hpp b/client/GenerateJSON.hpp
new file mode 100644 (file)
index 0000000..a9cbfc0
--- /dev/null
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <io.h>
+#include <fcntl.h>
+#include <vector>
+#include <string>
+#include <math.h>
+#include <Windows.h>
+#include <shlwapi.h>
+#include <DxLib.h>
+
+#pragma comment(lib, "shlwapi.lib")
+
+#define PMDINFO_SIZE 0x11A
+
+class JsonGen
+{
+public:
+       JsonGen();
+       virtual ~JsonGen(){};
+};
\ No newline at end of file
index ffd823a..c16533e 100644 (file)
Binary files a/client/ResourceManager.cpp and b/client/ResourceManager.cpp differ
index dca3c2d..6507076 100644 (file)
@@ -79,6 +79,8 @@ class ResourceManager {
         static void RequestModelFromName(const tstring&);
         static bool IsCachedModelName(const tstring&);
                static const std::vector<std::string>& GetModelNameList();
+               static void SetModelEdgeSize(int handle);
+               static void set_model_edge_size(float edge_size);
 
        private:
                static tstring NameToFullPath(const tstring& name);
@@ -92,7 +94,7 @@ class ResourceManager {
         static std::unordered_map<tstring, tstring> model_names_;
         static std::unordered_map<tstring, ModelHandle> model_handles_;
                static std::vector<std::string> model_name_list_;
-
+               static float model_edge_size_;
 };
 
 class ImageHandle {
index 2d9dab8..26a91aa 100644 (file)
Binary files a/client/scene/Init.cpp and b/client/scene/Init.cpp differ