| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- using UnityEngine;
- /// <summary>
- /// Handles applying upgrades to ball effect definitions.
- /// Creates modified copies of definitions with upgrade values applied.
- /// </summary>
- public static class UpgradeManager
- {
- /// <summary>
- /// Apply current upgrades to a definition and return a modified version.
- /// Creates a temporary modified definition without altering the original asset.
- /// </summary>
- public static BallEffectDefinition ApplyUpgrades(BallEffectDefinition definition, UpgradeState upgrades)
- {
- if (definition == null || upgrades == null)
- return definition;
- // Create a modified copy based on the effect type
- switch (definition.EffectType)
- {
- case BallEffectType.Explosive:
- return ApplyExplosiveUpgrades(definition as ExplosiveHitEffectDefinition, upgrades);
- case BallEffectType.TripleSplit:
- return ApplySplitUpgrades(definition as TripleSplitEffectDefinition, upgrades);
- case BallEffectType.Piercing:
- return ApplyPiercingUpgrades(definition as PiercingEffectDefinition, upgrades);
- case BallEffectType.Homing:
- return ApplyHomingUpgrades(definition as HomingEffectDefinition, upgrades);
- case BallEffectType.Teleport:
- return ApplyTeleportUpgrades(definition as TeleportEffectDefinition, upgrades);
- default:
- return definition;
- }
- }
- private static BallEffectDefinition ApplyExplosiveUpgrades(
- ExplosiveHitEffectDefinition original, UpgradeState upgrades)
- {
- if (original == null)
- return null;
- // Create a runtime copy
- ExplosiveHitEffectDefinition upgraded = ScriptableObject.CreateInstance<ExplosiveHitEffectDefinition>();
- upgraded.name = original.name + " (Upgraded)";
- upgraded.CopyBaseFrom(original);
- // Apply upgrades
- upgraded.SetRadius(original.Radius + upgrades.ExplosiveRadiusBonus);
- upgraded.SetMaxDamageAtCenter(original.MaxDamageAtCenter * upgrades.ExplosiveDamageMultiplier);
- upgraded.SetMinDamageAtEdge(original.MinDamageAtEdge * upgrades.ExplosiveDamageMultiplier);
- return upgraded;
- }
- private static BallEffectDefinition ApplySplitUpgrades(
- TripleSplitEffectDefinition original, UpgradeState upgrades)
- {
- if (original == null)
- return null;
- TripleSplitEffectDefinition upgraded = ScriptableObject.CreateInstance<TripleSplitEffectDefinition>();
- upgraded.name = original.name + " (Upgraded)";
- upgraded.CopyBaseFrom(original);
- upgraded.SetSplitOnlyOnce(original.SplitOnlyOnce);
- upgraded.SetSplitAngle(original.SplitAngle + upgrades.SplitAngleBonus);
- upgraded.SetChildScaleMultiplier(original.ChildScaleMultiplier);
- upgraded.SetChildSpeedMultiplier(original.ChildSpeedMultiplier * upgrades.SplitSpeedMultiplier);
- upgraded.SetChildDamageMultiplier(original.ChildDamageMultiplier * upgrades.SplitDamageMultiplier);
- return upgraded;
- }
- private static BallEffectDefinition ApplyPiercingUpgrades(
- PiercingEffectDefinition original, UpgradeState upgrades)
- {
- if (original == null)
- return null;
- PiercingEffectDefinition upgraded = ScriptableObject.CreateInstance<PiercingEffectDefinition>();
- upgraded.name = original.name + " (Upgraded)";
- upgraded.CopyBaseFrom(original);
- upgraded.SetPierceHits(original.PierceHits + upgrades.PiercingHitsBonus);
- return upgraded;
- }
- private static BallEffectDefinition ApplyHomingUpgrades(
- HomingEffectDefinition original, UpgradeState upgrades)
- {
- if (original == null)
- return null;
- HomingEffectDefinition upgraded = ScriptableObject.CreateInstance<HomingEffectDefinition>();
- upgraded.name = original.name + " (Upgraded)";
- upgraded.CopyBaseFrom(original);
- upgraded.SetTurnRateDegreesPerSecond(original.TurnRateDegreesPerSecond * upgrades.HomingTurnRateMultiplier);
- upgraded.SetRetargetInterval(original.RetargetInterval);
- return upgraded;
- }
- private static BallEffectDefinition ApplyTeleportUpgrades(
- TeleportEffectDefinition original, UpgradeState upgrades)
- {
- if (original == null)
- return null;
- TeleportEffectDefinition upgraded = ScriptableObject.CreateInstance<TeleportEffectDefinition>();
- upgraded.name = original.name + " (Upgraded)";
- upgraded.CopyBaseFrom(original);
- upgraded.SetIntervalSeconds(original.IntervalSeconds);
- upgraded.SetTeleportDistance(original.TeleportDistance * upgrades.TeleportDistanceMultiplier);
- upgraded.SetOverlapCheckRadius(original.OverlapCheckRadius);
- return upgraded;
- }
- }
|