public PlayerTurnMove(TurnMgr owner, Unit unit) : base(owner, unit)
 {
     cubesCanGo = MapMgr.Instance.GetCubes(
         unit.GetCube,
         cube => cube != unit.GetCube && (cube.GetUnit() == null || cube.GetUnit().currHealth <= 0),
         path => path.path.Count <= unit.actionPointsRemain + 1);
 }
Пример #2
0
    void SetUIBeginEnter(EventParam param)
    {
        turnMgr = gameMgr._turnMgr;

        Dictionary <ActionType, UnityAction> btnEvents = new Dictionary <ActionType, UnityAction>();

        btnEvents.Add(ActionType.Move, OnClickMoveBtn);
        btnEvents.Add(ActionType.Attack, OnClickAttackBtn);
        btnEvents.Add(ActionType.Item, OnClickItemBtn);
        btnEvents.Add(ActionType.Skill, OnClickSkillBtn);

        Unit nextTurnUnit = turnMgr.turns.Peek();

        actionPanel.SetPanel(nextTurnUnit.actionSlots, nextTurnUnit.actionPointsRemain, btnEvents);
        actionPointPanel.SetText(nextTurnUnit.actionPointsRemain);
        turnPanel.gameObject.SetActive(true);

        if (turnPanel.ShouldUpdateSlots(turnMgr.turns.ToList()))
        {
            turnPanel.SetSlots(statusPanel, turnMgr.turns.ToList());
        }

        testPlayBtn.SetActive(false);
        endTurnBtn.SetActive(true);
        backBtn.SetActive(false);
    }
 /// <summary>
 /// Event를 기다리는 State입니다.
 /// branches List에 들어있는 순서대로 Predicate를 검사하고 True를 반환하는 Key의 Value인 State로 Transition합니다.
 /// </summary>
 /// <param name="e">기다릴 Event</param>
 public TurnMgr_BranchSingleEvent_(
     TurnMgr owner, Unit unit, ObserverEvent e, List<KeyValuePair<Predicate<EventParam>, TurnMgr_State_>> branches, 
     Predicate<EventParam> ignoreCondition = null, Action onWaitEnter = null, Action onWaitExecute = null, Action onWaitExit = null)
     : base(owner, unit, e, null, null, onWaitEnter, onWaitExecute, onWaitExit)
 {
     _branches = branches;
     _ignoreCondition = ignoreCondition;
 }
Пример #4
0
    public TurnMgr_PlayerAttack_(TurnMgr owner, Unit unit) : base(owner, unit)
    {
        // get all cubes in range
        cubesAttackRange = MapMgr.Instance.GetCubes(unit.basicAttackRange, unit.GetCube);

        // filter cubes
        cubesCanAttack = cubesAttackRange
                         .Where(CubeCanAttackConditions)
                         .ToList();
    }
Пример #5
0
    void OnClickItemSlotBtn(Item item)
    {
        turnMgr = gameMgr._turnMgr;

        string popupContent = $"r u sure u wanna use {item.name}?";

        turnMgr.stateMachine.ChangeState(
            new TurnMgr_Popup_(turnMgr, turnMgr.turns.Peek(), Input.mousePosition, popupContent,
                               () => UseItem(item), () => turnMgr.stateMachine.ChangeState(null, StateMachine <TurnMgr> .StateTransitionMethod.ReturnToPrev),
                               () => itemPanel.SetPanel(turnMgr.turns.Peek().itemBag.GetItem(), OnClickItemSlotBtn), null,
                               () => itemPanel.UnsetPanel()), StateMachine <TurnMgr> .StateTransitionMethod.JustPush);
    }
    public TurnMgr_PlayerSkill_(TurnMgr owner, Unit unit) : base(owner, unit)
    {
        // get all cubes in range
        cubesCastRange = MapMgr.Instance.GetCubes(
            unit.skill.skillRange,
            unit.GetCube
            );

        // filter cubes
        cubesCanCast = cubesCastRange
                       .Where(CubeCanCastConditions)
                       .ToList();
    }
    /// <summary>
    /// Event를 기다리는 State입니다.
    /// </summary>
    /// <param name="e">기다릴 Event</param>
    /// <param name="nextState">이 State 다음 State</param>
    /// <param name="paramCondition">Event발생시 매개변수를 검사하여 nextState로 Tranisition 여부를 결정하는 Predicate</param>
    public TurnMgr_WaitSingleEvent_(
        TurnMgr owner, Unit unit, Event e, TurnMgr_State_ nextState,
        Predicate <EventParam> paramCondition = null, Action onWaitEnter = null,
        Action onWaitExecute = null, Action onWaitExit = null) : base(owner, unit)
    {
        _e              = e;
        _nextState      = nextState;
        _paramCondition = paramCondition;

        _onWaitEnter   = onWaitEnter;
        _onWaitExecute = onWaitExecute;
        _onWaitExit    = onWaitExit;
    }
Пример #8
0
    public TurnMgr_Popup_(TurnMgr owner, Unit unit, Vector3 popupPos,
                          string popupContent, UnityAction onClickYes, UnityAction onClickNo,
                          Action onPopupEnter = null, Action onPopupExecute = null, Action onPopupExit = null) : base(owner, unit)
    {
        // TODO �Ķ���Ͱ����� Event�� �ذᰡ��
        //_popup = MonoBehaviour.FindObjectOfType<BattleUI>().popupPanel; // ���Ⱑ ���� ����

        _popupPos     = popupPos;
        _onClickNo    = onClickNo;
        _onClickYes   = onClickYes;
        _popupContent = popupContent;

        this.onPopupEnter   = onPopupEnter;
        this.onPopupExecute = onPopupExecute;
        this.onPopupExit    = onPopupExit;
    }
Пример #9
0
    public TurnMgr_Popup_(TurnMgr owner, Unit unit, Vector2 popupPos,
                          string popupContent, UnityAction onClickYes, UnityAction onClickNo,
                          Action onPopupEnter = null, Action onPopupExecute = null, Action onPopupExit = null) : base(owner, unit)
    {
        // TODO 파라미터가능한 Event시 해결가능
        _popup = MonoBehaviour.FindObjectOfType <UIMgr>().popupPanel; // 여기가 조금 문제

        _popupPos     = popupPos;
        _onClickNo    = onClickNo;
        _onClickYes   = onClickYes;
        _popupContent = popupContent;

        this.onPopupEnter   = onPopupEnter;
        this.onPopupExecute = onPopupExecute;
        this.onPopupExit    = onPopupExit;
    }
Пример #10
0
    void SetUIPlan(EventParam param)
    {
        turnMgr = gameMgr._turnMgr;

        testPlayBtn.SetActive(false);
        endTurnBtn.SetActive(false);
        backBtn.SetActive(false);

        actionPanel.UnsetPanel();
        actionPointPanel.SetText(turnMgr.turns.Peek().actionPointsRemain);

        turnPanel.gameObject.SetActive(true);

        if (turnPanel.ShouldUpdateSlots(turnMgr.turns.ToList()))
        {
            turnPanel.SetSlots(statusPanel, turnMgr.turns.ToList());
        }
    }
Пример #11
0
    void UseItem(Item item)
    {
        turnMgr = gameMgr._turnMgr;

        TurnMgr_State_ nextState = new TurnMgr_PlayerBegin_(turnMgr, turnMgr.turns.Peek());

        turnMgr.stateMachine.ChangeState(
            new TurnMgr_WaitSingleEvent_(turnMgr, turnMgr.turns.Peek(), EventMgr.Instance.onUnitIdleEnter, nextState),
            StateMachine <TurnMgr> .StateTransitionMethod.JustPush);


        ItemCommand itemCommand;

        if (ItemCommand.CreateCommand(turnMgr.turns.Peek(), item, out itemCommand))
        {
            turnMgr.turns.Peek().EnqueueCommand(itemCommand);
        }
    }
Пример #12
0
 public AITurnBegin(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
Пример #13
0
 public TurnMgr_PlayerAttack_(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
Пример #14
0
 public TurnMgr_Nobody_(TurnMgr owner) : base(owner, null)
 {
 }
Пример #15
0
 public void SetTMEndTurnBtn()
 {
     _turnMgr = FindObjectOfType <TurnMgr>();
 }
Пример #16
0
 public void RegisterEvent()
 {
     EventMgr.Instance.onGameBattleEnter.Register(el_GameBattleEnter, (param) => { _turnMgr = FindObjectOfType <TurnMgr>(); });
 }
Пример #17
0
 public TurnMgr_PlayerItemUse_(TurnMgr owner, Unit unit, Item item) : base(owner, unit)
 {
     _item = item;
 }
 /// <summary>
 /// Event를 기다리는 State입니다.
 /// </summary>
 /// <param name="e">기다릴 Event</param>
 /// <param name="nextState">Event발생시 Transition할 다음 State</param>
 /// <param name="onEvent">state를 바꾸기 전에 호출할 함수가 있다면 추가하세요.</param>
 public TurnMgr_WaitMultipleEvents_(TurnMgr owner, Unit unit, List <ObserverEvent> events,
                                    TurnMgr_State_ nextState, Action onWaitEnter = null, Action onWaitExecute = null, Action onWaitExit = null)
     : base(owner, unit, null, nextState, null, onWaitEnter, onWaitExecute, onWaitExit)
 {
     _events = events;
 }
Пример #19
0
 public TurnMgr_AIPlan_(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
Пример #20
0
 public void SetTestPlayBtn()
 {
     _turnMgr = FindObjectOfType <TurnMgr>();
 }
 public TurnMgr_PlayerItemBag_(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
 public TurnMgr_PlayerBegin_(TurnMgr owner, Unit unit) : base(owner, owner.turns.Peek()) // 여기서 turns 큐가 비어있음
 {
 }
 public GameMgr_Battle_(GameMgr owner, TurnMgr turnMgrPrefab) : base(owner)
 {
     _turnMgr = Object.Instantiate(turnMgrPrefab);
 }
Пример #24
0
 public TurnMgr_AIBegin_(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
Пример #25
0
 public TurnMgr_AIAction_(TurnMgr owner, Unit unit, List <APActionNode> actions) : base(owner, unit)
 {
     _actions = new Queue <APActionNode>(actions);
 }
Пример #26
0
 public TurnMgr_PlayerBegin_(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }
Пример #27
0
 public PlayerTurnItem(TurnMgr owner, Unit unit) : base(owner, unit)
 {
 }