From ce56b6d829291817feea3940fc75031e027e24d1 Mon Sep 17 00:00:00 2001 From: Ian Woods Date: Tue, 4 Aug 2026 21:47:08 -0700 Subject: [PATCH] smear out blink times so enemies don't blink in clusters --- .../EnemyAbilities/BlinkAbility.asset | 3 +-- .../EnemyAbilities/BlinkAbilityDefinition.cs | 17 +++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/Assets/_Project/Definitions/RunDefinitions/EnemyAbilities/BlinkAbility.asset b/Assets/_Project/Definitions/RunDefinitions/EnemyAbilities/BlinkAbility.asset index cba6d55..ec1b7b5 100644 --- a/Assets/_Project/Definitions/RunDefinitions/EnemyAbilities/BlinkAbility.asset +++ b/Assets/_Project/Definitions/RunDefinitions/EnemyAbilities/BlinkAbility.asset @@ -14,6 +14,5 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::TD.Gameplay.EnemyAbilities.BlinkAbilityDefinition DisplayName: Blink Description: Enemies occasionally teleport a short distance ahead. - IntervalSeconds: 4 + IntervalSeconds: 8 BlinkDistanceMeters: 4 - StartJitterSeconds: 1.5 diff --git a/Assets/_Project/Scripts/Gameplay/EnemyAbilities/BlinkAbilityDefinition.cs b/Assets/_Project/Scripts/Gameplay/EnemyAbilities/BlinkAbilityDefinition.cs index 14f76f6..c00904c 100644 --- a/Assets/_Project/Scripts/Gameplay/EnemyAbilities/BlinkAbilityDefinition.cs +++ b/Assets/_Project/Scripts/Gameplay/EnemyAbilities/BlinkAbilityDefinition.cs @@ -25,25 +25,22 @@ namespace TD.Gameplay.EnemyAbilities [Header("Blink")] [Tooltip("Seconds between blinks.")] [Min(0.1f)] - public float IntervalSeconds = 4f; + public float IntervalSeconds = 8f; [Tooltip("World units to advance along the path per blink.")] [Min(0.1f)] public float BlinkDistanceMeters = 4f; - [Tooltip("Random spread (seconds) added to each enemy's first blink so a wave doesn't " + - "blink in one synchronized block. Applied once, at spawn.")] - [Min(0f)] - public float StartJitterSeconds = 1.5f; - public override void ServerOnSpawn(EnemyAbility instance, int abilityIndex) { - // Seed each enemy's cooldown with a different negative offset so the wave's first - // blink is staggered. Done once, here, rather than on the first tick — a tick-time + // Seed each enemy's cooldown with a random point within the full interval, as if it + // spawned already partway through a cooldown. A small jitter window near zero would + // still let a burst of enemies spawned together sync up and blink as a visible cluster + // every cycle; spreading across the whole interval avoids that regardless of how + // IntervalSeconds is tuned. Done once, here, rather than on the first tick — a tick-time // check would have to distinguish "never started" from "just blinked", and both // states read as a zero timer. - if (StartJitterSeconds > 0f) - instance.TimerFor(abilityIndex) = -Random.Range(0f, StartJitterSeconds); + instance.TimerFor(abilityIndex) = -Random.Range(0f, IntervalSeconds); } public override void ServerTick(EnemyAbility instance, int abilityIndex, float dt)