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); } } }
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); } }
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); }
public void setSplitProperties(SplitShotProperties p) { this.properties = SplitShotProperties.Duplicate(p); }