Exemplo n.º 1
0
 public void SetUnderAttack(AttackFinished attackFinished)
 {
     lastState = State;
     State     = BuildingState.UnderAttack;
     ShowAttackIcon();
     if (myAudioSource != null)
     {
         myAudioSource.clip = myAtkAudioClip;
         myAudioSource.Play();
     }
     //GetComponent<SpriteRenderer>().color = Color.red;
     attackCurrentTime = 0;
     onAttackFinished  = attackFinished;
 }
    public bool NextTurn()
    {
        //if the team attacked is all dead
        if (IsAllTeamDead(((!currentTeamsTurn_) ? team2_ : team1_)))
        {
            if (CombatEnd != null)
            {
                CombatEnd.Invoke();
            }


            Debug.Log("Combat Finished.");

            return(true);
        }

        currentCharactersTurn_.CharacterTurnEnds();

        switch (settings_.attackOrder_)
        {
        case CombatSystemSettings.AttackOrder.AlternateTeamEveryTeamTurn:

            if (IsLastAliveInTeamToTakeTurn(((currentTeamsTurn_) ? team2_ : team1_), currentCharactersTurn_))
            {
                currentTeamsTurn_      = !currentTeamsTurn_;
                currentCharactersTurn_ = GetFirstCharacterToTakeTurnInTeam(((currentTeamsTurn_) ? team2_ : team1_));

                if (TeamSwitch != null)
                {
                    TeamSwitch.Invoke();
                }
            }
            else
            {
                currentCharactersTurn_ = GetNextAliveCharacterInTeam(((currentTeamsTurn_) ? team2_ : team1_), currentCharactersTurn_);
            }

            break;
        }

        if (AttackFinished != null)
        {
            AttackFinished.Invoke();
        }

        currentCharactersTurn_.CharacterTurnStarts();

        return(true);
    }
Exemplo n.º 3
0
        private void OnCollisionEnter2D(Collision2D other)
        {
            var isAttacker = other.gameObject.CompareTag("Player");

            if (isAttacker)
            {
                IsUnderAttack = true;
                var impact       = other.transform.position - transform.position;
                var attackedFrom = impact.x < 0f ? Direction.Right : Direction.Left;
                lastAttackedFrom = attackedFrom;
                UnderAttack?.Invoke(attackedFrom);
                rb.AddForce(new Vector2(attackedFrom.AsFloat(), OnCollisionYDirectionFactor) * OnCollisionForceMultiplier);
            }
            else
            {
                IsUnderAttack = false;
                AttackFinished?.Invoke();
            }
        }
Exemplo n.º 4
0
    public virtual IEnumerator Attack()
    {
        //Spawn object
        Quaternion butt = Quaternion.LookRotation(lastInput == Vector3.zero ? Vector3.up : lastInput, Vector3.forward);

        butt.x = 0;
        butt.y = 0;
        //GameObject go =
        Instantiate(attackPrefab,
                    transform.position + (lastInput == Vector3.zero ? Vector3.up : lastInput),
                    butt);

        //Wait for attack speed
        yield return(new WaitForSeconds(attackSpeed));

        AttackFinished.Invoke();

        StartCoroutine(RegularInput());
    }
Exemplo n.º 5
0
 //? 发布 AttackFinished event
 public virtual void OnAttakFinished()
 {
     AttackFinished?.Invoke(this, EventArgs.Empty);
 }
Exemplo n.º 6
0
 public void FinishAttack()
 {
     IsUnderAttack = false;
     AttackFinished?.Invoke();
 }