示例#1
0
    //检查被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;
        }
    }
示例#2
0
    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();
    }
示例#3
0
    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);
        }
    }