2017-02-25 09:30:05 +08:00
|
|
|
#include "MiniEngine.h"
|
|
|
|
#include <algorithm>
|
2017-02-25 13:39:41 +08:00
|
|
|
#include <map>
|
|
|
|
#include <mutex>
|
2017-03-09 18:53:18 +08:00
|
|
|
#include <fstream>
|
|
|
|
|
2017-03-23 18:47:51 +08:00
|
|
|
#ifdef _MSC_VER /// Visual Studio
|
|
|
|
#define _MINIENGINE_HAS_UNISTD 0
|
|
|
|
#else
|
|
|
|
#define _MINIENGINE_HAS_UNISTD 1
|
2017-03-09 18:53:18 +08:00
|
|
|
#include <unistd.h>
|
2017-03-23 18:47:51 +08:00
|
|
|
#endif
|
|
|
|
|
2017-03-09 18:53:18 +08:00
|
|
|
#include "rapidxml/rapidxml.hpp"
|
|
|
|
#include "rapidxml/rapidxml_print.hpp"
|
|
|
|
#include "rapidxml/rapidxml_utils.hpp"
|
2017-02-25 09:30:05 +08:00
|
|
|
|
|
|
|
namespace MiniEngine
|
|
|
|
{
|
2017-03-09 18:53:18 +08:00
|
|
|
struct StringEngine::impl
|
|
|
|
{
|
|
|
|
rapidxml::xml_document<> doc;
|
|
|
|
rapidxml::xml_node<>* root;
|
|
|
|
bool status;
|
|
|
|
};
|
|
|
|
|
|
|
|
StringEngine::StringEngine(std::string StringFile,std::string LanguageTag)
|
|
|
|
{
|
|
|
|
pimpl=new impl;
|
|
|
|
pimpl->status=false;
|
2017-05-18 13:04:20 +08:00
|
|
|
|
2017-03-09 18:53:18 +08:00
|
|
|
std::ifstream ifs(StringFile);
|
|
|
|
if(!ifs) return;
|
|
|
|
rapidxml::file<> strFile(ifs);
|
|
|
|
pimpl->doc.parse<0>(strFile.data());
|
|
|
|
pimpl->root=pimpl->doc.first_node(LanguageTag.c_str());
|
|
|
|
if(pimpl->root==nullptr) return;
|
|
|
|
|
|
|
|
pimpl->status=true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool StringEngine::ready()
|
|
|
|
{
|
|
|
|
return pimpl->status;
|
|
|
|
}
|
|
|
|
|
|
|
|
int StringEngine::useLanaguage(std::string LanguageTag)
|
|
|
|
{
|
|
|
|
pimpl->root=pimpl->doc.first_node(LanguageTag.c_str());
|
|
|
|
if(pimpl->root==nullptr)
|
|
|
|
{
|
|
|
|
pimpl->status=false;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
pimpl->status=true;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string StringEngine::getString(std::string Tag)
|
|
|
|
{
|
2017-05-18 13:04:20 +08:00
|
|
|
if(!ready()) return "(StringEngine::STRING_NOT_FOUND)";
|
|
|
|
rapidxml::xml_node<>* pnode=pimpl->root->first_node(Tag.c_str());
|
|
|
|
if(pnode==nullptr) return "(StringEngine::STRING_NOT_FOUND)";
|
|
|
|
char* context=pnode->value();
|
|
|
|
if(context==nullptr) return "";/// Empty String.
|
2017-03-09 18:53:18 +08:00
|
|
|
else return std::string(context);
|
|
|
|
}
|
|
|
|
|
|
|
|
StringEngine::~StringEngine()
|
|
|
|
{
|
|
|
|
delete pimpl;
|
|
|
|
}
|
|
|
|
|
2017-05-22 18:47:28 +08:00
|
|
|
bool GetScanKeyState(SDL_Scancode code)
|
|
|
|
{
|
|
|
|
return SDL_GetKeyboardState(NULL)[code];
|
|
|
|
}
|
|
|
|
|
2017-02-25 09:30:05 +08:00
|
|
|
}/// End of namespace MiniEngine
|
|
|
|
|
2017-03-23 12:22:02 +08:00
|
|
|
/// The Following Functions are not avaliable in Visual Studio
|
2017-03-23 18:47:51 +08:00
|
|
|
#if (_MINIENGINE_HAS_UNISTD == 1)
|
2017-03-09 18:53:18 +08:00
|
|
|
bool isexist(std::string Path)
|
|
|
|
{
|
|
|
|
return access(Path.c_str(),F_OK)==0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool canread(std::string Path)
|
|
|
|
{
|
|
|
|
return access(Path.c_str(),R_OK)==0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool canwrite(std::string Path)
|
|
|
|
{
|
|
|
|
return access(Path.c_str(),W_OK)==0;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool canexecute(std::string Path)
|
|
|
|
{
|
|
|
|
return access(Path.c_str(),X_OK)==0;
|
|
|
|
}
|
2017-03-23 19:28:06 +08:00
|
|
|
#else /// _MINIENGINE_HAS_UNISTD == 0
|
2017-03-23 18:47:51 +08:00
|
|
|
/// File Functions will be implied in platform specific source file.
|
|
|
|
#endif
|