// 工具类的全局
var SoundManager = require("soundmanager");
window.Utils = {
_effect_once_playing: false,
_effect_once_last: null,
_effect_once_list: null,
keyfind: function (key, val, arr) {
for (var i = 0, n = arr.length; i < n; i++) {
if (arr[i][key] == val) {
return arr[i];
}
}
return null;
},
deepCopy: function (source) {
var sourceCopy = source instanceof Array ? [] : {};
for (var item in source) {
sourceCopy[item] = typeof source[item] === 'object' ? this.deepCopy(source[item]) : source[item];
}
return sourceCopy;
},
randomNum: function (min, max) {
if (max > min) {
return Math.round(Math.random() * (max - min)) + min;
} else {
return min;
}
},
randomStr: function (min, max, strRange) {
var n = this.randomNum(min, max);
strRange = strRange || '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var str = "";
var len = strRange.length;
for (var i = 0; i < n; i++) {
var pos = this.randomNum(1, len) - 1;
str += strRange.charAt(pos);
}
return str;
},
TI18N: function (str) {
return str;
},
// 获取单位配置
getUnitConfig: function (id) {
return gdata("unit_data", "data_unit1", id, false) || gdata("unit_data", "data_unit2", id, false) || gdata("unit_data", "data_unit3", id)
},
// 获取物品配置数据
getItemConfig: function (id) {
return gdata("item_data", "data_unit1", id, false) || gdata("item_data", "data_unit2", id, false) || gdata("item_data", "data_unit3", id, false) || gdata("item_data", "data_unit4", id, false) || gdata("item_data", "data_unit5", id, false)
},
// 拼key
getNorKey: function (...value) {
var key = ""
for (let index = 0; index < value.length; index++) {
const element = value[index];
if (key != "") {
key = key + "_";
}
key = key + element;
}
return key
},
// 关闭所有窗体
closeAllWindow: function () {
var temp_list = [];
for (let index = 0; index < BaseView.winMap.length; index++) {
const element = BaseView.winMap[index];
temp_list.push(element)
}
for (let index = 0; index < temp_list.length; index++) {
const element = temp_list[index];
if (element.close) {
element.close({ close_win: true })
}
}
BaseView.winMap = [];
},
// 进入战斗后,关闭所有的窗体
hideAllWindowForBattle: function () {
for (let index = 0; index < BaseView.winMap.length; index++) {
const element = BaseView.winMap[index];
if (element && !element.is_before_battle) {
element.enter_battle_status = element.getVisible();
element.is_before_battle = true;
if (element.enter_battle_status == true) {
element.setVisible(false);
}
}
}
},
// 退出战斗之后,打开进入战斗之前的界面
showAllWindowForBattle: function () {
var need_show_scene = true;
for (let index = 0; index < BaseView.winMap.length; index++) {
const element = BaseView.winMap[index];
if (element) {
if (element.enter_battle_status == null) {
element.enter_battle_status = true;
}
element.setVisible(element.enter_battle_status);
if (need_show_scene == true && element.win_type == WinType.Full && element.enter_battle_status == true) {
need_show_scene = false;
}
element.is_before_battle = false;
}
}
return need_show_scene;
},
isEmpty: function (obj) {
for (var objIndex in obj) {
return false;
}
return true;
},
//返回数组或对象的下一个索引值
//(实际只能用来判断是否为空,不能用来循环获取索引值)
next: function (arr) {
for (var k in arr) {
if (arr[k] != null) {
return true
}
}
return null
},
// 多元素小到大
tableLowerSorter: function (array) {
return function (a, b) {
if (a == null || b == null) {
return 1
}
for (let index = 0; index < array.length; index++) {
const element = array[index];
if (a[element] == null || b[element] == null) {
return 1
}
if (a[element] != b[element]) {
return a[element] - b[element]
}
}
return 1
}
},
// 多元素从大到小
tableUpperSorter: function (array) {
return function (a, b) {
if (a == null || b == null) {
return -1
}
for (let index = 0; index < array.length; index++) {
const element = array[index];
if (a[element] == null || b[element] == null) {
return -1
}
if (a[element] != b[element]) {
return b[element] - a[element]
}
}
return -1
}
},
/*按需排序
temp_tab 需要比较的表项中的多个key值,用于多参数的比较
temp_tab = {{"参数名字", true}, {"参数名字", false}...}
--true 表示 大到小 false 表示 小到大 */
tableCommonSorter: function (temp_tab) {
return function (a, b) {
if (a == null || b == null) {
return -1
}
for (var i = 0; i < temp_tab.length; i++) {
const element = temp_tab[i];
if (a[element[0]] == null || b[element[0]] == null) {
return -1
}
var is_sort = element[1] || false;
if (is_sort) {
if (a[element[0]] != b[element[0]]) {
return b[element[0]] - a[element[0]]
}
} else {
if (a[element[0]] != b[element[0]]) {
return a[element[0]] - b[element[0]]
}
}
}
return -1
}
},
// 创建一个需要require的类
createClass: function (window_name, any) {
if (window_name == null || window_name == "") {
cc.error("创建窗体失败,没有给具体名字 ========>>")
}
var WindowClass = require(window_name)
return new WindowClass(any);
},
/**
* 播放一次特效,临时创建一个节点数据,播放完特效之后移除
* @param {*} effect_name 特效资源名
* @param {*} x 坐标X
* @param {*} y 坐标Y
* @param {*} parent 父节点
* @param {*} finish_call 播放完的回调
* @param {*} action_name 播放动作,默认为action
* @param {*} scale 缩放比,理论上不需要设置
*/
playEffectOnce: function (effect_name, x, y, parent, finish_call, action_name, scale) {
if (parent == null) return;
action_name = action_name || PlayerAction.action
scale = scale || 1
if (this._effect_once_playing == true) {
if (this.effect_object && this.effect_object.node && this.effect_object.node.parent) {
if (this._effect_once_last != effect_name) {
if (this._effect_once_list == null) {
this._effect_once_list = []
}
this._effect_once_list.push({ effect_name: effect_name, x: x, y: y, parent: parent, finish_call: finish_call, action_name: action_name, scale: scale })
}
} else {
if (this.effect_object && this.effect_object.node) {
this.effect_object.node.destroy();
LoaderManager.getInstance().releaseRes(this.effect_object.res_path);
}
this.effect_object = null;
this._effect_once_last = null;
this._effect_once_playing = false;
if (this._effect_once_list == null) {
this._effect_once_list = []
}
this._effect_once_list.push({ effect_name: effect_name, x: x, y: y, parent: parent, finish_call: finish_call, action_name: action_name, scale: scale })
if (this._effect_once_list && this._effect_once_list.length > 0) {
var object = this._effect_once_list.shift()
if (object) {
this.playEffectOnce(object.effect_name, object.x, object.y, object.parent, object.finish_call, object.action_name, object.scale)
}
}
}
} else {
this._effect_once_playing = true
this._effect_once_last = effect_name
var remove_fun = function () {
if (finish_call) {
finish_call()
}
this._effect_once_playing = false
this._effect_once_last = null
if (this.effect_object) { //移除掉缓存的对象
if (this.effect_object.node) {
this.effect_object.node.destroy();
}
LoaderManager.getInstance().releaseRes(this.effect_object.res_path);
this.effect_object = null;
}
if (this._effect_once_list && this._effect_once_list.length > 0) {
var object = this._effect_once_list.shift()
if (object) {
this.playEffectOnce(object.effect_name, object.x, object.y, object.parent, object.finish_call, object.action_name, object.scale)
}
}
}.bind(this)
// 节点对象
this.effect_object = { node: null, effect: null, res_path: null };
// 创建临时的节点
var node = new cc.Node("once_effect");
node.setAnchorPoint(0.5, 0.5);
if (scale != 1) {
node.scale = scale;
}
node.setPosition(x, y);
parent.addChild(node);
var effect_spine = node.addComponent(sp.Skeleton);
var res_path = PathTool.getSpinePath(effect_name, "action");
// 储存数据
this.effect_object.node = node;
this.effect_object.effect = effect_spine;
this.effect_object.res_path = res_path;
// 监听事件
effect_spine.setCompleteListener((function (trackEntry, loopCount) {
var animationName = trackEntry.animation ? trackEntry.animation.name : "";
if (animationName == action_name) {
remove_fun();
}
}).bind(this))
// 加载资源
LoaderManager.getInstance().loadRes(res_path, (function (res_object) {
effect_spine.skeletonData = res_object
effect_spine.setAnimation(0, action_name, false);
}).bind(this))
}
},
//计算字符串长度,汉字算两个长度
//(如果汉字算一个长度,直接string.length可以获得)
getByteLen: function (val) {
var len = 0;
for (var i = 0; i < val.length; i++) {
var a = val.charAt(i);
if (a.match(/[^\x00-\xff]/ig) != null) {
len += 2;
}
else {
len += 1;
}
}
return len;
},
//按钮置灰,并关闭事件,btn:cc.Button, bool:true是变灰
setGreyButton: function (btn, bool) {
if (bool == null)
bool = true
if (btn) {
btn.interactable = !bool;
btn.enableAutoGrayEffect = bool;
}
},
getTimeInterval: function (time_stamp) {
if (!(time_stamp >= 0)) return;
var srver_time = gcore.SmartSocket.getTime();
return time_stamp - srver_time;
},
// 将秒转为标准时间, 参数:秒数, 是否加0
changeIntevalToDate: function (secondNum, n_addo) {
if (!(secondNum >= 0)) return;
var daySecond = 24 * 60 * 60;
var hourSecond = 60 * 60;
var day = Math.floor(secondNum / daySecond);
var remainSecondM = secondNum % daySecond;
var hour = Math.floor(remainSecondM / hourSecond);
var remainSecondS = remainSecondM % hourSecond;
var minute = Math.floor(remainSecondS / 60);
var second = Math.ceil(remainSecondS % 60);
if (n_addo) {
return { D: day, H: hour, M: minute, S: second };
}
var add0 = function (m) {
return m < 10 ? ('0' + m) : m;
};
return { D: day, H: add0(hour), M: add0(minute), S: add0(second) };
},
//-----------------------moneytool---start-------------//
//转换金钱格式
getMoneyString: function (value, is_symbol) {
if (is_symbol == null)
is_symbol = true;
if (value == null)
return 0
if (value < 100000) {
if (is_symbol)
return this.moneyFormat(value);
else
return value;
} else if (value < 100000000) {
value = Math.floor(value * 0.0001);
if (is_symbol)
return cc.js.formatStr(Utils.TI18N("%s万"), this.moneyFormat(value));
else
return cc.js.formatStr(Utils.TI18N("%s万"), value);
} else {
value = Math.floor(value * 0.00000001);
if (is_symbol)
return cc.js.formatStr(Utils.TI18N("%s亿"), this.moneyFormat(value));
else
return cc.js.formatStr(Utils.TI18N("%s亿"), value);
}
},
//价钱里面加上逗号
moneyFormat: function (value) {
var sign = "";
if (value < 0) {
sign = "-";
value = value * (-1);
}
if (value < 1000)
return String(value);
var arr = this.moneySplit(String(value), "");
var n = arr.length;
var i = n % 3;
if (i == 0) {
i = 4;
}
while (i < n) {
arr.splice(i, 0, ",")
i = i + 4;
n = n + 1;
}
return sign + this.Join(arr, "");
},
moneySplit: function (source_str, split_str) {
if (split_str.length == 0) {
var arr = [];
for (var i = 0; i < source_str.length; i++) {
arr.push(source_str.substring(i, i + 1));
}
return arr
} else {
return this.Split(source_str, split_str)
}
},
//-----------------------moneytool---end-------------//
// 以某个分隔符为标准,分割字符串
// @param split_string 需要分割的字符串
// @param splitter 分隔符
// @return 用分隔符分隔好的table
Split: function (split_string, splitter) {
var split_result = {};
var search_pos_begin = 0;
while (true) {
var find_pos_begin = split_string.indexOf(splitter, search_pos_begin);
var find_pos_end = splitter.length + find_pos_begin;
if (find_pos_begin == -1) break
split_result[Object.keys(split_result).length + 1] = split_string.substring(search_pos_begin, find_pos_begin - 1);
search_pos_begin = find_pos_end + 1;
}
if (search_pos_begin <= split_string.length) {
split_result[Object.keys(split_result).length + 1] = split_string.substr(search_pos_begin);
}
return split_result
},
// 以某个连接符为标准,返回一个table所有字段连接结果
// @param join_table 连接table:array
// @param joiner 连接符
// @param return 用连接符连接后的字符串
Join: function (join_table, joiner) {
if (joiner == null) {
return join_table.join("");
} else {
return join_table.join(joiner);
}
},
//区分服务器名称
transformNameByServ: function (name, srv_id) {
var tmpName = name;
if (srv_id == null || name == null)
return tmpName
if (name) {
if (tmpName.indexOf("【") != -1) {
return tmpName
}
}
if (!require("role_controller").getInstance().isTheSameSvr(srv_id)) {
var vo = require("role_controller").getInstance().getRoleVo();
if (vo) {
var listOr = this.Split(srv_id, "_");
var listMe = this.Split(vo.srv_id, "_");
if (listOr[2] && listMe[1] && listOr[1] != listMe[1]) {
tmpName = cc.js.formatStr(Utils.TI18N("[异域]%s"), tmpName);
} else if (Object.keys(listOr).length > 1) {
tmpName = cc.js.formatStr(Utils.TI18N("[S%s]%s"), listOr[Object.keys(listOr).length], tmpName);
}
if (srv_id == "robot_1")
tmpName = name;
}
}
return tmpName
},
// 配置格式装换
splitDataStr: function (content) {
var result = content;
while (result.indexOf("{") != -1) {
var i = result.indexOf("{");
var n = result.indexOf("}");
var temp = result.substring(i, n + 1);
var target = temp.substring(1, temp.length - 1);
var list = this.Split(target, ":")
var str = cc.js.formatStr("%s", gdata("color_data", "data_color3", parseInt(list[1])), list[2])
result = result.replace(temp, str)
}
var RoleController = require("role_controller");
var role_vo = RoleController.getInstance().getRoleVo();
if (role_vo) {
result = result.replace(/~n/g, role_vo.name)
}
return result;
},
//desc:创建一个普通文本
createLabel: function (font_size, text_color, line_color, x, y, text_content, parent_wnd, line_num, anchorpoint, font) {
font_size = font_size || 20;
var node = new cc.Node();
node.setAnchorPoint(anchorpoint || cc.v2(0, 0));
var label = node.addComponent(cc.Label);
label.fontSize = font_size;
label.horizontalAlign = cc.macro.TextAlignment.CENTER;
label.verticalAlign = cc.macro.TextAlignment.CENTER;
if (text_color == null) text_color = new cc.Color(0xff, 0xff, 0xff, 0xff);
node.color = text_color;
if (line_color) {
var line = node.addComponent(cc.LabelOutline);
line.color = line_color;
line.width = line_num || 1;
}
x = x || 0;
y = y || 0;
node.setPosition(x, y);
if (text_content != null)
label.string = text_content;
if (parent_wnd)
parent_wnd.addChild(node);
return label
},
//desc:创建富文本
createRichLabel: function (fontsize, textcolor, ap, pos, lineHeight, max_width, parent_wnd, align) {
var node = new cc.Node();
node.setAnchorPoint(ap || cc.v2(0, 0));
node.setPosition(pos || cc.v2(0, 0));
var label = node.addComponent(cc.RichText);
if (textcolor == null) textcolor = new cc.Color(0xff, 0xff, 0xff, 0xff);
label.fontSize = fontsize;
label.horizontalAlign = cc.macro.TextAlignment.CENTER;
label.verticalAlign = cc.macro.TextAlignment.CENTER;
if (align == "left") {
label.horizontalAlign = cc.macro.TextAlignment.LEFT;
} else if (align == "right") {
label.horizontalAlign = cc.macro.TextAlignment.RIGHT;
}
label.lineHeight = lineHeight || (fontsize + 4);
node.color = textcolor;
label.maxWidth = max_width || 300;
if (parent_wnd)
parent_wnd.addChild(node);
return label
},
//desc:创建image
createImage: function (parent, res, x, y, anchorPoint, usePlist, zorder, is_Scale9) {
var node = new cc.Node();
var image = node.addComponent(cc.Sprite);
if (res != null) {
LoaderManager.getInstance().loadRes(res, (function (image, res_object) {
image.spriteFrame = res_object
}).bind(this, image))
}
if (anchorPoint == null) {
node.setAnchorPoint(cc.v2(0.5, 0.5));
} else {
node.setAnchorPoint(anchorPoint);
}
if (is_Scale9 == true) {
image.type = cc.Sprite.Type.SLICED;
image.sizeMode = cc.Sprite.SizeMode.CUSTOM;
}
if (x != null && y != null) {
node.setPosition(cc.v2(x, y));
}
if (parent) {
parent.addChild(node, zorder || 0);
}
return image
},
createEffectSpine: function (effectName, pos, arPos, loop, action, call_back, pixelformal, not_play_action) {
let node = new cc.Node();
node.setPosition(pos);
node.setAnchorPoint(arPos);
let effect = node.addComponent(sp.Skeleton);
effectName = effectName || "E88888";
if (loop == null) {
loop = true;
}
action = action || PlayerAction.action;
var res = cc.js.formatStr("spine/%s/action.atlas", effectName)
LoaderManager.getInstance().loadRes(res, function (res_object) {
effect.skeletonData = res_object;
if (not_play_action == null) {
effect.setAnimation(0, action, loop)
} else {
effect.setAnimation(1, action, loop)
}
if (call_back) {
call_back();
}
}.bind(this))
return effect
},
// 给节点添加红点
// [[
// node:红点父节点
// status:是否显示
// offset_x:红点x轴偏移
// offset_y:红点y轴偏移
// zorder:红点层级
// ]]
addRedPointToNodeByStatus: function (node, status, offset_x, offset_y, zorder, red_type) {
if (node) {
if (status == true) {
if (!node.red_point) {
offset_x = offset_x || 0;
offset_y = offset_y || 0;
zorder = zorder || 10;
var red_res = PathTool.getUIIconPath("mainui", "mainui_1009");
if (red_type && red_type == 2) {
red_res = PathTool.getCommonIcomPath("common_1014");
}
var node_size = node.getContentSize();
var pos_x = node_size.width / 2 + offset_x
var pos_y = node_size.height / 2 + offset_y
var red_point = this.createImage(node, null, pos_x, pos_y, cc.v2(1, 1), null, zorder);
// 加载资源
LoaderManager.getInstance().loadRes(red_res, (function (red_point, res_object) {
red_point.spriteFrame = res_object
}).bind(this, red_point))
node.red_point = red_point
}
node.red_point.node.active = true;
} else if (node.red_point) {
node.red_point.node.active = false;
}
}
},
//获取数组或对象具有真实子类的长度
getArrTrueLen: function (obj) {
var index = 0;
for (var i in obj) {
var v = obj[i];
if (v != null) {
index = index + 1;
}
}
return index
},
//获取数组或对象的长度
getArrLen: function (obj) {
if (obj instanceof Array) {
return obj.length
} else {
return Object.keys(obj).length
}
},
// 延迟动作
delayRun: function (obj, delay_time, fun) {
if (!fun) return;
if (obj == null) {
fun();
}
var delay_fun = cc.delayTime(delay_time);
var call_fun = cc.callFunc(function () {
if (obj != null) {
fun();
}
});
obj.runAction(cc.sequence(delay_fun, call_fun));
},
/**
* 统一处理点击事件,为了后面统一音效做处理
* @param {*} object 节点对象
* @param {*} clickback 点击回调
* @param {*} soundType 声音类型 1:普通音效 2:关闭音效 3....
*/
onTouchEnd: function (object, clickback, soundType) {
if (!object) {
if (clickback) {
clickback();
}
return;
}
object.on(cc.Node.EventType.TOUCH_END, function (event) {
Utils.playButtonSound(soundType);
if (clickback) {
clickback()
}
});
},
/**
* 播放音效接口
* @param {*} type 1:普通按钮音效 2:关闭按钮音效 3:标签页音效 4..自定义音效id
*/
playButtonSound: function (type) {
if (!type) return;
var res_id = null;
if (type == ButtonSound.Normal) {
res_id = "c_button1";
} else if (type == ButtonSound.Close) {
res_id = "c_close";
} else if (type == ButtonSound.Tab) {
res_id = "c_002";
} else {
res_id = type;
}
SoundManager.getInstance().playEffect(AUDIO_TYPE.COMMON, res_id);
},
playEffectSound: function (type, res_id) {
SoundManager.getInstance().playEffectOnce(type, res_id);
},
playMusic: function (type, res_id, loop) {
SoundManager.getInstance().playMusic(type, res_id, loop);
},
//获取随机名字
getRandomSaveName: function () {
var randomName = function (str) {
var result = str;
var a = String.fromCharCode(Math.random(65, 90));
var b = String.fromCharCode(Math.random(97, 122));
var c = String.fromCharCode(Math.random(48, 57));
if (Math.random(3) % 3 == 0) {
result = result + a;
} else if (Math.random(3) % 2 == 0) {
result = result + b;
} else {
result = result + c;
}
if (this.getByteLen(result) < 12) {
result = randomName(result);
}
return result
}.bind(this)
var usr = randomName("");
return "sy" + usr
},
/*==============================--
--desc:获取服务器索引
--time:2018-07-22 10:54:30
--@str:
--@return [index, is_var]
--index == 0 表示 机器 或者 异域(就是无法知道是那个服的)
--is_var : 表示是否本服
--==============================--*/
getServerIndex: function (srv_id) {
if (srv_id == null) return [""]
if (srv_id == "robot_1" || srv_id == "robot") { //代表机器人
return [0]
}
let RoleController = require("role_controller");
let vo = RoleController.getInstance().getRoleVo();
if (vo) {
let listOr = srv_id.split("_");
let listMe = vo.srv_id.split("_");
if (listOr[1] && listMe[0] && listOr[0] != listMe[0]) {
return [0]
} else if (listOr.length > 1) {
if (srv_id == vo.srv_id) {
return [listOr[listOr.length], true]
} else {
return [listOr[listOr.length]]
}
}
}
return [0]
},
// 通用显示单行道具列表
// @ item_scrollview scrollview 对象
// @ item_list BackPackItem的对象列表 (注意: 需要在那边手动移除)
// @ data_list 数据列表 结构{{道具id, 数量},...} 就是策划填表的奖励道具结构
// @setting
// @content
// @isActionCallBack 是否调用ActionCallBack
// @setting.scale 缩小参数 默认 1
// @setting.start_x 两边对应道具的间隔
// @setting.space_x 道具之间的间隔
// @setting.max_count item_scrollview最大能显示item数量..用于判断是否可以左右滑动 不填则可以移动
// @setting.is_center 是否不满就居中 max_count必须有值
// @setting.show_effect_id =特效id 显示对应特效 默认无
// @setting.is_tip 是否弹通用tips 默认nil
commonShowSingleRowItemList: function (item_scrollview, item_list, data_list, setting, content, isActionCallBack) {
if (!item_scrollview || !data_list) {
return;
}
var item_list = item_list;
if (item_list) {
// 隐藏物品
for (var i in item_list) {
item_list[i].setVisible(false);
}
}
if (item_list == null) {
item_list = [];
}
if (data_list.length == 0) {
return;
}
// 道具列表
var setting = setting || {};
var scale = setting.scale || 1;
var start_x = setting.start_x || 5;
var space_x = setting.space_x || 5;
var max_count = setting.max_count;
var item_width = setting.item_width || 120;
var lock = setting.lock || false;
// 点击返回回调函数
var is_tip = setting.is_tip;
var callback = setting.callback || false;
var item_count = data_list.length;
item_width = item_width * scale;
var total_width = start_x * 2 + item_width * item_count + space_x * (item_count - 1);
var item_scrollview_size = content.getContentSize();
var max_width = Math.max(item_scrollview_size.width, total_width);
content.setContentSize(cc.size(max_width, item_scrollview_size.height));
if (max_count && item_count <= max_count) {
item_scrollview.off(cc.Node.EventType.TOUCH_START, item_scrollview._onTouchBegan, item_scrollview, true);
item_scrollview.off(cc.Node.EventType.TOUCH_MOVE, item_scrollview._onTouchMoved, item_scrollview, true);
item_scrollview.off(cc.Node.EventType.TOUCH_END, item_scrollview._onTouchEnded, item_scrollview, true);
item_scrollview.off(cc.Node.EventType.TOUCH_CANCEL, item_scrollview._onTouchCancelled, item_scrollview, true);
if (setting.is_center) {
start_x = (item_scrollview_size.width - total_width) * 0.5;
if (start_x < 0) {
start_x = 0;
}
}
} else {
// item_scrollview.on(cc.Node.EventType.TOUCH_START, item_scrollview._onTouchBegan, item_scrollview, true);
// item_scrollview.on(cc.Node.EventType.TOUCH_MOVE, item_scrollview._onTouchMoved, item_scrollview, true);
// item_scrollview.on(cc.Node.EventType.TOUCH_END, item_scrollview._onTouchEnded, item_scrollview, true);
// item_scrollview.on(cc.Node.EventType.TOUCH_CANCEL, item_scrollview._onTouchCancelled, item_scrollview, true);
}
content.stopAllActions();
var _setItemData = function (item, v, i, is_tip) {
item.setVisible(true);
var _x = start_x + item_width / 2 + i * (item_width + space_x);
item.setPosition(_x, item_scrollview_size.height * 0.5);
item.setData({ bid: v[0], num: v[1] });
item.showOrderWarLock(lock);
if (callback) {
if (isActionCallBack) {
item.addActionCallBack(function () {
callback();
}.bind(this));
} else {
item.addCallBack(function () {
callback();
}.bind(this));
}
}
if (v[2]) {
item.setExtendLabel(v[2], null, 24);
}
item.setDefaultTip(is_tip);
if (setting.show_effect_id) {
item.showItemEffect(true, setting.show_effect_id, PlayerAction.action_1, true, 1.1)
} else {
item.showItemEffect(false)
}
}.bind(this);
var item = null;
var size = item_list.length;
for (var i in data_list) {
item = item_list[i];
if (item) {
_setItemData(item, data_list[i], i, is_tip);
} else {
var dealey = i - size;
if (dealey <= 0) {
dealey = 1;
}
Utils.delayRun(content, dealey / 60, function (i, v, item, is_tip) {
if (!item_list[i]) {
item = ItemsPool.getInstance().getItem("backpack_item");
item.initConfig(true, scale);
// item.setAnchorPoint(0, 0.5)
item.setParent(content);
item.show();
item_list[i] = item;
_setItemData(item, v, i, is_tip)
}
}.bind(this, i, data_list[i], item, is_tip));
}
}
return item_list;
},
/*--通用显示空白
--@parent 父类
--@bool 显示状态 true 显示 , false 不显示
--@setting 配置信息
--setting.text 文本内容 默认: 暂无数据
--setting.pos icon显示位置 默认 父类的中心点
--setting.scale icon缩放大小 默认 1
--setting.offset_y 因图标缩放导致文本的位置需要调整 偏移量调整 默认是 -10
--setting.font_size 文本大小 默认 26
--setting.label_color 文本颜色 默认 Config.ColorData.data_color16[175]*/
commonShowEmptyIcon: function (parent, bool, setting) {
if (!parent) return;
if (bool) {
var setting = setting || {}
var text = setting.text || Utils.TI18N("暂无数据");
if (!parent.empty_con) {
var parent_size = parent.getContentSize();
var pos = setting.pos || cc.v2(parent_size.width * 0.5, parent_size.width * 0.5, parent_size.height * 0.5 + 10);
var scale = setting.scale || 1;
var offset_y = setting.offset_y || -110;
var label_color = setting.label_color || new cc.Color().fromHEX(Config.color_data.data_color16[175]);
var font_size = setting.font_size || 26;
var size = cc.size(200, 200);
parent.empty_con = new cc.Node();
parent.empty_con.setContentSize(cc.size(120, 120))
parent.empty_con.setAnchorPoint(0.5, 0.5);
parent.empty_con.setPosition(pos.x, pos.y);
parent.addChild(parent.empty_con, 10);
var bg = Utils.createImage(parent.empty_con, PathTool.getUIIconPath("bigbg", "bigbg_3"), 0, 0, cc.v2(0.5, 0.5), false)
bg.node.scale = scale;
parent.empty_label = Utils.createLabel(font_size, label_color, null, 0, offset_y, '', parent.empty_con, 0, cc.v2(0.5, 0.5));
} else {
parent.empty_con.action = true;
}
parent.empty_label.string = text;
} else {
if (parent.empty_con) {
parent.empty_con.action = false;
}
}
},
getType: function (obj) {
var str = Object.prototype.toString.call(obj);
var map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object'
}
// if(obj instanceof Element){ //判断是否是dom元素,如div等
// return "element";
// }
return map[str];
},
deepCopy1: function (p) {
var obj;
var str = this.getType(p);
if (str == 'array') {
obj = [];
for (var i = 0; i < p.length; i++) {
obj.push(this.deepCopy1(p[i])); //回调自己
}
} else if (str == 'object') {
obj = {};
for (var i in p) {
obj[i] = this.deepCopy1(p[i]);
}
} else {
return p;
}
return obj;
},
//通用设置倒计时 时间格式默认 TimeTool.GetTimeForFunction 此方法返回格式(需要其他的 在callback 自行处理)
//注意: 关闭panel的时候记得 doStopAllActions(label) 否则会报错
//@label 倒计时对象 label
//@less_time 剩余时间
//@setting 配置信息
//setting.label_type 文本类型(参考 CommonAlert.type.rich) ..注意:需要增加标题 和 时间颜色 才设置这个(否则没意义)
//setitng.time_title 时间标题 eg: 剩余时间:
//setitng.time_color 时间颜色 格式: #ffffff 富文本下 需要变的颜色..(在is_rich_label == true下 必填)
//setting.callback 回调函数 如果_setTimeFormatString 不能满足需求 自己用回调函数处理
commonCountDownTime: function (label, less_time, setting) {
if (!label) return
var setting = setting || {};
var callback = setting.callback; //回调函数
var label_type = setting.label_type;//文本类型
var time_title = null;
var time_color = null;
var TimeTool = require("timetool");
if (label_type && label_type == "rich") {
time_title = setting.time_title || "";
time_color = setting.time_color;
}
let _setTimeFormatString = function (time) {
if (!label) return
if (callback) {
callback(time);
return
}
if (label_type && label_type == "rich" && time_color) {
if (time > 0) {
label.string = cc.js.formatStr("%s %s", time_title, time_color, TimeTool.getTimeForFunction(time))
} else {
label.node.stopAllActions();
label.string = cc.js.formatStr("%s 00:00:00", time_title, time_color)
}
} else {
if (time > 0) {
label.string = TimeTool.getTimeForFunction(time);
} else {
label.node.stopAllActions();
label.string = "00:00:00";
}
}
}
label.node.stopAllActions();
if (less_time > 0) {
_setTimeFormatString(less_time);
label.node.runAction(cc.repeatForever(cc.sequence(cc.delayTime(1), cc.callFunc(function () {
less_time = less_time - 1;
_setTimeFormatString(less_time);
}.bind(this)))))
} else {
_setTimeFormatString(less_time);
}
},
//设置精灵变灰,递归下去
setChildUnEnabled: function (node, status) {
var sp_status
if (status) {
sp_status = cc.Sprite.State.GRAY;
} else {
sp_status = cc.Sprite.State.NORMAL;
}
let sprites = node.getComponentsInChildren(cc.Sprite)
for (let i = 0; i < sprites.length; ++i) {
sprites[i].setState(sp_status)
}
},
//--获取属性对应信息
// @attr_key 策划定义属性key 参考表attr_data.xml
// @attr_val 对应值..如果是百分比 传过来的是千分比
//return 属性icon路径, 属性名字, 属性值
commonGetAttrInfoByKeyValue: function (attr_key, attr_val) {
if (!attr_key || !attr_val) return
let attr_name = Config.attr_data.data_key_to_name[attr_key];
if (attr_name) {
let icon = PathTool.getAttrIconByStr(attr_key);
var PartnerCalculate = require("partner_calculate");
let is_per = PartnerCalculate.isShowPerByStr(attr_key);
if (is_per == true) {
attr_val = (attr_val / 10) + "%";
}
let res = PathTool.getUIIconPath("common", icon);
return { res: res, attr_name: attr_name, attr_val: attr_val, icon: icon }
}
},
};