//检查被UI关心的逻辑对象 private void TickCareLogic() { Dictionary <string, OBJECT_BECARED> .Enumerator enumerator = mapCaredObjects.GetEnumerator(); while (enumerator.MoveNext()) { OBJECT_BECARED careItem = enumerator.Current.Value; CObject npc = FindObject(careItem.id); if (npc == null) { LogManager.LogError("Cannot found CareObject"); continue; } float newDistance = Utility.TDU_GetDist(getPlayerMySelf().GetPosition(), npc.GetPosition()); float fStep = Mathf.Abs(newDistance - careItem.fLastDistance); if (fStep > 0.01) { List <string> sParams = new List <string>(); sParams.Add(npc.ID.ToString()); sParams.Add(newDistance.ToString()); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_OBJECT_CARED_EVENT, sParams); } careItem.fLastDistance = newDistance; } }
public void DestroyObject(CObject obj) { if (obj == null) { return; } //如果是主目标,取消选择 if (obj == mMainTarget) { mMainTarget = null; } if (obj == mNearestTargetOLD) { mNearestTargetOLD = null; } mObjects.Remove(obj.ID); mServerObjects.Remove(obj.ServerID); //如果被ui关心,发出事件并清除 int id = obj.ID; Dictionary <string, OBJECT_BECARED> .Enumerator enumerator = mapCaredObjects.GetEnumerator(); while (enumerator.MoveNext()) { OBJECT_BECARED careItem = enumerator.Current.Value; if (careItem.id == id) { //产生事件 List <string> vParam = new List <string>(); vParam.Add(id.ToString()); vParam.Add("destroy"); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_OBJECT_CARED_EVENT, vParam); mapCaredObjects.Remove(enumerator.Current.Key); break; } } //删除队列中其他同ID的物体 enumerator = mapCaredObjects.GetEnumerator(); while (enumerator.MoveNext()) { OBJECT_BECARED careItem = enumerator.Current.Value; if (careItem.id == id) { mapCaredObjects.Remove(enumerator.Current.Key); enumerator = mapCaredObjects.GetEnumerator(); } } if (obj.GetParent() != null) { obj.GetParent().EraseChild(obj); } obj.Release(); }
public void CareObject(int objId, bool isCare, string sign) { CObject obj = FindObject(objId); if (obj == null) { return; } mapCaredObjects.Remove(sign); if (isCare) { OBJECT_BECARED careObj = new OBJECT_BECARED(); careObj.id = objId; careObj.fLastDistance = Utility.TDU_GetDist(getPlayerMySelf().GetPosition(), obj.GetPosition()); mapCaredObjects.Add(sign, careObj); } }