private GameEntityMsg getGameEntityMsg() { GameEntityMsg result = null; if (gameEntityMsgPool.Count == 0) { result = new GameEntityMsg(); gameEntityMsgPool.Add(result); return(result); } List <GameEntityMsg> .Enumerator tor = gameEntityMsgPool.GetEnumerator(); while (tor.MoveNext()) { if (tor.Current.DispatchTime == 0) { result = tor.Current; break; } } if (result == null) { result = new GameEntityMsg(); gameEntityMsgPool.Add(result); } gameEntityMsgPool.Sort(CompareByDispatchTime); return(result); }
public void SendMessage(float delay, int senderID, int receiverID, int msgID, params object[] ExtraInfo) { BaseGameEntity receiver = getRegisteredEntityByID(receiverID); GameEntityMsg msg = getGameEntityMsg(); //GameEntityMsg msg = new GameEntityMsg(); if (delay <= 0.0f) { receiver.HandleMessage(msg); } else { float CurrentTime = Time.time; CurrentTime += delay; msg.DispatchTime = CurrentTime; } msg.Set(delay, senderID, receiverID, msgID, ExtraInfo); }
public override void HandleMessage(object gameEntityMsg) { base.HandleMessage(gameEntityMsg); GameEntityMsg msg = gameEntityMsg as GameEntityMsg; switch ((GameEntityMsgType)msg.MsgID) { case GameEntityMsgType.EntityEx: { Debug.Log("扩展消息:" + (int)msg.ExtraInfo[0]); } break; default: Debug.Log("默认消息 //这边可以用来管理对象,比如用状态机来管理对象"); break; } }
public bool Equals(GameEntityMsg obj) { bool result = false; if (obj != null) { float diff = DispatchTime - obj.DispatchTime; if (diff < SmallestDelay) { if (m_Sender == obj.senderID) { if (m_Receiver == obj.m_Receiver) { if (MsgID == obj.MsgID) { result = true; } } } } } return(result); }