Ejemplo n.º 1
0
    IEnumerator ASyncTurnEnd()
    {
        if (!AnimationInteractionController.AllAnimationsFinished())
        {
            yield return(new WaitForSeconds(AnimationInteractionController.AFTER_KILL));
        }
        Debug.Log("EndTurn");
        //Perform end turn actions
        EndTurnActions();
        //Deselect selected tiles
        BoardProxy.instance.FlushTiles();
        //Play the turn cutscene

        PanelControllerNew.ClearPanels();

        //Switch controller teams
        SwitchTeams();
        //Perform start turn actions
        StartTurn(false);

        //Run AI (if applicable)
        if (currentTeam == BoardProxy.ENEMY_TEAM && !BoardProxy.HUMAN_PLAYER)
        {
            if (hard)
            {
                AdvancedBrain.StartThinking();
            }
            else
            {
                BasicBrain.StartThinking();
            }
        }
    }
Ejemplo n.º 2
0
 IEnumerator ResetTiles()
 {
     UnHighlightTiles();
     PanelControllerNew.SwitchChar(null);
     InteractivityManager.instance.EnterDefaultMode();
     yield return(null);
 }
Ejemplo n.º 3
0
    private void Awake()
    {
        instance = this;

        instance.dialogPnl.SetActive(true);

        instance.dialogPnl.transform.GetChild(0).GetChild(0).GetComponent <TextMeshProUGUI>().text = StoryStatic.GetLevelStory();

        ClearPanels();
    }
Ejemplo n.º 4
0
    public bool IsAttacked(UnitProxy oppUnit, bool useAttack = true)
    {
        Debug.Log("IsAttacked");
        if (useAttack)
        {
            oppUnit.GetData().GetTurnActions().Attack();
        }
        PanelControllerNew.SwitchChar(oppUnit);

        //Damage the unit

        /*
         * Trigger the opponent's attack trigger here
         */

        Vector3Int animStart = oppUnit.GetPosition();
        Vector3Int animEnd   = GetPosition();

        Debug.Log("animStart: " + animStart.ToString());
        Debug.Log("animEnd: " + animEnd.ToString());

        Vector3Int diff = animEnd - animStart;

        if (_data.GetAegis())
        {
            Debug.Log("Aegis!");
            //_data.SetAegis(false);
            StartCoroutine(AttackAnim(oppUnit, oppUnit.gameObject.transform.GetChild(0).GetComponent <Animator>(),
                                      oppUnit.gameObject.transform, diff, "", useAttack));
            //LostAegisAnim();
            SetAegis(false, AnimationInteractionController.ATK_WAIT);
            return(false);
        }
        Debug.Log("No Aegis");

        StartCoroutine(AttackAnim(oppUnit, oppUnit.gameObject.transform.GetChild(0).GetComponent <Animator>(),
                                  oppUnit.gameObject.transform, diff, "-" + oppUnit.GetData().GetAttack().ToString(), useAttack));

        GetData().IsAttacked(oppUnit.GetData().GetAttack());
        if (GetData().IsDead())
        {
            if (oppUnit == this)
            {
                BoardProxy.instance.GiveLowestCharLvl(this);
            }
            else
            {
                oppUnit.AddLevel();
            }
            return(true);
        }
        return(false);
    }
Ejemplo n.º 5
0
    //public void ResetAtThis()
    //{
    //    StartCoroutine(ResetTiles());
    //}

    public override void OnUnitSelected(UnitProxy obj)
    {
        if (!UnitMoving)
        {
            if (currentUnit == null)
            {
                toAttack = null;
                UnHighlightTiles();
                currentUnit = obj;
                //The maximum range in which a player has actions
                allTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetMoveSpeed() > obj.GetAttackRange() ? obj.GetMoveSpeed() : obj.GetAttackRange(), true);
                //The attackable tiles
                attackableTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetAttackRange(), true);
                //The visitable tiles
                visitableTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetMoveSpeed());
                HighlightTiles(obj);
                PanelControllerNew.SwitchChar(obj);
                if (currentUnit.GetData().GetTeam() == TurnController.instance.currentTeam)
                {
                    currentUnit.SaySomething(Skill.Actions.None);
                }
                CheckFocusAI();
            }
            else
            {
                if (toAttack != obj && currentUnit != obj)
                {
                    if (TurnController.instance.currentTeam == BoardProxy.PLAYER_TEAM && currentUnit.GetData().GetTeam() == BoardProxy.ENEMY_TEAM)
                    {
                        currentUnit = null;
                        OnUnitSelected(obj);
                    }
                    else
                    {
                        toAttack = obj;
                        UnitProxy player = currentUnit.GetData().GetTeam() == BoardProxy.PLAYER_TEAM ? currentUnit : toAttack;
                        UnitProxy enemy  = currentUnit.GetData().GetTeam() == BoardProxy.ENEMY_TEAM ? currentUnit : toAttack;
                        PanelControllerNew.SwitchChar(player, enemy);
                    }
                }
                else
                {
                    if (obj.GetData().GetTeam() != currentUnit.GetData().GetTeam() &&
                        attackableTiles.Contains(BoardProxy.instance.GetTileAtPosition(obj.GetPosition())) &&
                        currentUnit.GetData().GetTurnActions().CanAttack() &&
                        !obj.GetData().IsDead())
                    {
                        CheckFocusAI();

                        toAttack = null;

                        bool charDead = obj.IsAttacked(currentUnit);
                        if (currentUnit != null)
                        {
                            currentUnit.AcceptAction(Skill.Actions.DidAttack, obj);
                        }

                        if (charDead)
                        {
                            UnitProxy victor = BoardProxy.instance.GetTileAtPosition(currentUnit.GetPosition()).GetUnit();
                            victor.SaySomething(Skill.Actions.DidKill);
                            obj.DelayedKill(obj, victor);
                            StartCoroutine(ResetTiles());
                        }
                        else
                        {
                            currentUnit.SaySomething(Skill.Actions.DidAttack);
                            obj.SaySomething(Skill.Actions.DidDefend);
                        }
                        OnDisable();
                        PanelControllerNew.SwitchChar(currentUnit);
                    }
                }
            }
        }
    }
Ejemplo n.º 6
0
    public override void OnTileSelected(TileProxy tile)
    {
        if (!UnitMoving)
        {
            if (currentUnit != null && visitableTiles.Contains(tile))
            {
                toAttack = null;
                TileProxy startTile = BoardProxy.instance.GetTileAtPosition(currentUnit.GetPosition());
                if (startTile != tile)
                {
                    //UnitProxy unit = startTile.GetUnit();
                    if (currentUnit.GetData().GetTurnActions().CanMove())
                    {
                        //CheckFocusAI();
                        currentUnit.GetData().GetTurnActions().Move();
                        PanelControllerNew.SwitchChar(currentUnit);
                        UnitMoving = true;
                        StartCoroutine(currentUnit.CreatePathToTileAndLerpToPosition(tile,
                                                                                     () =>
                        {
                            tile.ReceiveGridObjectProxy(currentUnit);
                            startTile.RemoveGridObjectProxy(currentUnit);
                            UnHighlightTiles();
                            if (currentUnit != null && currentUnit.GetData().IsDead())
                            {
                                ConditionTracker.instance.EvalDeath(currentUnit);
                            }
                            InteractivityManager.instance.EnterDefaultMode();
                            UnitMoving = false;
                            CheckFocusAI();
                        }));
                    }
                    else
                    {
                        Debug.Log("Out of actions. Send signal to player they can't move unit.");
                    }
                }
                else
                {
                    StartCoroutine(currentUnit.CreatePathToTileAndLerpToPosition(tile,
                                                                                 () =>
                    {
                        StartCoroutine(ResetTiles());
                    }));
                }
            }
            else if (currentUnit != null)
            {
                //Select all the tiles with opp team in all tiles
                //List<TileProxy> visitableTiles = allTiles.Where(tl => tl.GetUnit().GetData().GetTeam() != currentUnit.GetData().GetTeam()).ToList<TileProxy>();
                if (!allTiles.Where(tl => tl.HasUnit() && (tl.GetUnit().GetData().GetTeam() != currentUnit.GetData().GetTeam())).ToList <TileProxy>().Contains(tile))
                {
                    //BoardProxy.instance.FlushTiles();
                    //PanelControllerNew.SwitchChar(null);

                    StartCoroutine(ResetTiles());
                }
                ////Player clicked out of unit range, reset tiles/UI so player can click somewhere else instead
                //BoardProxy.instance.FlushTiles();
                //PanelController.SwitchChar(null);
            }
        }
    }
Ejemplo n.º 7
0
 public void DisplayTurnText()
 {
     PanelControllerNew.DisplayTT(currentTeam == BoardProxy.PLAYER_TEAM ? "Player Turn" : "Enemy Turn");
 }
Ejemplo n.º 8
0
 public void DisplayStartGameText()
 {
     PanelControllerNew.DisplayTT("Begin Battle!");
 }