var LoaderManager = require("loadermanager");
|
window.ViewClass = cc.Class({
|
extends: BaseClass,
|
|
ctor: function() {
|
this.active_status = true;
|
this.base_view_event_list = {};
|
this.res_list = {};
|
this.update_timers = {};
|
this.parent = null;
|
this.ticks = {};
|
this.rleasePrefab = true;
|
},
|
|
/**
|
* 递归获取子节点
|
* @Author Zhx
|
* @DateTime 2017-12-06
|
* @param {[type]} parent 父节点
|
* @param {[type]} uiName 子节点名称
|
* @return {[type]} [description]
|
*/
|
seekChild: function(parent, uiName, component) {
|
if (!parent || (!(typeof parent == "string") && !(parent instanceof cc.Node))) return;
|
|
if (typeof parent == "string") {
|
if (uiName && cc.js.isChildClassOf(uiName, cc.Component))
|
component = uiName;
|
uiName = parent;
|
parent = this.root_wnd;
|
}
|
|
if (uiName && (cc.js.isChildClassOf(uiName, cc.Component)))
|
component = uiName;
|
if (parent.name === uiName)
|
return parent;
|
|
var childrens = parent.getChildren();
|
for (var index in childrens) {
|
var resultNode = this.seekChild(childrens[index], uiName, component);
|
if (resultNode) {
|
if (component) return resultNode.getComponent(component);
|
return resultNode;
|
}
|
}
|
},
|
|
// 加载资源
|
loadRes:function(path, callback){
|
if(this.res_list[path]){
|
if(this.root_wnd && this.root_wnd.isValid){
|
callback(this.res_list[path])
|
}else{
|
console.log("节点已销毁",this.prefabPath)
|
}
|
return
|
} else {
|
LoaderManager.getInstance().loadRes(path,function(res_object){
|
if(!this.isCache && (this.is_close || this.delete)){
|
return;
|
}
|
if (!(res_object instanceof cc.Node))
|
this.res_list[path] = res_object
|
|
if(this.root_wnd && this.root_wnd.isValid){
|
callback(res_object)
|
}else{
|
console.log("节点已销毁",this.prefabPath)
|
}
|
}.bind(this))
|
}
|
},
|
|
setParent: function(parent) {
|
this.parent = parent;
|
},
|
|
deleteMe: function() {
|
// this.iss
|
cc.log("deleteMe",this.prefabPath)
|
this.removeGlobalEvent();
|
if(this.root_wnd && !this.isCache){
|
// this.root_wnd.destroyAllChildren();
|
this.root_wnd.destroy();
|
this.root_wnd = null;
|
}
|
|
if (this.mainloop_timer)
|
gcore.Timer.del(this.mainloop_timer);
|
|
for (var timer_i in this.update_timers){
|
if (this.update_timers[timer_i])
|
gcore.Timer.del(this.update_timers[timer_i]["timer"]);
|
this.update_timers[timer_i] = null;
|
}
|
|
// LoaderManager.getInstance().deleteRes(this.prefabPath);
|
for(var key in this.res_list){
|
LoaderManager.getInstance().releaseRes(key)
|
}
|
|
if (!this.isCache) {
|
if (this.rleasePrefab)
|
LoaderManager.getInstance().releasePrefab(this.prefabPath);
|
}
|
},
|
|
/**
|
* 添加通用监听事件
|
* @param {*} eveny_type
|
* @param {*} callback
|
*/
|
addGlobalEvent: function (event_type, callback) {
|
if (!event_type) return
|
if (!this.base_view_event_list[event_type]) {
|
this.base_view_event_list[event_type] = gcore.GlobalEvent.bind(event_type, (function (...value) {
|
if (callback) {
|
callback.apply(this, value);
|
}
|
}).bind(this))
|
return this.base_view_event_list[event_type];
|
}
|
},
|
|
removeGlobalEvent:function(event_hand){
|
if (!event_hand) {
|
for(var key in this.base_view_event_list){
|
if (this.base_view_event_list[key])
|
gcore.GlobalEvent.unbind(this.base_view_event_list[key]);
|
}
|
this.base_view_event_list = null;
|
} else {
|
if (this.base_view_event_list[event_hand]) {
|
gcore.GlobalEvent.unbind(this.base_view_event_list[event_hand]);
|
delete this.base_view_event_list[event_hand];
|
}
|
}
|
},
|
|
startUpdate: function(times, update_cb, interval) {
|
times = times > 0 ? times : -1;
|
interval = interval || 100;
|
if (times > 0) {
|
if (update_cb) {
|
var timer_count = 0;
|
var timer_index = null;
|
for (var timer_i in this.update_timers) {
|
if (!this.update_timers[timer_i]) {
|
timer_index = timer_i;
|
break;
|
}
|
timer_count += 1;
|
}
|
|
if (!timer_index)
|
timer_index = "udpatetimer_" + timer_count
|
this.update_timers[timer_index] = {};
|
this.update_timers[timer_index]["finish"] = 0;
|
this.update_timers[timer_index]["times"] = times;
|
this.update_timers[timer_index]["timer"] = gcore.Timer.set(function (callback, timer_index) {
|
if (callback)
|
callback(this.update_timers[timer_index]["finish"]);
|
if (this.update_timers[timer_index]) {
|
this.update_timers[timer_index]["finish"] += 1;
|
if (this.update_timers[timer_index]["finish"] == this.update_timers[timer_index]["times"]) {
|
gcore.Timer.del(this.update_timers[timer_index]["timer"]);
|
this.update_timers[timer_index] = null;
|
}
|
}
|
}.bind(this, update_cb, timer_index), interval, times);
|
return this.update_timers[timer_index]["timer"];
|
}
|
} else {
|
if (!this.mainloop_timer) {
|
this.mainloop_timer = gcore.Timer.set(function () {
|
if (this.update)
|
this.update(200/1000);
|
}.bind(this), 200, -1);
|
return this.mainloop_timer;
|
}
|
}
|
},
|
|
stopUpdate: function(timer_hander) {
|
if (timer_hander) {
|
for (var timer_i in this.update_timers) {
|
if (this.update_timers[timer_i] && this.update_timers[timer_i]["timer"] === timer_hander) {
|
gcore.Timer.del(this.update_timers[timer_i]["timer"]);
|
this.update_timers[timer_i] = null;
|
}
|
}
|
} else {
|
if (this.mainloop_timer) {
|
gcore.Timer.del(this.mainloop_timer);
|
this.mainloop_timer = null;
|
}
|
}
|
},
|
|
isOpen: function() {
|
if (this.root_wnd && this.root_wnd.active)
|
return true;
|
return false
|
},
|
|
addTicket: function(cf, interval, index) {
|
interval = (typeof parseInt(interval) == "number") ? interval * 1000 : 0;
|
var tick_id = gcore.Timer.set(function(cb) {
|
if (cb)
|
cb();
|
}.bind(this, cf), interval, 1);
|
if (index)
|
this.ticks[index] = tick_id;
|
},
|
|
delTicker: function(index) {
|
if (this.ticks[index]) {
|
gcore.Timer.del(this.ticks[index]);
|
delete this.ticks[index];
|
}
|
|
},
|
|
hasTicket: function(index) {
|
return !!this.ticks[index]
|
},
|
|
|
seekChildByTag: function(parent, tag) {
|
if (!parent) return;
|
if (parent.ui_tag === tag) {
|
return parent;
|
}
|
var childrens = parent.getChildren();
|
for (var index in childrens) {
|
var resultNode = this.seekChildByTag(childrens[index], tag);
|
if (resultNode) return resultNode;
|
}
|
},
|
|
})
|