Beispiel #1
0
    public bool CheckCurRoomPathEnd()
    {
        bool tmpBool = false;

        for (int i = 0; i < m_curSceneRoom.CurRoomInfo.m_gateList.Count; i++)
        {
            SM.Gate tmpGate = m_curSceneRoom.CurRoomInfo.m_gateList[i];
            if (!tmpGate.isGateOpen)
            {//检测当前房间房间门是否开放
                continue;
            }
            if (GetAutoMoveRoomData(m_curSceneRoom.ID).m_gatePathEndList[i])
            {//检测当前闸门是否还用再去探索
                continue;
            }
            if (!tmpGate.OutIsActive)
            {
                AutoMoveRoom curRoomMoveData = GetAutoMoveRoomData(m_curSceneRoom.ID);
                if (curRoomMoveData.m_openAllTrap)
                {
                    tmpBool = true;
                }
            }
        }
        return(tmpBool);
    }
Beispiel #2
0
    bool OpenTrapWithKey()
    {
        bool openAllTrap = true;

        foreach (var item in m_targetIDList)
        {
            Actor tmpActor = ActorManager.Singleton.Lookup(item);
            Trap  tmpTrap  = tmpActor as Trap;
            if (tmpTrap.m_IsNeedKey)
            {
                if (BattleArena.Singleton.GetKeyCountByID(tmpTrap.m_needKeyId) > 0)
                {
                    Owner.CurrentTarget = ActorManager.Singleton.Lookup(item);
                    m_curTargetID       = item;
                    if (ActionTryFireSkill(0))//释放开宝箱技能
                    {
                        m_curTargetID       = 0;
                        Owner.CurrentTarget = null;
                    }
                }
                else
                {
                    openAllTrap = false;
                }
            }
        }
        //当前房间机关是否全部开启
        AutoMoveRoom tmpAutoMoveRoomData = GetAutoMoveRoomData(m_curSceneRoom.ID);

        tmpAutoMoveRoomData.SetEnOpenTrap(openAllTrap);
        return(true);
    }
Beispiel #3
0
 public AutoMoveRoom GetAutoMoveRoomData(int roomId)
 {
     if (!m_autoMoveRoomDic.ContainsKey(roomId))
     { //检测要去的房间是否走过并设置要去房间进入房间的房门和来时房间的ID
         AutoMoveRoom tmpMoveRoom = new AutoMoveRoom();
         m_autoMoveRoomDic.Add(roomId, tmpMoveRoom);
     }
     return(m_autoMoveRoomDic[roomId]);
 }
Beispiel #4
0
    public bool AutoPathing()
    {
        if (m_curSceneRoom == null)
        {//监测当前所站立位置死否有房间
            return(false);
        }
        if (!m_curSceneRoom.IsOpenState)
        {//监测当前房间是否开门
            return(false);
        }
        if (Self.ActionControl.IsActionRunning(ActorAction.ENType.enStandAction) && m_autoMove)
        {//监测当前是否在站立状态
            m_autoMove = false;
        }
        else if (Self.ActionControl.IsActionRunning(ActorAction.ENType.enMoveAction))
        {//检测是否在移动状态
            MoveAction action = Self.ActionControl.LookupAction(ActorAction.ENType.enMoveAction) as MoveAction;
            if (action.IsStopMove && m_autoMove)
            {//在移动状态停止移动
                m_autoMove = false;
            }
        }
        if (m_autoMove)
        {
            return(false);
        }
        SM.SceneRoom curSceneRoom    = m_curSceneRoom;
        AutoMoveRoom curRoomMoveData = GetAutoMoveRoomData(curSceneRoom.ID);
        int          moveToRoomID    = -1;
        bool         noRoomCanTo     = true;

        for (int i = 0; i < curSceneRoom.CurRoomInfo.m_gateList.Count; i++)
        {//遍历当前房间闸门
            SM.Gate curGate = curSceneRoom.CurRoomInfo.m_gateList[i];
            if (curGate.GateToRoomObjID == -1)
            {
                continue;
            }
            if (!curGate.OutIsActive)
            {//检测当前房间房间门是否开放
                noRoomCanTo = false;
                continue;
            }
            if (curRoomMoveData.NeedToSearch(curGate.gateId))
            {//检测当前闸门是否还用再去探索
                continue;
            }
            moveToRoomID = curGate.GateToRoomObjID;
            break;
        }

        if (moveToRoomID == -1)
        {//闸门没有可去的那么返回上一个房间
            SM.SceneRoom preRoom = m_curSceneRoom.m_preRoom;
            if (preRoom == null)
            {
                return(false);
            }
            moveToRoomID = preRoom.ID;
            if (noRoomCanTo)
            {
                for (int i = 0; i < preRoom.CurRoomInfo.m_gateList.Count; i++)
                {
                    SM.Gate gate = preRoom.CurRoomInfo.m_gateList[i];
                    if (gate.GateToRoomObjID == curSceneRoom.ID)
                    {//将上一个房间通向这个房间的闸门标记为不再探索
                        GetAutoMoveRoomData(moveToRoomID).AcceptGatePathList(gate.gateId);
                    }
                }
            }
        }
        FindPathLogicData logicData = ScenePathfinder.Singleton.FindRoomNode(m_curSceneRoom.CurRoomInfo.m_GUID);

        foreach (FindPathLogicData.LinkInfo linkData in logicData.m_links)
        {
            foreach (FindPathLogicData.LinkInfo linkData1 in linkData.m_linkRoom.m_links)
            {
                if (linkData1.m_linkRoom.GUID == moveToRoomID)
                {
                    ActionMoveTo(linkData1.m_linkPos);
                    m_autoMove = true;
                    return(true);
                }
            }
        }
        return(false);
    }