コード例 #1
0
ファイル: SplitShot.cs プロジェクト: Oli-26/TDGame
    public override void OnCollisionEnter2D(Collision2D col)
    {
        SplitShotProperties tempProperties = (SplitShotProperties)properties;

        if (col.gameObject.tag == "Enemy" && properties.DamageInstances >= 1)
        {
            col.gameObject.GetComponent <BaseEnemy>().TakeDamage(properties.Damage);

            // Explosive Shots
            if (tempProperties.ExplosiveShots && tempProperties.IsFirstInstance)
            {
                List <GameObject> enemies = FindAllEnemiesInArea(transform.position, 1f);

                foreach (var enemy in enemies)
                {
                    enemy.transform.position += new Vector3(Random.Range(-0.3f, 0.3f), Random.Range(-0.3f, 0.3f), 0f);
                    enemy.GetComponent <BaseEnemy>().Stun(tempProperties.StunLength, tempProperties.StunBonusDamage, tempProperties.StunBonusDamageMultiplier);
                    if (tempProperties.AbilityStripping)
                    {
                        enemy.GetComponent <BaseEnemy>().BlockAbility(tempProperties.StrippingTime);
                    }
                }
            }

            // Acid pools
            if (tempProperties.CreateAcidPool)
            {
                GameObject acid = Instantiate(AcidPool, col.transform.position, Quaternion.identity);
                Destroy(acid, 4f / TimeEffect(1f));
                acid.GetComponent <Acid>().DamagePerSeconds = tempProperties.Damage * tempProperties.AcidPoolDamageMultiplier;
                acid.GetComponent <Acid>().MaxDamage        = tempProperties.AcidPoolMaxDamage;
                acid.GetComponent <Acid>().Slow             = tempProperties.AcidSlow;
                acid.GetComponent <Acid>().SlowPercent      = tempProperties.AcidSlowPercent;
                acid.GetComponent <Acid>().SlowTime         = tempProperties.AcidSlowTime;
            }


            // Spawn Children
            cannotTargetAgain = new List <GameObject>();
            for (int i = 0; i < tempProperties.SplitNumber; i++)
            {
                CreateChildShot();
            }

            if (properties.decrementDamageInstances() == 0)
            {
                Destroy(gameObject);
            }
        }
    }
コード例 #2
0
ファイル: SplitShot.cs プロジェクト: Oli-26/TDGame
    void CreateChildShot()
    {
        GameObject          maybeTarget = FindTarget(out bool targetFound);
        SplitShotProperties p           = (SplitShotProperties)properties;

        if (p.SplitRecurrence && p.IsFirstInstance && targetFound)
        {
            GameObject childShot = Instantiate(gameObject, gameObject.transform.position, Quaternion.identity);
            childShot.GetComponent <SplitShot>().setSplitProperties(p);
            ((SplitShotProperties)childShot.GetComponent <SplitShot>().properties).IsFirstInstance = false;
            childShot.GetComponent <SplitShot>().SetTarget(maybeTarget);
            childShot.GetComponent <SplitShot>().SetIgnoreEnemy(target);
        }
        else
        {
            Vector3    offset    = new Vector3(Random.Range(-0.2f, 0.2f), Random.Range(-0.2f, 0.2f), 0);
            GameObject childShot = Instantiate(babyShot, gameObject.transform.position, Quaternion.identity);
            childShot.GetComponent <ShotBasic>().setProperties(new ShotProperties(4f, properties.Damage * ((SplitShotProperties)properties).SplitDamage, 1, false));
            childShot.GetComponent <ShotBasic>().properties.ExplodeOutwards = true;
            childShot.GetComponent <ShotBasic>().SetTarget(targetFound ? maybeTarget : null);
            childShot.GetComponent <ShotBasic>().SetIgnoreEnemy(target);
        }
    }
コード例 #3
0
ファイル: SplitShot.cs プロジェクト: Oli-26/TDGame
    public static SplitShotProperties Duplicate(SplitShotProperties properties)
    {
        SplitShotProperties newProperties = new SplitShotProperties();

        // Base
        newProperties.Speed           = properties.Speed;
        newProperties.Damage          = properties.Damage;
        newProperties.DamageInstances = properties.DamageInstances;
        newProperties.HomingShot      = properties.HomingShot;

        // Upgrade
        ////path 0
        newProperties.SplitNumber     = properties.SplitNumber;
        newProperties.SplitDamage     = properties.SplitDamage;
        newProperties.SplitRecurrence = properties.SplitRecurrence;
        ////path1
        newProperties.ExplosiveShots            = properties.ExplosiveShots;
        newProperties.StunLength                = properties.StunLength;
        newProperties.AbilityStripping          = properties.AbilityStripping;
        newProperties.StrippingTime             = properties.StrippingTime;
        newProperties.StunBonusDamage           = properties.StunBonusDamage;
        newProperties.StunBonusDamageMultiplier = properties.StunBonusDamageMultiplier;

        ////path2
        newProperties.CreateAcidPool           = properties.CreateAcidPool;
        newProperties.AcidPoolDamageMultiplier = properties.AcidPoolDamageMultiplier;
        newProperties.AcidPoolMaxDamage        = properties.AcidPoolMaxDamage;
        newProperties.AcidSlow        = properties.AcidSlow;
        newProperties.AcidSlowPercent = properties.AcidSlowPercent;
        newProperties.AcidSlowTime    = properties.AcidSlowTime;

        //Internal
        newProperties.IsFirstInstance = properties.IsFirstInstance;

        return(newProperties);
    }
コード例 #4
0
ファイル: SplitShot.cs プロジェクト: Oli-26/TDGame
 public void setSplitProperties(SplitShotProperties p)
 {
     this.properties = SplitShotProperties.Duplicate(p);
 }