123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- //
- // 常用工具方法
- //
- #ifndef RURedUtil_h
- #define RURedUtil_h
- #include "cocos2d.h"
- #include "RUDefine.h"
- #include "Redream.h"
- #include <google/protobuf/message_lite.h>
- using namespace std;
- USING_NS_CC;
- NS_RU_BEGIN
- class MapRhombusGrid;
- class QCoreLayer;
- // MARK: 随机方法
- // 随机一个数
- int randomInt(int start, int end);
- // 随机数组的迭代器
- template <class T>
- typename vector<T>::iterator randomIter(vector<T> &array){
- int index = rand() % array.size();
- return array.begin() + index;
- }
- // 随机一个数组value
- template <class T>
- T randomObj(vector<T> &array){
- int index = rand() % array.size();
- return *(array.begin() + index);
- }
- // 根据权重随机数组的index
- int randomIndexByRatio(const vector<int> &array);
- // 根据权重随机一个数组value
- template <class T>
- T randomObjByRatio(const vector<T> &array,const vector<int> &ratio){
- int idx = randomIndexByRatio(ratio);
- return array[idx];
- }
- // 数组是否包含该对象 T要实现 == 操作符
- template <class T>
- bool isContain(const T* array, int len, T check){
- for (int i = 0; i < len ; i++) {
- if (array[i] == check) {
- return true;
- }
- }
- return false;
- }
- // MARK: 经常要用到位置操作方法
- Vec2 up(const Vec2 &logicPos);
- Vec2 down(const Vec2 &logicPos);
- Vec2 left(const Vec2 &logicPos);
- Vec2 right(const Vec2 &logicPos);
- Vec2 upLeft(const Vec2 &logicPos);
- Vec2 upRight(const Vec2 &logicPos);
- Vec2 downLeft(const Vec2 &logicPos);
- Vec2 downRight(const Vec2 &logicPos);
- // MARK: UI相关的常用方法
- // 解锁屏
- void LockScreenForSec(float sec);
- void LockScreenByTag(int tag);
- void unLockScreenByTag(int tag);
- // 分割字符串
- void splitString(const std::string& s, std::vector<std::string>& v, const std::string& c);
- typedef struct _ProgressArgs {
- Vec2 midPoint = Vec2(0,0); //变化起始点
- Vec2 barChangeRate = Vec2(1,0);
- bool reverse = false;//慢慢显示进度还是慢慢消失进度
- ProgressTimer::Type progressType = ProgressTimer::Type::BAR;//圆形还是条形
- } ProgressArgs;
- // 根据一个精灵创建一个进度条
- ProgressTimer* createCCProgressTimeFromCCSprite(Sprite* sprite,const ProgressArgs& args);
- enum class kGTLevelType {
- DEFAULT, //普通关卡编号(1~无穷大)
- MINIGAME, //miniGame关卡 [1001-2000] 最多99个minigame
- BI_ROOM, //家装房间 [9001-9100] 最多100个房间
- BI_TASK, //家装任务 [10001-13000] 做多家装3000个任务
- };
- // 获取上传gt的关卡编号
- int getGTLevel(kGTLevelType type, int baseLevel);
- bool protobufLoad(const string& fileName, google::protobuf::MessageLite* data);
- void protobufSave(const string& fileName, google::protobuf::MessageLite* data);
- /// 计算多边形所占菱形网格
- /// @param ori 原点
- /// @param poly 多边形坐标
- /// @param rhombusGrid 导航网格
- /// @param bStrictMode 严格模式意味着只要多边形和网格交叉就算;否则看网格的中心点是否在多边形内
- vector<Vec2> getRhombusGridFromPolygon(const Vec2& ori, vector<Vec2> poly, MapRhombusGrid *rhombusGrid, bool bStrictMode = false);
- // 获取当前的天数
- int getLocalToday();
- // 贝塞尔曲线的控制参数
- typedef struct{
- float bezierCur; // 中段的曲率
- float bezierDec; // 下调程度
- float basisPointRatio; // 控制点1基准点(基于哪个点的中垂线进行偏移)
- }BezierParams;
- /// 计算贝塞尔曲线运动的参数
- /// @param startPoint 开始位置
- /// @param endPoint 结束位置
- /// @param stencil 模板类型
- /// @param config 曲线的控制参数
- cocos2d::ccBezierConfig calBezierConfig(const Vec2& startPoint,const Vec2& endPoint, string stencil, BezierParams* config);
- /// 遍历粒子Particle,执行指定的操作
- void iterateParticles(Node* pNode, std::function<void(cocos2d::ParticleSystem*)> cb);
- /// 对每个节点施加操作
- void iterateNode(Node* pNode, std::function<void(Node*)> cb);
- /// 改变node的父节点
- void changeNodeParent(Node* node, Node* parent);
- /// 点是否在多边形内部或者边界线上面(不能处理多边形的边界有交叉的情况)
- bool isPointInPolygon(const Vec2& point, const std::vector<Vec2>& polygon);
- /// 将字符串解析为一个float list
- /// @param v 字符串
- std::list<float> parseAsFloatList(const string& v);
- /// 将字符串解析为一个string list
- /// @param v 字符串
- std::vector<string> parseAsStringList(const string& v, const string& sep = ",");
- /// 将字符串解析为一个int list
- /// @param v 字符串
- std::vector<int> parseAsIntList(const string& v);
- /// 将字符串解析为一个pair<Value,Value> 的list
- /// @param v 字符串
- std::vector<std::pair<cocos2d::Value,cocos2d::Value>> parseAsPairList(const string& v, const string& sep = ",");
- /// 将字符串解析为一个pair<string,string> list
- /// @param v 字符串
- std::vector<std::pair<std::string,std::string>> parseAsPairStringList(const string& v);
- /// 在一个标签中显示倒计时,
- /// @param showHours 是否显示小时位
- void showTimingInLable(cocos2d::Label* label, std::function<int()> getCooldown, bool showHours = true, bool hourAlways = true);
- /// 解析一个时间字符串,比如 1d, 10h, 3m,2d12h30m30 等,不带单位的话认为是秒,返回单位为秒
- int parseStringAsTime(const std::string& str);
- /// 读取适配后的资源
- /// @param resName 基础的资源名称
- /// @param bUseAdapt 是否使用适配
- QCoreLayer* readLayer(const char* resName, bool bUseAdapt);
- /// 读取适配后的资源
- /// @param resName 基础的资源名称
- /// @param bUseAdapt 是否使用适配
- /// @param reader 读取器
- cocos2d::Node* readNodeWithAdapt(redream::REDReader * reader, const char* resName, bool bUseAdapt);
- // Json解析
- Json getConfigWithName(const std::string& jsonName);
- // 将某个节点拉伸以适配屏幕
- void smartScaleHeight(Node* layer, Size designSize);
- NS_RU_END
- #endif /* RURedUtil_h */
|