diff --git a/Assets/_Project/Audio/tesla_tower.ogg b/Assets/_Project/Audio/tesla_tower.ogg deleted file mode 100644 index ca9d7f2..0000000 --- a/Assets/_Project/Audio/tesla_tower.ogg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1dfa3589cac3f0e3e5fd6c4ca9f5547650894cd163597772cc62d8bfdac730b -size 38323 diff --git a/Assets/_Project/Audio/tesla_tower.ogg.meta b/Assets/_Project/Audio/tesla_tower.ogg.meta deleted file mode 100644 index 823ae51..0000000 --- a/Assets/_Project/Audio/tesla_tower.ogg.meta +++ /dev/null @@ -1,23 +0,0 @@ -fileFormatVersion: 2 -guid: a0b5d0b15de667604b825f12d39b05a8 -AudioImporter: - externalObjects: {} - serializedVersion: 8 - defaultSettings: - serializedVersion: 2 - loadType: 0 - sampleRateSetting: 0 - sampleRateOverride: 44100 - compressionFormat: 1 - quality: 1 - conversionMode: 0 - preloadAudioData: 0 - platformSettingOverrides: {} - forceToMono: 0 - normalize: 1 - loadInBackground: 0 - ambisonic: 0 - 3D: 1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/_Project/Prefabs/Towers/Tower_TeslaCoil.prefab b/Assets/_Project/Prefabs/Towers/Tower_TeslaCoil.prefab index 959f827..55b8f98 100644 --- a/Assets/_Project/Prefabs/Towers/Tower_TeslaCoil.prefab +++ b/Assets/_Project/Prefabs/Towers/Tower_TeslaCoil.prefab @@ -99,8 +99,6 @@ GameObject: - component: {fileID: 805962841523123163} - component: {fileID: 8853488620519990682} - component: {fileID: 4524938955752569428} - - component: {fileID: 42814861218671054} - - component: {fileID: -2590971686077483651} m_Layer: 0 m_Name: Tower_TeslaCoil m_TagString: Untagged @@ -147,7 +145,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject - GlobalObjectIdHash: 280718094 + GlobalObjectIdHash: 1363936954 InScenePlacedSourceGlobalObjectIdHash: 0 DeferredDespawnTick: 0 Ownership: 1 @@ -224,118 +222,6 @@ MonoBehaviour: arcDuration: 0.12 segmentsPerArc: 6 jitter: 0.2 ---- !u!82 &42814861218671054 -AudioSource: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6482414459531823157} - m_Enabled: 1 - serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} - m_audioClip: {fileID: 0} - m_Resource: {fileID: 0} - m_PlayOnAwake: 0 - m_Volume: 0.5 - m_Pitch: 1 - Loop: 0 - Mute: 0 - Spatialize: 0 - SpatializePostEffects: 0 - Priority: 128 - DopplerLevel: 1 - MinDistance: 1 - MaxDistance: 500 - Pan2D: 0 - rolloffMode: 0 - BypassEffects: 0 - BypassListenerEffects: 0 - BypassReverbZones: 0 - rolloffCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - - serializedVersion: 3 - time: 1 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - panLevelCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - spreadCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - reverbZoneMixCustomCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 ---- !u!114 &-2590971686077483651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6482414459531823157} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: db643146344a08a639133638e4746a33, type: 3} - m_Name: - m_EditorClassIdentifier: Assembly-CSharp::TD.Combat.TeslaTowerFireSound - fireClip: {fileID: 8300000, guid: a0b5d0b15de667604b825f12d39b05a8, type: 3} - minPitch: 0.92 - maxPitch: 1.07 --- !u!1 &7101790219931971190 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs b/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs deleted file mode 100644 index 69de453..0000000 --- a/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs -using UnityEngine; - -namespace TD.Combat -{ - /// - /// Local-only audio for the Tesla Coil tower. Subscribes to - /// and plays a one-shot fire sound - /// on every peer each time the coil discharges. - /// - /// - /// Pure client-side — nothing here is networked. Add additional - /// fields and calls here - /// as the Tesla Coil gains more audio (idle hum, charge-up, etc.). - /// - [RequireComponent(typeof(TowerCombat))] - [RequireComponent(typeof(AudioSource))] - public class TeslaTowerFireSound : MonoBehaviour - { - [Tooltip("Sound played each time the coil discharges.")] - [SerializeField] private AudioClip fireClip; - - [Tooltip("Pitch is randomized within this range each shot to avoid a mechanical loop.")] - [SerializeField] private float minPitch = 0.93f; - [SerializeField] private float maxPitch = 1.07f; - - private TowerCombat combat; - private AudioSource audioSource; - - private void Awake() - { - combat = GetComponent(); - audioSource = GetComponent(); - } - - private void OnEnable() - { - if (combat != null) combat.OnAreaFired += HandleAreaFired; - } - - private void OnDisable() - { - if (combat != null) combat.OnAreaFired -= HandleAreaFired; - } - - private void HandleAreaFired(Vector3[] positions) - { - if (fireClip != null) - { - audioSource.pitch = Random.Range(minPitch, maxPitch); - audioSource.clip = fireClip; - audioSource.Play(); - } - } - } -} diff --git a/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs.meta b/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs.meta deleted file mode 100644 index e944813..0000000 --- a/Assets/_Project/Scripts/Combat/TeslaTowerFireSound.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: db643146344a08a639133638e4746a33 \ No newline at end of file diff --git a/Assets/_Project/Scripts/Combat/TowerCombat.cs b/Assets/_Project/Scripts/Combat/TowerCombat.cs index 657d5f8..1c37234 100644 --- a/Assets/_Project/Scripts/Combat/TowerCombat.cs +++ b/Assets/_Project/Scripts/Combat/TowerCombat.cs @@ -55,7 +55,7 @@ namespace TD.Combat private EnemyHealth currentTarget; // Attack cooldown decrements each server frame. When ≤ 0 and a target - // is in range, the tower fires and the timer resets to 1 / AttacksPerSecond. + // is in range, the tower fires and the timer resets to 1 / FireRate. private float attackCooldown; // Cached on OnNetworkSpawn — avoids GetComponent every Update. @@ -129,7 +129,7 @@ namespace TD.Combat if (!IsServer) return; TowerDefinition def = towerInstance?.Definition; - if (def == null || def.Range <= 0f || def.AttacksPerSecond <= 0f) return; + if (def == null || def.Range <= 0f || def.FireRate <= 0f) return; // Only fire during active gameplay. var ms = MatchState.Instance; @@ -252,7 +252,7 @@ namespace TD.Combat attackCooldown -= Time.deltaTime; if (attackCooldown > 0f) return; - float effectiveFireRate = def.AttacksPerSecond + float effectiveFireRate = def.FireRate * (GetOwnerBuffManager()?.GetMultiplier(BuffStat.AttackSpeed) ?? 1f); attackCooldown = 1f / effectiveFireRate; Fire(def); diff --git a/Assets/_Project/Scripts/Towers/TowerDefinition.cs b/Assets/_Project/Scripts/Towers/TowerDefinition.cs index 3ce1632..24232ad 100644 --- a/Assets/_Project/Scripts/Towers/TowerDefinition.cs +++ b/Assets/_Project/Scripts/Towers/TowerDefinition.cs @@ -107,7 +107,7 @@ namespace TD.Towers public float Range; [Tooltip("Attacks per second.")] - public float AttacksPerSecond; + public float FireRate; [Header("Combat — Area")] [Tooltip("Radius of splash damage around the primary impact point. " + diff --git a/Assets/_Project/Scripts/UI/HUDController.cs b/Assets/_Project/Scripts/UI/HUDController.cs index 96f50ec..2dd0536 100644 --- a/Assets/_Project/Scripts/UI/HUDController.cs +++ b/Assets/_Project/Scripts/UI/HUDController.cs @@ -1290,7 +1290,7 @@ namespace TD.UI { if (def.Damage > 0) AddStatLine($"Damage: {def.Damage}"); if (def.Range > 0) AddStatLine($"Range: {def.Range:0.0}"); - if (def.AttacksPerSecond > 0) AddStatLine($"Fire rate: {def.AttacksPerSecond:0.0}/s"); + if (def.FireRate > 0) AddStatLine($"Fire rate: {def.FireRate:0.0}/s"); if (def.SlowFactor < 1f) AddStatLine($"Slow: {(1f - def.SlowFactor) * 100f:0}%"); } @@ -1427,8 +1427,8 @@ namespace TD.UI if (def.Damage > 0 || def.Range > 0) { ttStats.text = $"DMG: {def.Damage} · Range: {def.Range:0}"; - if (def.AttacksPerSecond > 0) - ttStats.text += $"\nFire rate: {def.AttacksPerSecond:0.0}/s"; + if (def.FireRate > 0) + ttStats.text += $"\nFire rate: {def.FireRate:0.0}/s"; if (def.SlowFactor < 1f) ttStats.text += $"\nSlow: {(1f - def.SlowFactor) * 100f:0}%"; }