Path类细节调整
This commit is contained in:
parent
8c246df955
commit
17d73916ba
|
|
@ -28,7 +28,7 @@ e2d::Animation::~Animation()
|
||||||
|
|
||||||
void e2d::Animation::setInterval(double interval)
|
void e2d::Animation::setInterval(double interval)
|
||||||
{
|
{
|
||||||
_interval = max(interval, 0);
|
_interval = std::max(interval, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Animation::onDestroy()
|
void e2d::Animation::onDestroy()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
e2d::Delay::Delay(double duration)
|
e2d::Delay::Delay(double duration)
|
||||||
: _delta(0)
|
: _delta(0)
|
||||||
, _delay(max(duration, 0))
|
, _delay(std::max(duration, 0.0))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
e2d::FiniteTimeAction::FiniteTimeAction(double duration)
|
e2d::FiniteTimeAction::FiniteTimeAction(double duration)
|
||||||
: _delta(0)
|
: _delta(0)
|
||||||
, _duration(max(duration, 0))
|
, _duration(std::max(duration, 0.0))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ void e2d::FiniteTimeAction::_update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
_delta = std::min((Time::getTotalTime() - _last) / _duration, 1.0);
|
||||||
|
|
||||||
if (_delta >= 1)
|
if (_delta >= 1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -62,13 +62,6 @@ bool e2d::Game::init()
|
||||||
throw SystemException(L"初始化 DirectInput 组件失败");
|
throw SystemException(L"初始化 DirectInput 组件失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化路径
|
|
||||||
if (!Path::__init())
|
|
||||||
{
|
|
||||||
DestroyResources();
|
|
||||||
throw SystemException(L"必要系统路径访问失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化成功
|
// 初始化成功
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -234,8 +234,8 @@ void e2d::Window::setSize(int width, int height)
|
||||||
// 当输入的窗口大小比分辨率大时,给出警告
|
// 当输入的窗口大小比分辨率大时,给出警告
|
||||||
WARN_IF(screenWidth < width || screenHeight < height, "The window is larger than screen!");
|
WARN_IF(screenWidth < width || screenHeight < height, "The window is larger than screen!");
|
||||||
// 取最小值
|
// 取最小值
|
||||||
width = min(width, screenWidth);
|
width = std::min(width, screenWidth);
|
||||||
height = min(height, screenHeight);
|
height = std::min(height, screenHeight);
|
||||||
// 修改窗口大小,并设置窗口在屏幕居中
|
// 修改窗口大小,并设置窗口在屏幕居中
|
||||||
::MoveWindow(_hWnd, (screenWidth - width) / 2, (screenHeight - height) / 2, width, height, TRUE);
|
::MoveWindow(_hWnd, (screenWidth - width) / 2, (screenHeight - height) / 2, width, height, TRUE);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ e2d::CircleCollider::CircleCollider(Point center, double radius)
|
||||||
e2d::CircleCollider::CircleCollider(Node * node)
|
e2d::CircleCollider::CircleCollider(Node * node)
|
||||||
: _d2dCircle(nullptr)
|
: _d2dCircle(nullptr)
|
||||||
{
|
{
|
||||||
double minSide = min(node->getRealWidth(), node->getRealHeight());
|
double minSide = std::min(node->getRealWidth(), node->getRealHeight());
|
||||||
this->setCircle(
|
this->setCircle(
|
||||||
Point(
|
Point(
|
||||||
node->getRealWidth() / 2,
|
node->getRealWidth() / 2,
|
||||||
|
|
@ -50,7 +50,7 @@ void e2d::CircleCollider::_resize()
|
||||||
{
|
{
|
||||||
if (_parentNode && _enable)
|
if (_parentNode && _enable)
|
||||||
{
|
{
|
||||||
double minSide = min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
double minSide = std::min(_parentNode->getRealWidth(), _parentNode->getRealHeight());
|
||||||
this->setCircle(
|
this->setCircle(
|
||||||
Point(
|
Point(
|
||||||
_parentNode->getRealWidth() / 2,
|
_parentNode->getRealWidth() / 2,
|
||||||
|
|
|
||||||
|
|
@ -81,10 +81,10 @@ void e2d::Image::crop(const Rect& cropRect)
|
||||||
{
|
{
|
||||||
if (_bitmap)
|
if (_bitmap)
|
||||||
{
|
{
|
||||||
_cropRect.origin.x = min(max(cropRect.origin.x, 0), this->getSourceWidth());
|
_cropRect.origin.x = std::min(std::max(cropRect.origin.x, 0.0), this->getSourceWidth());
|
||||||
_cropRect.origin.y = min(max(cropRect.origin.y, 0), this->getSourceHeight());
|
_cropRect.origin.y = std::min(std::max(cropRect.origin.y, 0.0), this->getSourceHeight());
|
||||||
_cropRect.size.width = min(max(cropRect.size.width, 0), this->getSourceWidth() - cropRect.origin.x);
|
_cropRect.size.width = std::min(std::max(cropRect.size.width, 0.0), this->getSourceWidth() - cropRect.origin.x);
|
||||||
_cropRect.size.height = min(max(cropRect.size.height, 0), this->getSourceHeight() - cropRect.origin.y);
|
_cropRect.size.height = std::min(std::max(cropRect.size.height, 0.0), this->getSourceHeight() - cropRect.origin.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -476,7 +476,7 @@ void e2d::Node::setOpacity(double opacity)
|
||||||
if (_realOpacity == opacity)
|
if (_realOpacity == opacity)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_displayOpacity = _realOpacity = min(max(float(opacity), 0), 1);
|
_displayOpacity = _realOpacity = std::min(std::max(float(opacity), 0.f), 1.f);
|
||||||
// 更新节点透明度
|
// 更新节点透明度
|
||||||
_updateOpacity();
|
_updateOpacity();
|
||||||
}
|
}
|
||||||
|
|
@ -496,8 +496,8 @@ void e2d::Node::setPivot(double pivotX, double pivotY)
|
||||||
if (_pivotX == pivotX && _pivotY == pivotY)
|
if (_pivotX == pivotX && _pivotY == pivotY)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_pivotX = min(max(float(pivotX), 0), 1);
|
_pivotX = std::min(std::max(float(pivotX), 0.f), 1.f);
|
||||||
_pivotY = min(max(float(pivotY), 0), 1);
|
_pivotY = std::min(std::max(float(pivotY), 0.f), 1.f);
|
||||||
_needTransform = true;
|
_needTransform = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -913,8 +913,8 @@ void e2d::Node::setAutoUpdate(bool bAutoUpdate)
|
||||||
|
|
||||||
void e2d::Node::setDefaultPiovt(double defaultPiovtX, double defaultPiovtY)
|
void e2d::Node::setDefaultPiovt(double defaultPiovtX, double defaultPiovtY)
|
||||||
{
|
{
|
||||||
s_fDefaultPiovtX = min(max(float(defaultPiovtX), 0), 1);
|
s_fDefaultPiovtX = std::min(std::max(float(defaultPiovtX), 0.f), 1.f);
|
||||||
s_fDefaultPiovtY = min(max(float(defaultPiovtY), 0), 1);
|
s_fDefaultPiovtY = std::min(std::max(float(defaultPiovtY), 0.f), 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Node::setDefaultCollider(Collider::Type type)
|
void e2d::Node::setDefaultCollider(Collider::Type type)
|
||||||
|
|
|
||||||
|
|
@ -92,8 +92,8 @@ void e2d::Sprite::crop(const Rect& cropRect)
|
||||||
{
|
{
|
||||||
_image->crop(cropRect);
|
_image->crop(cropRect);
|
||||||
Node::setSize(
|
Node::setSize(
|
||||||
min(max(cropRect.size.width, 0), _image->getSourceWidth() - _image->getCropX()),
|
std::min(std::max(cropRect.size.width, 0.0), _image->getSourceWidth() - _image->getCropX()),
|
||||||
min(max(cropRect.size.height, 0), _image->getSourceHeight() - _image->getCropY())
|
std::min(std::max(cropRect.size.height, 0.0), _image->getSourceHeight() - _image->getCropY())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,7 @@ void e2d::Text::setWrappingWidth(double wrappingWidth)
|
||||||
{
|
{
|
||||||
if (_style.wrappingWidth != wrappingWidth)
|
if (_style.wrappingWidth != wrappingWidth)
|
||||||
{
|
{
|
||||||
_style.wrappingWidth = max(wrappingWidth, 0);
|
_style.wrappingWidth = std::max(wrappingWidth, 0.0);
|
||||||
|
|
||||||
if (_style.wrapping)
|
if (_style.wrapping)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,46 +3,46 @@
|
||||||
|
|
||||||
void e2d::Data::saveInt(const String& key, int value, const String& field)
|
void e2d::Data::saveInt(const String& key, int value, const String& field)
|
||||||
{
|
{
|
||||||
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(value), (LPCWSTR)Path::getDataSavePath());
|
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(value), (LPCWSTR)Path::getDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Data::saveDouble(const String& key, double value, const String& field)
|
void e2d::Data::saveDouble(const String& key, double value, const String& field)
|
||||||
{
|
{
|
||||||
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(value), (LPCWSTR)Path::getDataSavePath());
|
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(value), (LPCWSTR)Path::getDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Data::saveBool(const String& key, bool value, const String& field)
|
void e2d::Data::saveBool(const String& key, bool value, const String& field)
|
||||||
{
|
{
|
||||||
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (value ? L"1" : L"0"), (LPCWSTR)Path::getDataSavePath());
|
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (value ? L"1" : L"0"), (LPCWSTR)Path::getDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Data::saveString(const String& key, const String& value, const String& field)
|
void e2d::Data::saveString(const String& key, const String& value, const String& field)
|
||||||
{
|
{
|
||||||
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)value, (LPCWSTR)Path::getDataSavePath());
|
::WritePrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)value, (LPCWSTR)Path::getDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
int e2d::Data::getInt(const String& key, int defaultValue, const String& field)
|
int e2d::Data::getInt(const String& key, int defaultValue, const String& field)
|
||||||
{
|
{
|
||||||
return ::GetPrivateProfileInt((LPCWSTR)field, (LPCWSTR)key, defaultValue, (LPCWSTR)Path::getDataSavePath());
|
return ::GetPrivateProfileInt((LPCWSTR)field, (LPCWSTR)key, defaultValue, (LPCWSTR)Path::getDataPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
double e2d::Data::getDouble(const String& key, double defaultValue, const String& field)
|
double e2d::Data::getDouble(const String& key, double defaultValue, const String& field)
|
||||||
{
|
{
|
||||||
wchar_t temp[32] = { 0 };
|
wchar_t temp[32] = { 0 };
|
||||||
::GetPrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(defaultValue), temp, 31, (LPCWSTR)Path::getDataSavePath());
|
::GetPrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)String::parse(defaultValue), temp, 31, (LPCWSTR)Path::getDataPath());
|
||||||
return std::stof(temp);
|
return std::stof(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Data::getBool(const String& key, bool defaultValue, const String& field)
|
bool e2d::Data::getBool(const String& key, bool defaultValue, const String& field)
|
||||||
{
|
{
|
||||||
int nDefaultValue = defaultValue ? 1 : 0;
|
int nDefaultValue = defaultValue ? 1 : 0;
|
||||||
int nValue = ::GetPrivateProfileInt((LPCWSTR)field, (LPCWSTR)key, nDefaultValue, (LPCWSTR)Path::getDataSavePath());
|
int nValue = ::GetPrivateProfileInt((LPCWSTR)field, (LPCWSTR)key, nDefaultValue, (LPCWSTR)Path::getDataPath());
|
||||||
return nValue != 0;
|
return nValue != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::String e2d::Data::getString(const String& key, const String& defaultValue, const String& field)
|
e2d::String e2d::Data::getString(const String& key, const String& defaultValue, const String& field)
|
||||||
{
|
{
|
||||||
wchar_t temp[256] = { 0 };
|
wchar_t temp[256] = { 0 };
|
||||||
::GetPrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)defaultValue, temp, 255, (LPCWSTR)Path::getDataSavePath());
|
::GetPrivateProfileString((LPCWSTR)field, (LPCWSTR)key, (LPCWSTR)defaultValue, temp, 255, (LPCWSTR)Path::getDataPath());
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
@ -247,7 +247,7 @@ bool e2d::Music::play(int nLoopCount)
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
nLoopCount = min(nLoopCount, XAUDIO2_LOOP_INFINITE - 1);
|
nLoopCount = std::min(nLoopCount, XAUDIO2_LOOP_INFINITE - 1);
|
||||||
nLoopCount = (nLoopCount < 0) ? XAUDIO2_LOOP_INFINITE : nLoopCount;
|
nLoopCount = (nLoopCount < 0) ? XAUDIO2_LOOP_INFINITE : nLoopCount;
|
||||||
|
|
||||||
// 提交 wave 样本数据
|
// 提交 wave 样本数据
|
||||||
|
|
|
||||||
|
|
@ -1,70 +1,45 @@
|
||||||
#include "..\e2dtool.h"
|
#include "..\e2dtool.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <list>
|
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
|
|
||||||
#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
|
||||||
EXTERN_C const GUID DECLSPEC_SELECTANY name \
|
|
||||||
= { l, w1, w2,{ b1, b2, b3, b4, b5, b6, b7, b8 } }
|
|
||||||
|
|
||||||
DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData, 0xF1B32785, 0x6FBA, 0x4FCF, 0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91);
|
extern "C" const GUID DECLSPEC_SELECTANY FOLDERID_LocalAppData = {
|
||||||
|
0xF1B32785, 0x6FBA, 0x4FCF, { 0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static e2d::String s_sLocalAppDataPath;
|
e2d::String e2d::Path::_tempPath;
|
||||||
static e2d::String s_sTempPath;
|
e2d::String e2d::Path::_dataPath;
|
||||||
static e2d::String s_sDataSavePath;
|
std::list<e2d::String> e2d::Path::_paths;
|
||||||
static std::list<e2d::String> s_vPathList;
|
|
||||||
|
|
||||||
bool e2d::Path::__init()
|
|
||||||
{
|
|
||||||
// 获取 AppData\Local 文件夹的路径
|
|
||||||
typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(const GUID& rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
|
|
||||||
|
|
||||||
PWSTR pszPath = nullptr;
|
|
||||||
HMODULE hModule = LoadLibrary(L"shell32.dll");
|
|
||||||
pFunSHGetKnownFolderPath SHGetKnownFolderPath = (pFunSHGetKnownFolderPath)GetProcAddress(hModule, "SHGetKnownFolderPath");
|
|
||||||
HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &pszPath);
|
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
|
||||||
{
|
|
||||||
s_sLocalAppDataPath = pszPath;
|
|
||||||
CoTaskMemFree(pszPath);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WARN("Get local AppData path failed!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Path::setGameFolderName(const String & name)
|
void e2d::Path::setGameFolderName(const String & name)
|
||||||
{
|
{
|
||||||
if (name.isEmpty())
|
if (name.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 获取数据的默认保存路径
|
// 设置数据的默认保存路径
|
||||||
if (!s_sLocalAppDataPath.isEmpty())
|
String localAppDataPath = Path::getLocalAppDataPath();
|
||||||
|
if (!localAppDataPath.isEmpty())
|
||||||
{
|
{
|
||||||
s_sDataSavePath = s_sLocalAppDataPath + L"\\Easy2DGameData\\" << name << L"\\";
|
_dataPath = localAppDataPath + L"\\Easy2DGameData\\" << name << L"\\";
|
||||||
|
|
||||||
if (!Path::exists(s_sDataSavePath) && !Path::createFolder(s_sDataSavePath))
|
if (!Path::exists(_dataPath) && !Path::createFolder(_dataPath))
|
||||||
{
|
{
|
||||||
s_sDataSavePath = L"";
|
_dataPath = L"";
|
||||||
}
|
}
|
||||||
s_sDataSavePath << L"Data.ini";
|
_dataPath << L"Data.ini";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取临时文件目录
|
// 设置临时文件保存路径
|
||||||
wchar_t path[_MAX_PATH];
|
wchar_t path[_MAX_PATH];
|
||||||
if (0 != ::GetTempPath(_MAX_PATH, path))
|
if (0 != ::GetTempPath(_MAX_PATH, path))
|
||||||
{
|
{
|
||||||
s_sTempPath << path << L"\\Easy2DGameTemp\\" << name << L"\\";
|
_tempPath << path << L"\\Easy2DGameTemp\\" << name << L"\\";
|
||||||
|
|
||||||
if (!Path::exists(s_sTempPath) && !Path::createFolder(s_sTempPath))
|
if (!Path::exists(_tempPath) && !Path::createFolder(_tempPath))
|
||||||
{
|
{
|
||||||
s_sTempPath = L"";
|
_tempPath = L"";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -76,19 +51,42 @@ void e2d::Path::addSearchPath(String path)
|
||||||
{
|
{
|
||||||
path << L"\\";
|
path << L"\\";
|
||||||
}
|
}
|
||||||
auto iter = std::find(s_vPathList.cbegin(), s_vPathList.cend(), path);
|
auto iter = std::find(_paths.cbegin(), _paths.cend(), path);
|
||||||
if (iter == s_vPathList.cend())
|
if (iter == _paths.cend())
|
||||||
{
|
{
|
||||||
s_vPathList.push_front(path);
|
_paths.push_front(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::String e2d::Path::getTempPath()
|
e2d::String e2d::Path::getTempPath()
|
||||||
{
|
{
|
||||||
return s_sTempPath;
|
return _tempPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::String e2d::Path::getExecutableFilePath()
|
e2d::String e2d::Path::getLocalAppDataPath()
|
||||||
|
{
|
||||||
|
static String localAppDataPath;
|
||||||
|
if (localAppDataPath.isEmpty())
|
||||||
|
{
|
||||||
|
// 获取 AppData/Local 文件夹的路径
|
||||||
|
typedef HRESULT(WINAPI* pFunSHGetKnownFolderPath)(const GUID& rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath);
|
||||||
|
|
||||||
|
PWSTR pszPath = nullptr;
|
||||||
|
HMODULE hModule = LoadLibrary(L"shell32.dll");
|
||||||
|
pFunSHGetKnownFolderPath SHGetKnownFolderPath = (pFunSHGetKnownFolderPath)GetProcAddress(hModule, "SHGetKnownFolderPath");
|
||||||
|
HRESULT hr = SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &pszPath);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
localAppDataPath = pszPath;
|
||||||
|
CoTaskMemFree(pszPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return localAppDataPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::String e2d::Path::getCurrentFilePath()
|
||||||
{
|
{
|
||||||
TCHAR szPath[_MAX_PATH] = { 0 };
|
TCHAR szPath[_MAX_PATH] = { 0 };
|
||||||
if (::GetModuleFileName(nullptr, szPath, _MAX_PATH) != 0)
|
if (::GetModuleFileName(nullptr, szPath, _MAX_PATH) != 0)
|
||||||
|
|
@ -106,7 +104,7 @@ e2d::String e2d::Path::findFile(const String& path)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (auto& resPath : s_vPathList)
|
for (auto& resPath : _paths)
|
||||||
{
|
{
|
||||||
if (Path::exists(resPath + path))
|
if (Path::exists(resPath + path))
|
||||||
{
|
{
|
||||||
|
|
@ -119,7 +117,7 @@ e2d::String e2d::Path::findFile(const String& path)
|
||||||
|
|
||||||
e2d::String e2d::Path::extractResource(int resNameId, const String & resType, const String & destFileName)
|
e2d::String e2d::Path::extractResource(int resNameId, const String & resType, const String & destFileName)
|
||||||
{
|
{
|
||||||
String destFilePath = s_sTempPath + destFileName;
|
String destFilePath = _tempPath + destFileName;
|
||||||
// ´´½¨Îļþ
|
// ´´½¨Îļþ
|
||||||
HANDLE hFile = ::CreateFile((LPCWSTR)destFilePath, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
|
HANDLE hFile = ::CreateFile((LPCWSTR)destFilePath, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
|
||||||
if (hFile == INVALID_HANDLE_VALUE)
|
if (hFile == INVALID_HANDLE_VALUE)
|
||||||
|
|
@ -146,9 +144,9 @@ e2d::String e2d::Path::extractResource(int resNameId, const String & resType, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::String e2d::Path::getDataSavePath()
|
e2d::String e2d::Path::getDataPath()
|
||||||
{
|
{
|
||||||
return s_sDataSavePath;
|
return _dataPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::String e2d::Path::getFileExtension(const String& filePath)
|
e2d::String e2d::Path::getFileExtension(const String& filePath)
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,7 @@ double e2d::Player::getVolume()
|
||||||
|
|
||||||
void e2d::Player::setVolume(double volume)
|
void e2d::Player::setVolume(double volume)
|
||||||
{
|
{
|
||||||
_volume = min(max(float(volume), -224), 224);
|
_volume = std::min(std::max(float(volume), -224.f), 224.f);
|
||||||
for (auto pair : _fileList)
|
for (auto pair : _fileList)
|
||||||
{
|
{
|
||||||
pair.second->setVolume(_volume);
|
pair.second->setVolume(_volume);
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ namespace e2d
|
||||||
, stopped(false)
|
, stopped(false)
|
||||||
, runTimes(0)
|
, runTimes(0)
|
||||||
, totalTimes(updateTimes)
|
, totalTimes(updateTimes)
|
||||||
, delay(max(delay, 0))
|
, delay(std::max(delay, 0.0))
|
||||||
, lastTime(e2d::Time::getTotalTime())
|
, lastTime(e2d::Time::getTotalTime())
|
||||||
, callback(func)
|
, callback(func)
|
||||||
, name(name)
|
, name(name)
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ e2d::Transition::Transition(double duration)
|
||||||
, _outLayerParam()
|
, _outLayerParam()
|
||||||
, _inLayerParam()
|
, _inLayerParam()
|
||||||
{
|
{
|
||||||
_duration = max(duration, 0);
|
_duration = std::max(duration, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Transition::~Transition()
|
e2d::Transition::~Transition()
|
||||||
|
|
@ -68,7 +68,7 @@ void e2d::Transition::_update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
_delta = std::min((Time::getTotalTime() - _last) / _duration, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->_updateCustom();
|
this->_updateCustom();
|
||||||
|
|
@ -92,10 +92,10 @@ void e2d::Transition::_render()
|
||||||
{
|
{
|
||||||
Point rootPos = _outScene->getRoot()->getPos();
|
Point rootPos = _outScene->getRoot()->getPos();
|
||||||
auto clipRect = D2D1::RectF(
|
auto clipRect = D2D1::RectF(
|
||||||
float(max(rootPos.x, 0)),
|
float(std::max(rootPos.x, 0.0)),
|
||||||
float(max(rootPos.y, 0)),
|
float(std::max(rootPos.y, 0.0)),
|
||||||
float(min(rootPos.x + _windowSize.width, _windowSize.width)),
|
float(std::min(rootPos.x + _windowSize.width, _windowSize.width)),
|
||||||
float(min(rootPos.y + _windowSize.height, _windowSize.height))
|
float(std::min(rootPos.y + _windowSize.height, _windowSize.height))
|
||||||
);
|
);
|
||||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||||
|
|
@ -111,10 +111,10 @@ void e2d::Transition::_render()
|
||||||
{
|
{
|
||||||
Point rootPos = _inScene->getRoot()->getPos();
|
Point rootPos = _inScene->getRoot()->getPos();
|
||||||
auto clipRect = D2D1::RectF(
|
auto clipRect = D2D1::RectF(
|
||||||
float(max(rootPos.x, 0)),
|
float(std::max(rootPos.x, 0.0)),
|
||||||
float(max(rootPos.y, 0)),
|
float(std::max(rootPos.y, 0.0)),
|
||||||
float(min(rootPos.x + _windowSize.width, _windowSize.width)),
|
float(std::min(rootPos.x + _windowSize.width, _windowSize.width)),
|
||||||
float(min(rootPos.y + _windowSize.height, _windowSize.height))
|
float(std::min(rootPos.y + _windowSize.height, _windowSize.height))
|
||||||
);
|
);
|
||||||
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
pRT->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||||
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
pRT->PushAxisAlignedClip(clipRect, D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@
|
||||||
// C++ RunTime Header Files
|
// C++ RunTime Header Files
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <list>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <random>
|
#include <random>
|
||||||
|
|
@ -97,3 +98,12 @@
|
||||||
Class(const Class &); \
|
Class(const Class &); \
|
||||||
Class & operator= (const Class &)
|
Class & operator= (const Class &)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef max
|
||||||
|
# undef max
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef min
|
||||||
|
# undef min
|
||||||
|
#endif
|
||||||
|
|
@ -477,13 +477,16 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
// 获取数据的默认保存路径
|
// 获取数据的默认保存路径
|
||||||
static String getDataSavePath();
|
static String getDataPath();
|
||||||
|
|
||||||
// 获取临时文件目录
|
// 获取临时文件目录
|
||||||
static String getTempPath();
|
static String getTempPath();
|
||||||
|
|
||||||
// 获取执行程序的绝对路径
|
// 获取 LocalAppData 目录
|
||||||
static String getExecutableFilePath();
|
static String getLocalAppDataPath();
|
||||||
|
|
||||||
|
// 获取当前程序的运行路径
|
||||||
|
static String getCurrentFilePath();
|
||||||
|
|
||||||
// 获取文件扩展名
|
// 获取文件扩展名
|
||||||
static String getFileExtension(
|
static String getFileExtension(
|
||||||
|
|
@ -507,8 +510,9 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// 初始化
|
static String _tempPath;
|
||||||
static bool __init();
|
static String _dataPath;
|
||||||
|
static std::list<String> _paths;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue