コード例 #1
0
    public void Destroy()
    {
        if (buildHealth != null)
        {
            buildHealth.SuddenDeath();
        }
        else
        {
            AudioManager.instance.Play("Error");
        }

        Cancel();
    }
コード例 #2
0
    private void Explosion()
    {
        Vector3 center           = agent.position;
        float   effectAreaRadius = slime.areaEffectRadius;
        float   attackDamage     = slime.attackDamage;

        List <Transform> enemyTeam = gameManager.GetEnemies(transform.root)
                                     .Where(x => DistanceCalculate(center, x.position) <= effectAreaRadius * effectAreaRadius).ToList();

        for (int i = 0; i < enemyTeam.Count; i++)
        {
            float distanceFromCentre = DistanceCalculate(enemyTeam[i].position, center);
            //explosion constant(higher = lower damage, lower = higher damage received)
            float dmg = attackDamage - distanceFromCentre * 0.15f;
            //Debug.Log("Distance: " + distanceFromCentre + " Damage: " + areaDamage);
            if (dmg < 0)
            {
                continue;                       //if the damage is lower than 0, just skip it
            }
            enemyTeam[i].root.GetComponent <SlimeHealth>().TakeDamage(dmg);
        }
        health.SuddenDeath();
    }
コード例 #3
0
    public void Action()
    {
        if (coolDown <= 0f && health.currentHealth > 0)
        {
            if (slime.isMeleeAttack)
            {
                MeleeAttack(slime.attackDamage);
                if (slime.isInvisible)
                {
                    GetComponent <ShadowAppear>().Appear();
                }
            }
            else if (slime.isRangedAttack)
            {
                photonView.RPC("RangedAttack", PhotonTargets.All, slime.attackDamage);
            }
            else if (slime.isHealing)
            {
                Healing(slime.healPercentage * tarHealth.startHealth);

                if (tarHealth.currentHealth / tarHealth.startHealth > 0.9)
                {
                    movement.FindTheTargetAgain();
                }
            }
            else if (slime.isAreaEffectHealing)
            {
                AreaEffectHealing(slime.healingPoint, slime.areaEffectRadius, target.position);

                if (tarHealth.currentHealth / tarHealth.startHealth > 0.9)
                {
                    movement.FindTheTargetAgain();
                }
            }
            else if (slime.isAreaEffectDamage)
            {
                AreaEffectDamage(slime.attackDamage, slime.areaEffectRadius, target.position, true);
            }
            else if (slime.isExplosion)
            {
                AreaEffectDamage(slime.attackDamage, slime.areaEffectRadius, agent.position, true);
                /* Explosion Effect */
                health.SuddenDeath();
            }
            else if (slime.isMagicalAreaEffectDamage)
            {
                /* Cast time delay */
                if (castTime <= 0f)
                {
                    AreaEffectDamage(slime.attackDamage, slime.areaEffectRadius, target.position, false);
                    castTime = slime.castTime;
                }
                else
                {
                    castTime -= Time.deltaTime;
                    return;
                }
            }
            coolDown = slime.actionCoolDown;
        }
        else
        {
            coolDown -= Time.deltaTime;
        }
    }