//------------------------------------------------------------------------- public int _isUserHandleTrigger(_tMsgInfoEx msg) { if (msg.msg_type != _eMsgType.Trigger) { return(-1); } foreach (var i in mListTriggerMsg) { if (i.is_two) { if (i.trigger_type == msg.trigger_type && i.trigger_id == msg.trigger_id) { return(i.entity_id); } } else { if (i.trigger_type == msg.trigger_type) { return(i.entity_id); } } } return(-1); }
//------------------------------------------------------------------------- public void onMsg(int msg_type, int msg_id, int msg_param, List <object> msg_paramlist) { // 消息信息收集 _tMsgInfoEx msg = new _tMsgInfoEx(); msg.msg_info.msg_type = msg_type; msg.msg_info.msg_id = msg_id; msg.msg_info.msg_param = msg_param; msg.msg_info.msg_paramlist = msg_paramlist; msg.msg_type = _eMsgType.Normal; bool is_trigger_msg = mNodeSys._getTriggerMgr().isTriggerMsg(msg.msg_info.msg_type, msg.msg_info.msg_id); if (is_trigger_msg) { msg.msg_type = _eMsgType.Trigger; msg.trigger_type = msg.msg_info.msg_id; msg.trigger_id = msg.msg_info.msg_param; } // 预处理消息 int result = _preHandleMsg(msg); // 根据预处理结果再次处理该消息 switch (result) { case -1: // 被预处理了 return; case 1: // 进入默认处理流程 List <object> param_list = new List <object>(); param_list.Add(msg.trigger_type); param_list.Add(msg.trigger_id); //mEntityMgr.sendMessage(20, 950, 0, param_list); return; case 0: // 进入原始处理流程 _handleMsg(msg); break; default: break; } }
//------------------------------------------------------------------------- public int _preHandleMsg(_tMsgInfoEx msg) { int handle_entity_id = _isUserHandleTrigger(msg); if (handle_entity_id < 0) { return(0); } return(0); //CNode handle_entity = mEntityMgr._getEntity(handle_entity_id); //if (handle_entity == null) return 0; //List<object> param_list = new List<object>(); //param_list.Add(msg.trigger_type); //param_list.Add(msg.trigger_id); //int handle_result = (int)handle_entity.sendPrivateMessage(20, 951, msg.msg_info.msg_param, param_list); //return handle_result; }
//------------------------------------------------------------------------- public void _handleMsg(_tMsgInfoEx msg) { //if (msg.msg_type == _eMsgType.Trigger) //{ // // 将entity_list分成两类:处于start状态一类,处于其他状态一类 // List<CNode> entity_list = mEntityMgr._getCurrentNodeList(); // List<CNode> el = new List<CNode>(entity_list); // List<CNode> startstate_entity_list = new List<CNode>(); // List<CNode> otherstate_entity_list = new List<CNode>(); // foreach (var i in el) // { // if (i.getNodeState() == _eNodeState.Start) // { // startstate_entity_list.Add(i); // } // else // { // otherstate_entity_list.Add(i); // } // } // el.Clear(); // // 将startstate_entity_list随机洗牌 // _reshuffle<CNode>(startstate_entity_list); // // 将startstate_entity_list按trigger权重由高到低排序 // //startstate_entity_list.Sort( // // delegate(CNode a, CNode b) // // { // // int aw = a.getTotalTriggerWeight(); // // int bw = b.getTotalTriggerWeight(); // // if (aw > bw) // // { // // return -1; // // } // // else if (aw == bw) // // { // // return 0; // // } // // else // // { // // return 1; // // } // // }); // //string w = ""; // //foreach (var i in startstate_entity_list) // //{ // // w += i.getTotalTriggerWeight().ToString(); // // w += " "; // //} // //Debug.Log("权重列表为:" + w); // // 依次执行,跟踪执行结果 // bool success = false; // foreach (var i in startstate_entity_list) // { // if (entity_list.Contains(i) && i._hasMessage(msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param)) // { // i.processEvent("main_sendmsg", msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param, msg.msg_info.msg_paramlist); // i.processEvent("main_update", 0.0f); // if (i.getNodeState() != _eNodeState.Start) // { // // 状态切换成功 // success = true; // break; // } // } // } // // 所有entity都没有执行成功,执行默认事件 // if (!success) // { // List<object> param_list = new List<object>(); // param_list.Add(msg.trigger_type); // param_list.Add(msg.trigger_id); // mEntityMgr.sendMessage(20, 950, 0, param_list); // } // // otherstate_entity_list直接广播执行 // foreach (var i in otherstate_entity_list) // { // if (entity_list.Contains(i) && i._hasMessage(msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param)) // { // i.processEvent("main_sendmsg", msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param, msg.msg_info.msg_paramlist); // } // } //} //else //{ // // 非trigger_msg直接广播执行 // List<CNode> entity_list = mEntityMgr._getCurrentNodeList(); // List<CNode> l = new List<CNode>(entity_list); // foreach (var i in l) // { // if (entity_list.Contains(i) && i._hasMessage(msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param)) // { // i.processEvent("main_sendmsg", msg.msg_info.msg_type, msg.msg_info.msg_id, msg.msg_info.msg_param, msg.msg_info.msg_paramlist); // } // } //} }