Magic_Game/core/etools.h

288 lines
5.0 KiB
C
Raw Normal View History

#pragma once
#include "ebase.h"
#include <random>
namespace e2d
{
2017-10-17 21:22:25 +08:00
class ETimerManager;
2017-10-19 00:50:04 +08:00
class EAction;
2017-10-17 21:22:25 +08:00
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class ERandom
{
public:
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
template<typename T>
static inline T range(T min, T max) { return e2d::ERandom::randomInt(min, max); }
// ȡ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static inline float range(float min, float max) { return e2d::ERandom::randomReal(min, max); }
// ȡ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static inline double range(double min, double max) { return e2d::ERandom::randomReal(min, max); }
// ȡ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static inline long double range(long double min, long double max) { return e2d::ERandom::randomReal(min, max); }
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
template<typename T>
static T randomInt(
T min,
T max)
{
std::uniform_int_distribution<T> dist(min, max);
return dist(getEngine());
}
// ȡ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
template<typename T>
static T randomReal(
T min,
T max)
{
std::uniform_real_distribution<T> dist(min, max);
return dist(getEngine());
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static std::default_random_engine &getEngine();
};
2017-10-14 01:07:34 +08:00
2017-10-14 18:43:32 +08:00
// <20><>ʱ<EFBFBD><CAB1>
class ETimer :
public EObject
{
2017-10-17 21:22:25 +08:00
friend ETimerManager;
public:
ETimer();
ETimer(
2018-01-30 16:45:38 +08:00
const TimerCallback &callback, /* <20><>ʱ<EFBFBD><CAB1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD> */
2017-10-21 19:09:31 +08:00
int repeatTimes = -1, /* <20><>ʱ<EFBFBD><CAB1>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD> */
2018-01-30 16:45:38 +08:00
float interval = 0LL, /* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩 */
2017-10-21 19:09:31 +08:00
bool atOnce = false /* <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4> */
2017-10-17 21:22:25 +08:00
);
ETimer(
const EString &name, /* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
2018-01-30 16:45:38 +08:00
const TimerCallback &callback, /* <20><>ʱ<EFBFBD><CAB1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD> */
2017-10-21 19:09:31 +08:00
int repeatTimes = -1, /* <20><>ʱ<EFBFBD><CAB1>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD> */
2018-01-30 16:45:38 +08:00
float interval = 0, /* ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩 */
2017-10-21 19:09:31 +08:00
bool atOnce = false /* <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4> */
2017-10-17 21:22:25 +08:00
);
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1>״̬
bool isRunning() const;
2017-10-21 19:09:31 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
2017-10-17 21:22:25 +08:00
void start();
2017-10-21 19:09:31 +08:00
// ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1>
2017-10-17 21:22:25 +08:00
void stop();
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EString getName() const;
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD>
ENode * getParentNode() const;
2017-10-14 18:43:32 +08:00
2017-10-17 21:22:25 +08:00
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setName(
const EString &name
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>ִ<EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-10-17 21:22:25 +08:00
void setInterval(
2018-01-30 16:45:38 +08:00
float interval
2017-10-17 21:22:25 +08:00
);
2017-10-21 19:09:31 +08:00
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(
2018-01-30 16:45:38 +08:00
const TimerCallback & callback
2017-10-21 19:09:31 +08:00
);
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ظ<EFBFBD>ִ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>
void setRepeatTimes(
int nRepeatTimes
);
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ڰ󶨺<DAB0><F3B6A8BA><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>
virtual void setRunAtOnce(
bool bAtOnce
2017-10-21 19:09:31 +08:00
);
2017-10-17 21:22:25 +08:00
// <20>󶨶<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void bindWith(
EScene * pParentScene
);
// <20>󶨶<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
virtual void bindWith(
ENode * pParentNode
);
protected:
// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
2017-10-19 00:50:04 +08:00
virtual void _callOn();
2017-10-17 21:22:25 +08:00
2017-10-21 19:09:31 +08:00
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ﵽִ<EFB5BD><D6B4>״̬
bool _isReady();
2017-10-17 21:22:25 +08:00
protected:
EString m_sName;
bool m_bRunning;
2017-10-21 19:09:31 +08:00
bool m_bAtOnce;
2017-10-17 21:22:25 +08:00
int m_nRunTimes;
2017-10-21 19:09:31 +08:00
int m_nRepeatTimes;
2018-01-30 16:45:38 +08:00
float m_fInterval;
float m_fLast;
2017-10-17 21:22:25 +08:00
ENode * m_pParentNode;
2018-01-30 16:45:38 +08:00
TimerCallback m_Callback;
2017-10-14 18:43:32 +08:00
};
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class EData
{
public:
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD> int <20><><EFBFBD>͵<EFBFBD>ֵ
static void saveInt(
const EString & key,
int value
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD> float <20><><EFBFBD>͵<EFBFBD>ֵ
static void saveFloat(
const EString & key,
float value
);
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD>͵<EFBFBD>ֵ
static void saveString(
const EString & key,
const EString & value
);
2018-01-30 16:45:38 +08:00
// <20><>ȡ int <20><><EFBFBD>͵<EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> defaultValue <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static int getInt(
const EString & key,
2018-01-30 16:45:38 +08:00
int defaultValue
);
2018-01-30 16:45:38 +08:00
// <20><>ȡ float <20><><EFBFBD>͵<EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> defaultValue <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static float getFloat(
const EString & key,
2018-01-30 16:45:38 +08:00
float defaultValue
);
2018-01-30 16:45:38 +08:00
// <20><>ȡ <20>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD>͵<EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> defaultValue <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static EString getString(
const EString & key,
2018-01-30 16:45:38 +08:00
const EString & defaultValue
);
};
2018-01-30 16:45:38 +08:00
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class EFile
{
public:
2018-01-30 16:45:38 +08:00
// <20><>ȡϵͳ<CFB5><CDB3> AppData Local ·<><C2B7>
static EString getLocalAppDataPath();
2017-10-21 19:09:31 +08:00
2018-01-30 16:45:38 +08:00
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD>ļ<EFBFBD>Ŀ¼
static EString getTempPath();
2017-10-21 19:09:31 +08:00
2018-01-30 16:45:38 +08:00
// <20><>ȡĬ<C8A1>ϵı<CFB5><C4B1><EFBFBD>·<EFBFBD><C2B7>
static EString getDefaultSavePath();
2018-01-30 16:45:38 +08:00
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9>
static EString getFileExtension(
const EString & filePath
);
2018-01-30 16:45:38 +08:00
// <20>򿪱<EFBFBD><F2BFAAB1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
static EString getSaveFilePath(
const EString & title = L"<EFBFBD><EFBFBD><EFBFBD>", /* <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
const EString & defExt = L"" /* Ĭ<><C4AC><EFBFBD><EFBFBD>չ<EFBFBD><D5B9> */
);
};
2018-01-30 16:45:38 +08:00
// <20><><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class EMusic
{
public:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static UINT play(
const EString & musicFilePath, /* <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7> */
int repeatTimes = 1
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static UINT play(
const EString & musicResourceName, /* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
const EString & musicResourceType, /* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
const EString & musicExtension, /* ָ<><D6B8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>չ<EFBFBD><D5B9> */
int repeatTimes = 1
);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool pause(
UINT musicId
);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool pause(
const EString& musicName
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool resume(
UINT musicId
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool resume(
const EString& musicName
);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool stop(
UINT musicId
);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static bool stop(
const EString& musicName
);
// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static UINT preload(
const EString & musicFilePath
);
// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2018-01-30 16:45:38 +08:00
static UINT preload(
const EString & musicResourceName, /* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
const EString & musicResourceType, /* <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
const EString & musicExtension /* ָ<><D6B8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>չ<EFBFBD><D5B9> */
);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void pauseAllMusics();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void resumeAllMusics();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopAllMusics();
};
}