예제 #1
0
        /// <summary>
        /// Use the enemy's sword attack.
        /// </summary>
        protected override void Attack()
        {
            // Get the enemy's movement component
            EnemyMovement movement = transform.parent.GetComponent <EnemyMovement>();

            // Handle movement and animations
            movement.StopWalk();
            movement.Action(animationName);

            // Damage the player
            StartCoroutine("DamageEntity");

            // Reset attack status
            cooldown  = maxCooldown;
            attacking = true;
        }
        /// <summary>
        /// Load attack resources.
        /// </summary>
        private void Awake()
        {
            // Get the enemy movement component
            enemyMovement = GetComponent <EnemyMovement>();

            // Load all attacks for this enemy's attack group
            attackResources = Resources.LoadAll <EnemyAttack>("Attacks/" + attackGroup);
            attacks         = new EnemyAttack[attackResources.Length];

            // Spawn all attacks
            for (int i = 0; i < attackResources.Length; i++)
            {
                GameObject attackGameObject = Instantiate(attackResources[i].gameObject, transform);
                attacks[i] = attackGameObject.GetComponent <EnemyAttack>();
            }
        }
예제 #3
0
        /// <summary>
        /// Damage the player if there is one.
        /// </summary>
        protected override IEnumerator DamageEntity()
        {
            // Get the player's movement component
            EnemyMovement movement = transform.parent.GetComponent <EnemyMovement>();

            // Wait for the attack duration to end
            float attackTime = duration;

            while (attackTime > 0)
            {
                attackTime -= Time.deltaTime;

                // Attack the player
                if (attackTime <= 0)
                {
                    // Make sure the enemy is still playing the attack animation
                    if (movement.IsAction(animationName))
                    {
                        // Check if attack hit an player
                        RaycastHit hit;
                        if (RaycastTarget("PlayerRaycast", transform.parent.position,
                                          transform.parent.TransformDirection(Vector3.forward),
                                          out hit))
                        {
                            // Damage the player
                            Health playerHealth = hit.transform.parent.GetComponent <Health>();
                            if (playerHealth != null)
                            {
                                playerHealth.TakeDamage(damage);
                            }
                        }
                    }
                }

                // Return nothing to the coroutine
                yield return(null);
            }
        }