public void Check()
        {
            try
            {
                var battleMgrBase = BattleMgrBase.GetIns();

                if (battleMgrBase != null)
                {
                    var player = battleMgrBase.GetBattlePlayer(true);
                    if (!ReferenceEquals(_playerBase, player))
                    {
                        if (player != null)
                        {
                            player.Emotion.OnPlay += ProcessPlayer;
                        }
                        _playerBase = player;
                    }
                    var oppo = battleMgrBase.GetBattlePlayer(false);
                    if (!ReferenceEquals(_oppoBase, oppo))
                    {
                        if (oppo != null)
                        {
                            oppo.Emotion.OnPlay += ProcessOppo;
                        }
                        _oppoBase = oppo;
                    }
                }
            }
            catch (Exception e)
            {
                //ignore
            }
        }
Beispiel #2
0
 public void UpdateButtonUI()
 {
     if (AButton == null)
         return;
     BattlePlayerBase player = BattlePlayerBase.LocalAuthority;
     AButton.button.interactable = (player.IsAlive && player.CanPlayAbility && RemainingCooldown <= 0);
     AButton.UpdateCooldown(RemainingCooldown, cooldown + 1);
 }
Beispiel #3
0
    public void OnBattlePlayerSpawned(BattlePlayerBase player)
    {
        if (player == LocalAuthority)
        {
            for (int i = 0; i < player.Abilities.Count; i++)
            {
                player.Abilities[i].SetButton(abilityButtons[i]);
            }
        }

        if (isServer)
        {
            playersReady++;
        }
    }
Beispiel #4
0
    private void OnMouseDown()
    {
        BattlePlayerBase localPlayer = BattlePlayerBase.LocalAuthority;

        if (localPlayer.IsAlive && IsAlive)
        {
            if (localPlayer.IsValidTarget(this))
            {
                if (localPlayer.SelectedAbility != null)
                {
                    localPlayer.OnAbilityTargetChosen(this);
                }
                else
                {
                    localPlayer.CmdAttack(gameObject);
                }
            }
        }
    }
Beispiel #5
0
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent <Animator>();

        velocity = new Vector3(0, 0, 0);
        rb       = GetComponent <Rigidbody2D>();
        if (playernum == PersistentPlayer.localAuthority.playerNum)
        {
            localAuthority = true;

            Camera cam = SwitchMazeManager.GetInstance().cam;
            cam.transform.parent        = gameObject.transform;
            cam.transform.localPosition = new Vector3(0, 0, -10f);

            DPad.Instance.Setup(this);
        }

        BattlePlayerBase player = players.Where(x => x.playerNum == playernum).First();

        SetAnimator(player.characterType);
    }
Beispiel #6
0
    private IEnumerator ExecuteEnemyPhase()
    {
        yield return(new WaitForSeconds(0.5f));

        //get attack damage directed at each player
        List <EnemyAttack>[] groupAttacks = new List <EnemyAttack> [BattlePlayerBase.players.Count];
        groupAttacks.Initialize(() => new List <EnemyAttack>());

        for (int i = 0; i < groupAttacks.Length; i++)
        {
            foreach (EnemyBase e in aliveEnemies)
            {
                if (e.IsAlive && e.HasTargets)
                {
                    e.AttackPlayer(groupAttacks[i], i);
                }
            }
        }

        //apply attack damage on the players
        for (int i = 0; i < players.Count; i++)
        {
            BattlePlayerBase   bp   = players[i];
            List <EnemyAttack> hits = new List <EnemyAttack>();
            bool containedMiss      = false;

            foreach (EnemyAttack attack in groupAttacks[i])
            {
                if (attack.hit)
                {
                    hits.Add(attack);
                }
                else
                {
                    containedMiss = true;
                    attack.attacker.PlayAnimation(BattleAnimation.Attack);
                }
            }

            if (containedMiss)
            {
                bp.RpcMiss();
                yield return(new WaitForSeconds(0.5f));
            }

            if (hits.Count > 0)
            {
                List <BattleActorBase> attackers = new List <BattleActorBase>();
                foreach (EnemyAttack hit in hits)
                {
                    if (hit.apply != Stat.None)
                    {
                        if (bp.HasStatusEffect(Stat.Reflect))
                        {
                            hit.attacker.AddStatusEffect(hit.apply, hit.attacker, hit.duration);
                        }
                        else
                        {
                            bp.AddStatusEffect(hit.apply, hit.attacker, hit.duration);
                        }
                    }
                    hit.attacker.PlayAnimation(BattleAnimation.Attack);
                    attackers.Add(hit.attacker);
                }

                bp.DispatchBlockableDamage(attackers);
                yield return(new WaitForSeconds(0.5f));
            }
        }

        //apply damage over time status effects on enemies
        yield return(ApplyDOTs(aliveEnemies));

        DecrementStats(aliveEnemies);
        DecrementStats(players);

        yield return(new WaitForSeconds(0.1f));

        if (boss != null)
        {
            yield return(boss.ExecuteTurn());
        }
        else if (aliveEnemies.Count > 0 && IsEnemyPhase)
        {
            StartPlayerPhase();
        }
    }