Beispiel #1
0
        public void EndCurrentPhase()
        {
            switch (m_interactiveMode)
            {
            case InteractiveMode.None:
                return;

            case InteractiveMode.Movement:
                if (m_pathFinder.tracking)
                {
                    m_pathFinder.End();
                    m_activeMovementContext.UpdateTarget(null);
                    m_cellPointerManager.SetAnimatedCursor(value: false);
                    m_feedbackNeedsUpdate = true;
                }
                m_cellPointerManager.EndHighlightingPlayableCharacters();
                break;

            case InteractiveMode.Target:
                if (m_targetContext != null && m_targetContext.End())
                {
                    m_cellPointerManager.SetDefaultLayer();
                    m_feedbackNeedsUpdate = true;
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            m_inputHandler.SetDirty();
            m_interactiveMode = InteractiveMode.None;
        }
Beispiel #2
0
        private void UpdateSystems()
        {
            //IL_004d: Unknown result type (might be due to invalid IL or missing references)
            //IL_0052: Unknown result type (might be due to invalid IL or missing references)
            //IL_0054: Unknown result type (might be due to invalid IL or missing references)
            //IL_0073: Unknown result type (might be due to invalid IL or missing references)
            //IL_0082: Unknown result type (might be due to invalid IL or missing references)
            //IL_010d: Unknown result type (might be due to invalid IL or missing references)
            //IL_016c: Unknown result type (might be due to invalid IL or missing references)
            //IL_0177: Unknown result type (might be due to invalid IL or missing references)
            //IL_019b: Unknown result type (might be due to invalid IL or missing references)
            //IL_01ed: Unknown result type (might be due to invalid IL or missing references)
            //IL_0212: Unknown result type (might be due to invalid IL or missing references)
            //IL_0222: Unknown result type (might be due to invalid IL or missing references)
            //IL_0244: Unknown result type (might be due to invalid IL or missing references)
            FightMapInputHandler inputHandler = m_inputHandler;

            if (!inputHandler.Update(m_mapDefinition))
            {
                return;
            }
            if (m_objectFocusedByCursor != null)
            {
                m_objectFocusedByCursor.SetFocus(value: false);
                m_objectFocusedByCursor = null;
            }
            FightMapCellPointerManager cellPointerManager = m_cellPointerManager;
            Vector2Int?targetCell = inputHandler.targetCell;

            if (targetCell.HasValue)
            {
                Vector2Int value = targetCell.Value;
                if (TryGetRegionIndex(value, out int regionIndex))
                {
                    FightMapMovementContext fightMapMovementContext = m_movementContexts[regionIndex];
                    fightMapMovementContext.entityProvider.TryGetEntityAt(value, out IEntityWithBoardPresence character);
                    CellObject referenceCell = m_virtualGrid.GetReferenceCell(value);
                    if (null != referenceCell)
                    {
                        cellPointerManager.SetCursorPosition(referenceCell);
                        cellPointerManager.ShowCursor();
                    }
                    else
                    {
                        cellPointerManager.HideCursor();
                    }
                    IObjectWithFocus objectWithFocus;
                    if (character != null && (objectWithFocus = (character.view as IObjectWithFocus)) != null)
                    {
                        objectWithFocus.SetFocus(value: true);
                        m_objectFocusedByCursor = objectWithFocus;
                    }
                    if (m_pathFinder.tracking)
                    {
                        if (fightMapMovementContext == m_activeMovementContext)
                        {
                            ICharacterEntity trackedCharacter = fightMapMovementContext.trackedCharacter;
                            bool             flag;
                            if (fightMapMovementContext.canDoActionOnTarget)
                            {
                                IEntityWithBoardPresence entityWithBoardPresence = null;
                                if (character != null && character != trackedCharacter && (fightMapMovementContext.GetCell(value).state & FightMapMovementContext.CellState.Targetable) != 0)
                                {
                                    entityWithBoardPresence = character;
                                }
                                fightMapMovementContext.UpdateTarget(entityWithBoardPresence);
                                flag = (entityWithBoardPresence != null);
                            }
                            else
                            {
                                flag = false;
                            }
                            if (fightMapMovementContext.canMove)
                            {
                                if (flag)
                                {
                                    if (trackedCharacter.hasRange)
                                    {
                                        m_pathFinder.Reset();
                                    }
                                    else
                                    {
                                        m_pathFinder.Move(fightMapMovementContext.stateProvider, fightMapMovementContext.grid, value, isTargeting: true);
                                    }
                                }
                                else if ((fightMapMovementContext.GetCell(value).state & (FightMapMovementContext.CellState.Reachable | FightMapMovementContext.CellState.Occupied)) == FightMapMovementContext.CellState.Reachable)
                                {
                                    m_pathFinder.Move(fightMapMovementContext.stateProvider, fightMapMovementContext.grid, value, isTargeting: false);
                                }
                                else
                                {
                                    m_pathFinder.Reset();
                                }
                            }
                            cellPointerManager.SetAnimatedCursor(flag);
                        }
                        else
                        {
                            m_pathFinder.Reset();
                            cellPointerManager.SetAnimatedCursor(value: false);
                        }
                        m_feedbackNeedsUpdate = true;
                    }
                    else
                    {
                        if (m_interactiveMode != InteractiveMode.Target || onTargetChanged == null)
                        {
                            return;
                        }
                        if (m_targetContext.TryGetTargetAt(value, out Target target))
                        {
                            if (target.type == Target.Type.Entity && target.entity == character)
                            {
                                m_targetContext.UpdateTarget(value, character);
                            }
                            else
                            {
                                m_targetContext.UpdateTarget(value, null);
                            }
                            onTargetChanged(target, referenceCell);
                        }
                        else
                        {
                            m_targetContext.UpdateTarget(value, null);
                            onTargetChanged(null, null);
                        }
                    }
                    return;
                }
            }
            if (m_pathFinder.tracking)
            {
                m_pathFinder.Reset();
                m_feedbackNeedsUpdate = true;
            }
            m_cellPointerManager.HideCursor();
            if (m_interactiveMode == InteractiveMode.Target)
            {
                onTargetChanged?.Invoke(null, null);
            }
        }