chenxin
2020-12-01 944950c86ab3be21c22b7c15039cf2e572efdc90
删除无用代码
6 files renamed
4 files copied
6 files deleted
17 files modified
327324 ■■■■ changed files
Assets/Materials/UI/tileTowerVSMat.mat 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Fire/Effect_Elf_Huo_Hit.prefab 18 ●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Fire/GrowUpTower.prefab 310 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Fire/GrowUpTower_0.prefab 2 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Fire/GrowUpTower_backUp.prefab 43727 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Fire/GrowUpTower_backUp.prefab.meta 9 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/CopyCatTower.prefab 310 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_0 1.prefab 34056 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_0.prefab 38846 ●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_0.prefab.meta patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_1 1.prefab 34056 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_1.prefab 38868 ●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_1.prefab.meta patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_2 1.prefab 34056 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_2.prefab 48352 ●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_2.prefab.meta patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_3 1.prefab 34056 ●●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_3.prefab 19946 ●●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_3.prefab.meta patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_4.prefab 2 ●●● patch | view | raw | blame | history
Assets/Prefabs/Towers/Water/WaterProjectile_4.prefab.meta patch | view | raw | blame | history
Assets/Prefabs/Towers/WoodTower/BlinkTower.prefab 310 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Input/EndlessTowerDefenseKeyboardMouseInput.cs 3 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Input/TowerDefenseKeyboardMouseInput.cs 3 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/Tower.cs 173 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/TowerLevel.cs 78 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs 51 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs 25 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/TowerInfoDisplay.cs 9 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/TowerSpawnButton.cs 24 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/HUD/TowerUI.cs 19 ●●●● patch | view | raw | blame | history
Assets/StreamingAssets/Table/endless_buff.json 2 ●●● patch | view | raw | blame | history
Assets/Materials/UI/tileTowerVSMat.mat
@@ -40,7 +40,7 @@
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MainTex:
        m_Texture: {fileID: 2800000, guid: 93f40a01d57fbff418fc0b54b6ab7d9f, type: 3}
        m_Texture: {fileID: 2800000, guid: 8c9a3d26120e78f40aa4ef9ed23d573c, type: 3}
        m_Scale: {x: 1, y: 1}
        m_Offset: {x: 0, y: 0}
    - _MetallicGlossMap:
Assets/Prefabs/Towers/Fire/Effect_Elf_Huo_Hit.prefab
@@ -58,7 +58,7 @@
  m_Script: {fileID: 11500000, guid: 2952db25fdd244f4a9981e4350b798e2, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  time: 3
  time: 1.2
  death:
    m_PersistentCalls:
      m_Calls: []
@@ -110,7 +110,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 0
  useRigidbodyForVelocity: 1
@@ -4890,7 +4890,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 0
  useRigidbodyForVelocity: 1
@@ -9760,7 +9760,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 0
  useRigidbodyForVelocity: 1
@@ -14630,7 +14630,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 0
  useRigidbodyForVelocity: 1
@@ -19508,7 +19508,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 1
  useRigidbodyForVelocity: 1
@@ -24378,7 +24378,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 1
  useRigidbodyForVelocity: 1
@@ -29248,7 +29248,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 1
  useRigidbodyForVelocity: 1
@@ -34118,7 +34118,7 @@
  ringBufferLoopRange: {x: 0, y: 1}
  looping: 0
  prewarm: 0
  playOnAwake: 1
  playOnAwake: 0
  useUnscaledTime: 0
  autoRandomSeed: 1
  useRigidbodyForVelocity: 1
Assets/Prefabs/Towers/Fire/GrowUpTower.prefab
@@ -1,36 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1241004575684402
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4491171297730104}
  m_Layer: 0
  m_Name: GreenAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4491171297730104
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1241004575684402}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4607948758076226}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1304972810206532
GameObject:
  m_ObjectHideFlags: 0
@@ -64,8 +33,7 @@
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 5, y: 5, z: 5}
  m_Children:
  - {fileID: 4033886752365058}
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -295,279 +263,3 @@
  deathParticleSystemPrefab: {fileID: 198059975614214484, guid: 7a0476686964e41ac8320b7cf37868c2,
    type: 3}
  deathEffectOffset: {x: 0, y: 0, z: 0}
--- !u!1 &1584327446698034
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4169980140215914}
  m_Layer: 0
  m_Name: Bar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4169980140215914
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1584327446698034}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1.4, y: 0.18134856, z: 1}
  m_Children:
  - {fileID: 4491171297730104}
  - {fileID: 4099818628537976}
  m_Father: {fileID: 4033886752365058}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1663573000831476
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4087321752853002}
  - component: {fileID: 23541405159921826}
  - component: {fileID: 33521311580114450}
  m_Layer: 0
  m_Name: Red
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4087321752853002
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4099818628537976}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23541405159921826
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 008790df986e3469285ea0c078de4b7f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33521311580114450
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1699053510457970
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4607948758076226}
  - component: {fileID: 23820400616506566}
  - component: {fileID: 33350661775210590}
  m_Layer: 0
  m_Name: Green
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4607948758076226
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4491171297730104}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23820400616506566
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 1bfcbc6372f4d45f19690ea277e1019f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33350661775210590
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1769573041013492
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4099818628537976}
  m_Layer: 0
  m_Name: RedAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4099818628537976
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1769573041013492}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4087321752853002}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1787721136844666
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4033886752365058}
  - component: {fileID: 114315104238988312}
  m_Layer: 0
  m_Name: HealthBar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4033886752365058
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
  m_LocalPosition: {x: 0, y: 3, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4169980140215914}
  m_Father: {fileID: 4054417465033028}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &114315104238988312
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 5440fde571ec4db4a719f37df8e972f0, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damageableBehaviour: {fileID: 114126723238285906}
  healthBar: {fileID: 4491171297730104}
  backgroundBar: {fileID: 4099818628537976}
  textMesh: {fileID: 0}
  levelQuad: {fileID: 0}
  levelMaterial: []
  showWhenFull: 0
Assets/Prefabs/Towers/Fire/GrowUpTower_0.prefab
@@ -51,8 +51,6 @@
    type: 3}
  UpgradeEffectPrefab: {fileID: 6847503030253729540, guid: f8ec855cfd7e13a4ebb2f2cbb8bbc480,
    type: 3}
  levelDamager: {fileID: 114588164740221456, guid: 9c5d242fe193d0241b17db92e61ab930,
    type: 3}
  levelData: {fileID: 11400000, guid: 67687baaef809441e8b698087793fe51, type: 2}
  Body: {fileID: 438341193421044329}
  AttackBody: {fileID: 6259461163498204177}
Assets/Prefabs/Towers/Fire/GrowUpTower_backUp.prefab
File was deleted
Assets/Prefabs/Towers/Fire/GrowUpTower_backUp.prefab.meta
File was deleted
Assets/Prefabs/Towers/Water/CopyCatTower.prefab
@@ -1,36 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1241004575684402
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4491171297730104}
  m_Layer: 0
  m_Name: GreenAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4491171297730104
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1241004575684402}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4607948758076226}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1304972810206532
GameObject:
  m_ObjectHideFlags: 0
@@ -64,8 +33,7 @@
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 6, y: 6, z: 6}
  m_Children:
  - {fileID: 4033886752365058}
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -295,279 +263,3 @@
  deathParticleSystemPrefab: {fileID: 198059975614214484, guid: 7a0476686964e41ac8320b7cf37868c2,
    type: 3}
  deathEffectOffset: {x: 0, y: 0, z: 0}
--- !u!1 &1584327446698034
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4169980140215914}
  m_Layer: 0
  m_Name: Bar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4169980140215914
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1584327446698034}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1.4, y: 0.18134856, z: 1}
  m_Children:
  - {fileID: 4491171297730104}
  - {fileID: 4099818628537976}
  m_Father: {fileID: 4033886752365058}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1663573000831476
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4087321752853002}
  - component: {fileID: 23541405159921826}
  - component: {fileID: 33521311580114450}
  m_Layer: 0
  m_Name: Red
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4087321752853002
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4099818628537976}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23541405159921826
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 008790df986e3469285ea0c078de4b7f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33521311580114450
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1699053510457970
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4607948758076226}
  - component: {fileID: 23820400616506566}
  - component: {fileID: 33350661775210590}
  m_Layer: 0
  m_Name: Green
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4607948758076226
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4491171297730104}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23820400616506566
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 1bfcbc6372f4d45f19690ea277e1019f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33350661775210590
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1769573041013492
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4099818628537976}
  m_Layer: 0
  m_Name: RedAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4099818628537976
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1769573041013492}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4087321752853002}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1787721136844666
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4033886752365058}
  - component: {fileID: 114315104238988312}
  m_Layer: 0
  m_Name: HealthBar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4033886752365058
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
  m_LocalPosition: {x: 0, y: 3, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4169980140215914}
  m_Father: {fileID: 4054417465033028}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &114315104238988312
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 5440fde571ec4db4a719f37df8e972f0, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damageableBehaviour: {fileID: 114126723238285906}
  healthBar: {fileID: 4491171297730104}
  backgroundBar: {fileID: 4099818628537976}
  textMesh: {fileID: 0}
  levelQuad: {fileID: 0}
  levelMaterial: []
  showWhenFull: 0
Assets/Prefabs/Towers/Water/WaterProjectile_0 1.prefab
File was deleted
Assets/Prefabs/Towers/Water/WaterProjectile_0.prefab
copy from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab copy to Assets/Prefabs/Towers/Water/WaterProjectile_0.prefab
File was copied from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab
Diff too large
Assets/Prefabs/Towers/Water/WaterProjectile_0.prefab.meta
Assets/Prefabs/Towers/Water/WaterProjectile_1 1.prefab
File was deleted
Assets/Prefabs/Towers/Water/WaterProjectile_1.prefab
File was renamed from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab
Diff too large
Assets/Prefabs/Towers/Water/WaterProjectile_1.prefab.meta
Assets/Prefabs/Towers/Water/WaterProjectile_2 1.prefab
File was deleted
Assets/Prefabs/Towers/Water/WaterProjectile_2.prefab
copy from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab copy to Assets/Prefabs/Towers/Water/WaterProjectile_2.prefab
File was copied from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab
Diff too large
Assets/Prefabs/Towers/Water/WaterProjectile_2.prefab.meta
Assets/Prefabs/Towers/Water/WaterProjectile_3 1.prefab
File was deleted
Assets/Prefabs/Towers/Water/WaterProjectile_3.prefab
copy from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab copy to Assets/Prefabs/Towers/Water/WaterProjectile_3.prefab
File was copied from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab
Diff too large
Assets/Prefabs/Towers/Water/WaterProjectile_3.prefab.meta
Assets/Prefabs/Towers/Water/WaterProjectile_4.prefab
copy from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab copy to Assets/Prefabs/Towers/Water/WaterProjectile_4.prefab
File was copied from Assets/Prefabs/Towers/Water/WaterProjectile_4 1.prefab
@@ -18,7 +18,7 @@
  - component: {fileID: 8720903351228000460}
  - component: {fileID: 478004586242557291}
  m_Layer: 17
  m_Name: WaterProjectile_4 1
  m_Name: WaterProjectile_4
  m_TagString: Projectile
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
Assets/Prefabs/Towers/Water/WaterProjectile_4.prefab.meta
Assets/Prefabs/Towers/WoodTower/BlinkTower.prefab
@@ -1,36 +1,5 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1241004575684402
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4491171297730104}
  m_Layer: 0
  m_Name: GreenAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4491171297730104
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1241004575684402}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4607948758076226}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1304972810206532
GameObject:
  m_ObjectHideFlags: 0
@@ -64,8 +33,7 @@
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 5, y: 5, z: 5}
  m_Children:
  - {fileID: 4033886752365058}
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -295,279 +263,3 @@
  deathParticleSystemPrefab: {fileID: 198059975614214484, guid: 7a0476686964e41ac8320b7cf37868c2,
    type: 3}
  deathEffectOffset: {x: 0, y: 0, z: 0}
--- !u!1 &1584327446698034
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4169980140215914}
  m_Layer: 0
  m_Name: Bar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4169980140215914
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1584327446698034}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1.4, y: 0.18134856, z: 1}
  m_Children:
  - {fileID: 4491171297730104}
  - {fileID: 4099818628537976}
  m_Father: {fileID: 4033886752365058}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1663573000831476
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4087321752853002}
  - component: {fileID: 23541405159921826}
  - component: {fileID: 33521311580114450}
  m_Layer: 0
  m_Name: Red
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4087321752853002
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: 0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4099818628537976}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23541405159921826
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 008790df986e3469285ea0c078de4b7f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33521311580114450
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1663573000831476}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1699053510457970
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4607948758076226}
  - component: {fileID: 23820400616506566}
  - component: {fileID: 33350661775210590}
  m_Layer: 0
  m_Name: Green
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4607948758076226
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_LocalRotation: {x: -0.000000020360515, y: 1, z: 0.00000020861623, w: 0.00000030477918}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 4491171297730104}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 180.00002, z: 0}
--- !u!23 &23820400616506566
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
  m_LightProbeUsage: 1
  m_ReflectionProbeUsage: 1
  m_RayTracingMode: 2
  m_RayTraceProcedural: 0
  m_RenderingLayerMask: 1
  m_RendererPriority: 0
  m_Materials:
  - {fileID: 2100000, guid: 1bfcbc6372f4d45f19690ea277e1019f, type: 2}
  m_StaticBatchInfo:
    firstSubMesh: 0
    subMeshCount: 0
  m_StaticBatchRoot: {fileID: 0}
  m_ProbeAnchor: {fileID: 0}
  m_LightProbeVolumeOverride: {fileID: 0}
  m_ScaleInLightmap: 1
  m_ReceiveGI: 1
  m_PreserveUVs: 0
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_StitchLightmapSeams: 0
  m_SelectedEditorRenderState: 3
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingLayer: 0
  m_SortingOrder: 0
  m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &33350661775210590
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1699053510457970}
  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &1769573041013492
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4099818628537976}
  m_Layer: 0
  m_Name: RedAnchor
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4099818628537976
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1769573041013492}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: -0.5, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4087321752853002}
  m_Father: {fileID: 4169980140215914}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1787721136844666
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 4033886752365058}
  - component: {fileID: 114315104238988312}
  m_Layer: 0
  m_Name: HealthBar
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &4033886752365058
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
  m_LocalPosition: {x: 0, y: 3, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 4169980140215914}
  m_Father: {fileID: 4054417465033028}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &114315104238988312
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 1787721136844666}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 5440fde571ec4db4a719f37df8e972f0, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damageableBehaviour: {fileID: 114126723238285906}
  healthBar: {fileID: 4491171297730104}
  backgroundBar: {fileID: 4099818628537976}
  textMesh: {fileID: 0}
  levelQuad: {fileID: 0}
  levelMaterial: []
  showWhenFull: 0
Assets/Scripts/TowerDefense/Input/EndlessTowerDefenseKeyboardMouseInput.cs
@@ -110,15 +110,12 @@
                    if (UnityInput.GetKeyDown(key))
                    {
                        Tower controller = EndlessLevelManager.instance.TowerLibrary[key - KeyCode.Alpha1];
                        if (EndlessLevelManager.instance.Currency.CanAfford(controller.purchaseCost))
                        {
                            if (m_GameUI.isBuilding)
                            {
                                m_GameUI.CancelGhostPlacement();
                            }
                            EndlessGameUI.instance.SetToBuildMode(controller);
                            EndlessGameUI.instance.TryMoveGhost(InputController.instance.basicMouseInfo);
                        }
                        break;
                    }
                }
Assets/Scripts/TowerDefense/Input/TowerDefenseKeyboardMouseInput.cs
@@ -110,15 +110,12 @@
                    if (UnityInput.GetKeyDown(key))
                    {
                        Tower controller = LevelManager.instance.towerLibrary[key - KeyCode.Alpha1];
                        if (LevelManager.instance.currency.CanAfford(controller.purchaseCost))
                        {
                            if (m_GameUI.isBuilding)
                            {
                                m_GameUI.CancelGhostPlacement();
                            }
                            GameUI.instance.SetToBuildMode(controller);
                            GameUI.instance.TryMoveGhost(InputController.instance.basicMouseInfo);
                        }
                        break;
                    }
                }
Assets/Scripts/TowerDefense/Towers/Tower.cs
@@ -1,5 +1,4 @@
using KTGMGemClient;
using System.Collections;
using System;
using ActionGameFramework.Health;
using Core.Utilities;
@@ -38,6 +37,7 @@
    public class Tower : Targetable
    {
        public readonly float INSCENE_TU_DAMAGE = 30f;
        public static readonly int MAX_LEVEL = 4;
        /// <summary>
@@ -59,12 +59,8 @@
        /// 当前塔防对应的MonsterMaterial,自身和对方显示不同的Mat.
        /// </summary>
        public Material materialMonsterSelf;
        public Material materialMonsterOppo;
        /// <summary>
        /// 0 空状态  1 等待状态  2 攻击状态.
        /// </summary>
        protected int curActionState = 0;
        public Material materialMonsterOppo;
        /// <summary>
        /// 塔防对应的充能状态.
@@ -405,26 +401,6 @@
            }
        }
        /// <summary>
        /// This function is called when the object becomes enabled and active.
        /// </summary>
        void OnEnable()
        {
            // if (bulletCtl != null)
            // {
            //     Debug.Log("打开了bulletCtl");
            //     bulletCtl.gameObject.SetActive(true);
            // }
            // if (energyCtl != null)
            // {
            //     Debug.Log("打开了energyCtl");
            //     energyCtl.gameObject.SetActive(true);
            // }
        }
        public void CheckCtrl()
        {
            if (bulletCtl != null)
@@ -461,44 +437,6 @@
        }
        /// <summary>
        /// 初始化当前塔防的局内升级,lvl从1开始.
        /// </summary>
        /// <param name="lvl"></param>
        public void initInSceneTowerLevel(int lvl)
        {
            inSceneTowerLevel = lvl;
            if (lvl <= 1)
            {
                ResetInSceneTowerLevel();
                return;
            }
            // 设置攻击数据的加强,暂时是测试数据,后面需要读取表格数据处理:
            float damageAdd = 0;
            // float damageAdd = (inSceneTowerLevel - 1) * INSCENE_TU_DAMAGE;
            for (int ti = 0; ti < levels.Length; ti++)
            {
                if (levels[ti].levelDamager)
                {
                    levels[ti].levelDamager.doubleHit = bDoubleHitElit;
                    levels[ti].levelDamager.inSceneUpGradeDamage = damageAdd;
                }
            }
        }
        protected void ResetInSceneTowerLevel()
        {
            for (int ti = 0; ti < levels.Length; ti++)
            {
                if (levels[ti].levelDamager)
                {
                    levels[ti].levelDamager.inSceneUpGradeDamage = 0;
                    levels[ti].levelDamager.doubleHit = bDoubleHitElit;
                }
            }
            return;
        }
        /// <summary>
        /// 升级当前塔防的局内等级,需要播放相关的特效
        /// </summary>
        public void upGradeInSceneTL()
@@ -507,16 +445,6 @@
            // 设置攻击数据的加强,暂时是测试数据,后面需要读取表格数据处理:
            float damageAdd = inSceneTowerLevel * INSCENE_TU_DAMAGE;
            for (int ti = 0; ti < levels.Length; ti++)
            {
                if (levels[ti].levelDamager)
                {
                    levels[ti].levelDamager.inSceneUpGradeDamage = damageAdd;
                    levels[ti].levelDamager.towerName = name;
                    levels[ti].levelDamager.bSet = true;
                }
            }
            Debug.Log("Upgrade Tower name is:" + name);
@@ -543,14 +471,6 @@
        public IPlacementArea placementArea { get; private set; }
        /// <summary>
        /// The purchase cost of the tower
        /// </summary>
        public int purchaseCost
        {
            get { return levels[0].cost; }
        }
        /// <summary>
        /// The event that fires off when a player deletes a tower
        /// </summary>
        public Action towerDeleted;
@@ -559,16 +479,6 @@
        /// The event that fires off when a tower has been destroyed
        /// </summary>
        public Action towerDestroyed;
        /// <summary>
        /// 放置到目标位置
        /// </summary>
        /// <param name="destination"></param>
        public virtual void SetToDestination(IntVector2 destination)
        {
            gridPosition = destination;
            transform.position = placementArea.GridToWorld(destination, dimensions);
        }
        /// <summary>
        /// Provide the tower with data to initialize with
@@ -588,38 +498,18 @@
            }
            SetLevel(lvl);
            if (LevelManager.instanceExists)
            {
                LevelManager.instance.levelStateChanged += OnLevelStateChanged;
            }
            else if (EndlessLevelManager.instanceExists)
                EndlessLevelManager.instance.LevelStateChanged += OnLevelStateChanged;
            // 查找Targetter:
            Targetter target = GetComponentInChildren<Targetter>();
            if (target)
            {
                target.bOpponent = opponentSide;
            }
            else
                Debug.Log("在当前的Tower中找不到Targetter.");
            //
            // 初始化当前的局内Tower等级数据
            initInSceneTowerLevel(SceneTowerLvl.getInSceneTowerLvl(towerName));
        }
        /// <summary>
        /// Provides information on the cost to upgrade
        /// </summary>
        /// <returns>Returns -1 if the towers is already at max level, other returns the cost to upgrade</returns>
        public int GetCostForNextLevel()
        {
            if (isAtMaxLevel)
            {
                return -1;
            }
            return levels[currentLevel + 1].cost;
        }
        /// <summary>
@@ -645,37 +535,6 @@
        {
            // Invoke base kill method
            Kill();
        }
        /// <summary>
        /// Provides the value recived for selling this tower
        /// </summary>
        /// <returns>A sell value of the tower</returns>
        public int GetSellLevel()
        {
            return GetSellLevel(currentLevel);
        }
        /// <summary>
        /// Provides the value recived for selling this tower of a particular level
        /// </summary>
        /// <param name="level">Level of tower</param>
        /// <returns>A sell value of the tower</returns>
        public int GetSellLevel(int level)
        {
            // sell for full price if waves haven't started yet
            if (LevelManager.instanceExists && LevelManager.instance.levelState == LevelState.Building
                || EndlessLevelManager.instanceExists && EndlessLevelManager.instance.EndlessLeveltate == LevelState.Building)
            {
                int cost = 0;
                for (int i = 0; i <= level; i++)
                {
                    cost += levels[i].cost;
                }
                return cost;
            }
            return levels[currentLevel].sell;
        }
        /// <summary>
@@ -737,9 +596,6 @@
        public override void Remove()
        {
            base.Remove();
            // 清空局内升级数据:
            ResetInSceneTowerLevel();
            attackRise = 0.0f;
            placementArea.Clear(gridPosition, dimensions);
            Destroy(gameObject);
@@ -779,10 +635,6 @@
            // initialize TowerLevel
            currentTowerLevel.Initialize(this, enemyLayerMask, configuration.alignmentProvider);
            // health data
            ScaleHealth();
            //
            // disable affectors
            LevelState levelState = LevelState.Intro;
            if (LevelManager.instanceExists)
@@ -792,25 +644,6 @@
            bool initialise = levelState == LevelState.AllEnemiesSpawned || levelState == LevelState.SpawningEnemies;
            initialise = false;
            currentTowerLevel.SetAffectorState(initialise, gridPosition.x);
        }
        /// <summary>
        /// Scales the health based on the previous health
        /// Requires override when the rules for scaling health on upgrade changes
        /// </summary>
        protected virtual void ScaleHealth()
        {
            configuration.SetMaxHealth(currentTowerLevel.maxHealth);
            if (currentLevel == 0)
            {
                configuration.SetHealth(currentTowerLevel.maxHealth);
            }
            else
            {
                int currentHealth = Mathf.FloorToInt(configuration.normalisedHealth * currentTowerLevel.maxHealth);
                configuration.SetHealth(currentHealth);
            }
        }
        /// <summary>
Assets/Scripts/TowerDefense/Towers/TowerLevel.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
using ActionGameFramework.Health;
using Core.Health;
using KTGMGemClient;
using TowerDefense.Affectors;
@@ -21,24 +20,9 @@
        public TowerPlacementGhost towerGhostPrefab;
        /// <summary>
        /// Build effect gameObject to instantiate on start
        /// </summary>
        //public GameObject buildEffectPrefab;
        /// <summary>
        /// 升级特效
        /// </summary>
        public GameObject UpgradeEffectPrefab;
        /// <summary>
        /// 当前的Level对应的DamagerData.
        /// </summary>
        public Damager levelDamager;
        /// <summary>
        /// Reference to scriptable object with level data on it
        /// </summary>
        public TowerLevelData levelData;
        /// <summary>
        /// The parent tower controller of this tower
@@ -141,55 +125,6 @@
        public LayerMask mask { get; protected set; }
        /// <summary>
        /// Gets the cost value
        /// </summary>
        public int cost
        {
            get { return levelData.cost; }
        }
        /// <summary>
        /// Gets the sell value
        /// </summary>
        public int sell
        {
            get { return levelData.sell; }
        }
        /// <summary>
        /// Gets the max health
        /// </summary>
        public int maxHealth
        {
            get { return levelData.maxHealth; }
        }
        /// <summary>
        /// Gets the starting health
        /// </summary>
        public int startingHealth
        {
            get { return levelData.startingHealth; }
        }
        /// <summary>
        /// Gets the tower description
        /// </summary>
        public string description
        {
            get { return levelData.description; }
        }
        /// <summary>
        /// Gets the tower description
        /// </summary>
        public string upgradeDescription
        {
            get { return levelData.upgradeDescription; }
        }
        /// <summary>
        /// Initialises the Effects attached to this object
        /// </summary>
        public virtual void Initialize(Tower tower, LayerMask enemyMask, IAlignmentProvider alignment)
@@ -201,12 +136,6 @@
                effect.Initialize(alignment, mask);
                effect.towerPtr = tower;
                AttackAffector attackAffector = effect.GetComponent<AttackAffector>();
                // if (attackAffector.projectile != null)
                // {
                //     Damager damager = attackAffector.projectile.gameObject.GetComponent<Damager>();
                //     damager.TowerAttributeId = tower.attributeId;
                // }
            }
            m_ParentTower = tower;
            Transform starTs = transform.Find("Star");
@@ -214,11 +143,8 @@
            starTs.localRotation = Quaternion.Euler(60, 180, 0);
        }
        Vector3 normalScale;
        private void Awake()
        {
            normalScale = new Vector3(1.5f, 1.5f, 1.5f);
            canPlaceMesh.enabled = false;
        }
@@ -304,7 +230,6 @@
            }
        }
        /// <summary>
        /// Returns a list of affectors that implement ITowerRadiusVisualizer
        /// </summary>
@@ -350,10 +275,9 @@
        {
        }
        /// <summary>
        /// 获取当前TowerLevel对应的AttackRise.
        /// </summary>
        /// /// </summary>
        public float attackRise { get { return m_ParentTower.attackRise; } }
        public void OnAfterDeserialize()
Assets/Scripts/TowerDefense/UI/HUD/EndlessGameUI.cs
@@ -1178,7 +1178,7 @@
            }
            else if (isFreeAttackGrid(pointerInfo) && !bSkill)
            {
                if (!TryPlaceTower(pointerInfo, false, true))
                if (!TryPlaceTower(pointerInfo, false))
                {
                    CancelPlaceTower(pointerInfo);
                    Debug.Log("这里需要返回原位");
@@ -1409,7 +1409,7 @@
        /// Attempt to position a tower at the given location
        /// </summary>
        /// <param name="pointerInfo">The pointer we're using to position the tower</param>
        public bool TryPlaceTower(PointerInfo pointerInfo, bool force = false, bool zeroCost = false)
        public bool TryPlaceTower(PointerInfo pointerInfo, bool force = false)
        {
            UIPointer pointer = WrapPointer(pointerInfo);
@@ -1420,7 +1420,7 @@
                return false;
            }
            return BuyTower(pointer, force, zeroCost);
            return BuyTower(pointer, force);
        }
        /// <summary>
@@ -1524,12 +1524,7 @@
            {
                return;
            }
            int upgradeCost = currentSelectedTower.GetCostForNextLevel();
            bool successfulUpgrade = EndlessLevelManager.instance.Currency.TryPurchase(upgradeCost);
            if (successfulUpgrade)
            {
                currentSelectedTower.UpgradeTower();
            }
            DeselectTower();
        }
@@ -1586,15 +1581,10 @@
            {
                throw new InvalidOperationException("Selected Tower is null");
            }
            int sellValue = currentSelectedTower.GetSellLevel();
            if (EndlessLevelManager.instanceExists && sellValue > 0)
            {
                EndlessLevelManager.instance.Currency.AddCurrency(sellValue);
                currentSelectedTower.Sell();
                // 从列表中删除Tower.
                delTower(currentSelectedTower);
            }
            DeselectTower();
        }
@@ -1614,12 +1604,7 @@
            {
                return;
            }
            int cost = m_CurrentTower.controller.purchaseCost;
            bool successfulPurchase = EndlessLevelManager.instance.Currency.TryPurchase(cost);
            if (successfulPurchase)
            {
                PlaceTower();
            }
        }
        /// <summary>
@@ -1629,7 +1614,7 @@
        /// Throws exception when not in a build mode or when tower is not a valid position
        /// </exception>
        /// </summary>
        public bool BuyTower(UIPointer pointer, bool force = false, bool zeroCost = false)
        public bool BuyTower(UIPointer pointer, bool force = false)
        {
            if (!isBuilding) return false;
@@ -1678,10 +1663,7 @@
                return false;
            }
            int cost = m_CurrentTower.controller.purchaseCost;
            if (zeroCost)
                cost = 0;
            bool successfulPurchase = EndlessLevelManager.instance.Currency.TryPurchase(cost);
            bool successfulPurchase = EndlessLevelManager.instance.Currency.TryPurchase(0);
            if (successfulPurchase)
            {
                PlaceGhost(pointer);
@@ -1697,27 +1679,6 @@
        public void PlayUpgradeEffect(Tower newTower)
        {
            newTower.currentTowerLevel.PlayUpGradeEffect();
            // GameObject effect = TowerUpgradeEffectPrefab;
            // if (newTower.towerFeature == EFeatureTower.NULL)
            // {
            //     string path = $"UI/ToBattle_{newTower.attributeId}";
            //     GameObject prefab = Resources.Load<GameObject>(path);
            //     effect = Instantiate(prefab);
            // }
            // // 在sTower的位置播放升级特效
            // GameObject obj = Instantiate(effect);
            // obj.transform.position = newTower.transform.position;
            // Vector3 pos = obj.transform.position;
            // pos.y += 5f;
            // obj.transform.position = pos;
            // ParticleSystem ps = obj.GetComponent<ParticleSystem>();
            // if (ps == null)
            //     ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>();
            // ps.Play();
            // Destroy(obj, ps.main.duration);
        }
        /// <summary>
@@ -1776,7 +1737,7 @@
            if (m_CurrentTower == null || m_CurrentArea == null)
                return false;
            return EndlessLevelManager.instance.Currency.CanAfford(m_CurrentTower.controller.purchaseCost);
            return true;
        }
        /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/EndlessRandomTower.cs
@@ -14,8 +14,6 @@
    // 当前类所在的Btn.
    public Button randomBtn;
    //public Button skillBtn;
    /// <summary>
    /// 购买二级宝石的按钮贴图.
    /// </summary>
@@ -77,7 +75,6 @@
        bSetBuyLvlUp = false;
        bCdTimeStart = false;
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        //skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
        UpdateDescDisplay();
    }
@@ -86,28 +83,20 @@
        int minLevel = Mathf.Min(EndlessGameUI.instance.MinLevel, 1);
        NormalDesc.text = $"购买{minLevel + 1}级宝石";
        //SkillDesc.text = $"购买{minLevel + 1}级技能宝石";
    }
    public void ChangeBtnClickNormal()
    {
        randomBtn.onClick.RemoveAllListeners();
        //skillBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.NULL); });
        //skillBtn.onClick.AddListener(delegate () { onClick(EFeatureTower.Skill_Bomb); });
    }
    public void ChangeBtnClick()
    {
        randomBtn.onClick.RemoveAllListeners();
        //skillBtn.onClick.RemoveAllListeners();
        randomBtn.onClick.AddListener(() =>
        {
            AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
        });
        // skillBtn.onClick.AddListener(() =>
        // {
        //     AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
        // });
    }
    /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/GameUI.cs
@@ -1150,13 +1150,7 @@
            {
                return;
            }
            int upgradeCost = currentSelectedTower.GetCostForNextLevel();
            bool successfulUpgrade = LevelManager.instance.currency.TryPurchase(upgradeCost);
            if (successfulUpgrade)
            {
                currentSelectedTower.UpgradeTower();
            }
            //towerUI.Hide();
            DeselectTower();
        }
@@ -1214,15 +1208,10 @@
            {
                throw new InvalidOperationException("Selected Tower is null");
            }
            int sellValue = currentSelectedTower.GetSellLevel();
            if (LevelManager.instanceExists && sellValue > 0)
            {
                LevelManager.instance.currency.AddCurrency(sellValue);
                currentSelectedTower.Sell();
                // 从列表中删除Tower.
                delTower(currentSelectedTower);
            }
            DeselectTower();
        }
@@ -1242,12 +1231,7 @@
            {
                return;
            }
            int cost = m_CurrentTower.controller.purchaseCost;
            bool successfulPurchase = LevelManager.instance.currency.TryPurchase(cost);
            if (successfulPurchase)
            {
                PlaceTower();
            }
        }
        /// <summary>
@@ -1312,14 +1296,7 @@
                CancelGhostPlacement();
                return;
            }
            int cost = m_CurrentTower.controller.purchaseCost;
            if (zeroCost)
                cost = 0;
            bool successfulPurchase = LevelManager.instance.currency.TryPurchase(cost);
            if (successfulPurchase)
            {
                PlaceGhost(pointer);
            }
        }
        /// <summary>
@@ -1433,7 +1410,7 @@
            {
                return false;
            }
            return LevelManager.instance.currency.CanAfford(m_CurrentTower.controller.purchaseCost);
            return true;
        }
        /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/TowerInfoDisplay.cs
@@ -74,18 +74,9 @@
            }
            TowerLevel towerLevel = tower.levels[levelOfTower];
            DisplayText(towerName, tower.towerName);
            DisplayText(description, towerLevel.description);
            DisplayText(dps, towerLevel.GetTowerDps().ToString("f2"));
            DisplayText(health, string.Format("{0}/{1}", tower.configuration.currentHealth, towerLevel.maxHealth));
            DisplayText(level, (levelOfTower + 1).ToString());
            DisplayText(dimensions, string.Format("{0}, {1}", tower.dimensions.x, tower.dimensions.y));
            if (levelOfTower + 1 < tower.levels.Length)
            {
                DisplayText(upgradeCost, tower.levels[levelOfTower + 1].cost.ToString());
            }
            int sellValue = tower.GetSellLevel(levelOfTower);
            DisplayText(sellPrice, sellValue.ToString());
        }
        /// <summary>
Assets/Scripts/TowerDefense/UI/HUD/TowerSpawnButton.cs
@@ -83,8 +83,6 @@
            if (towerData.levels.Length > 0)
            {
                TowerLevel firstTower = towerData.levels[0];
                buttonText.text = firstTower.cost.ToString();
                towerIcon.sprite = firstTower.levelData.icon;
            }
            else
            {
@@ -143,17 +141,17 @@
                return;
            }
            // Enable button
            if (m_Currency.CanAfford(m_Tower.purchaseCost) && !buyButton.interactable)
            {
                buyButton.interactable = true;
                energyIcon.color = energyDefaultColor;
            }
            else if (!m_Currency.CanAfford(m_Tower.purchaseCost) && buyButton.interactable)
            {
                buyButton.interactable = false;
                energyIcon.color = energyInvalidColor;
            }
            // // Enable button
            // if (m_Currency.CanAfford(m_Tower.purchaseCost) && !buyButton.interactable)
            // {
            //     buyButton.interactable = true;
            //     energyIcon.color = energyDefaultColor;
            // }
            // else if (!m_Currency.CanAfford(m_Tower.purchaseCost) && buyButton.interactable)
            // {
            //     buyButton.interactable = false;
            //     energyIcon.color = energyInvalidColor;
            // }
        }
    }
}
Assets/Scripts/TowerDefense/UI/HUD/TowerUI.cs
@@ -74,8 +74,6 @@
            m_Tower = towerToShow;
            AdjustPosition();
            int sellValue = m_Tower.GetSellLevel();
            ///
            // TEST COED TO DELETE:
            if( sellButton != null)
            {
@@ -97,23 +95,11 @@
            m_Canvas.enabled = true;
            ///
            if (sellButton != null)
            {
                sellButton.gameObject.SetActive(sellValue > 0);
            }
            if (upgradeButton != null)
            {
                upgradeButton.interactable =
                    LevelManager.instance.currency.CanAfford(m_Tower.GetCostForNextLevel());
                upgradeButton.interactable = true;
                bool maxLevel = m_Tower.isAtMaxLevel;
                upgradeButton.gameObject.SetActive(!maxLevel);
                if (!maxLevel)
                {
                    upgradeDescription.text =
                        m_Tower.levels[m_Tower.currentLevel + 1].upgradeDescription.ToUpper();
                }
            }
            LevelManager.instance.currency.currencyChanged += OnCurrencyChanged;
            towerInfoDisplay.Show(towerToShow);
@@ -245,8 +231,7 @@
        {
            if (m_Tower != null && upgradeButton != null)
            {
                upgradeButton.interactable =
                    LevelManager.instance.currency.CanAfford(m_Tower.GetCostForNextLevel());
                upgradeButton.interactable = true;
            }
        }
Assets/StreamingAssets/Table/endless_buff.json
@@ -1 +1 @@
[["1","低级火灵之力",[2,1],[1,10,0],"-1","增加全体火精灵10%攻击力","6","8",10001,1,"99"],["2","低级水灵之力",[2,2],[1,20,0],-1,"增加全体水精灵20%攻击力",6,8,10002,1,"99"],["3","低级木灵之力",[2,3],[1,15,0],-1,"增加全体木精灵15%攻击力",6,8,10003,1,"99"],["4","攻击力增加",[1,0],[1,8,0],"-1","增加全体8%攻击力","0",5,"10005","1","99"],["5","意外收获",[0],[2,200,0],0,"增加200金币","0","5","10007","1","99"],["6","精灵魔盒",[0],[3,2,200],0,"随机获得一个2级精灵","2","4",10006,"1","10"],["7","暴击增加",[1,0],[5,50,0],-1,"全体暴击率+5%","0","3","10021","1","3"],["8","爆伤增加",[1,0],[6,80,0],-1,"全体暴击伤害+8%","0","3","10022","1","2"],["9","火灵之力",[2,1],[1,15,0],-1,"增加全体火精灵15%攻击力",9,12,10001,2,"99"],["10","水灵之力",[2,2],[1,40,0],-1,"增加全体水精灵40%攻击力",9,12,10002,2,"99"],["11","木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力",9,12,10003,2,"99"],["12","精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,"10005",2,1],["13","飞来横财",[0],[2,400,0],0,"增加400金币","6","8","10008","2","99"],["14","超级精灵魔盒",[0],[3,3,400],0,"随机获得一个3级精灵","5","7",10006,"2","10"],["15","暴击增加",[1,0],[5,100,0],-1,"全体暴击率+10%","4","7","10021","2","3"],["16","爆伤增加",[1,0],[6,150,0],-1,"全体暴击伤害+15%","4","7","10022","2","2"],["17","攻速增加",[1,0],[4,0.1,0.5],"-1","全体攻速+10%","0","5","10023","2","1"],["18","弹夹扩容",[3,109],[7,2,0],-1,"玉米精灵高能子弹+1","6",99,"10016","2","1"],["19","爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%","6",99,"10026","2","1"],["20","高级火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力",13,"16","10001",3,"99"],["21","高级水灵之力",[2,2],[1,55,0],-1,"增加全体水精灵55%攻击力",13,"16","10002",3,"99"],["22","高级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力",13,"16","10003",3,"99"],["23","特级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力","17","99","10001","4","0"],["24","特级水灵之力",[2,2],[1,70,0],-1,"增加全体水精灵70%攻击力","17","99","10002","4","0"],["25","特级木灵之力",[2,3],[1,60,0],-1,"增加全体木精灵60%攻击力","17","99","10003","4","0"],["26","狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],["27","攻速增加_水",[2,2],[4,0.3,0.5],-1,"水精灵攻速+30%","6",99,"10019",3,"2"],["28","攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%",6,99,"10017",3,"2"],["29","暴击_木",[3,109],[5,300,0],-1,"木系精灵暴击率+30%",6,99,"10015",3,"2"],["30","暴怒_木",[3,109],[6,350,0],-1,"木系精灵暴击伤害+35%",6,99,"10014",3,"2"],["31","暴击_火",[3,101],[5,100,0],-1,"火系精灵暴击率+10%",6,99,"10012",3,"3"],["32","暴怒_火",[3,101],[6,200,0],-1,"火系精灵暴击伤害+20%",6,99,"10011",3,"2"],["33","超级弹夹",[3,109],[7,3,0],-1,"玉米精灵高能子弹+2","9",99,"10016","4","1"],["34","超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","9",99,"10026","4","1"],["35","技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",6,99,"10005",3,"4"],["36","快速蓄能",[3,109],[11,0.3,0.8],-1,"玉米精灵蓄力时间-30%","7",99,"10018","4","3"],["37","中大奖",[0],[2,800,0],0,"增加800金币","9",99,"10010","3","99"],["38","特级精灵魔盒",[0],[3,4,800],0,"随机获得一个4级精灵","11","99","10006","4","2"]]
[["1","低级火灵之力",[2,1],[1,10,0],"-1","增加全体火精灵10%攻击力","6","8",10001,1,"99"],["2","低级水灵之力",[2,2],[1,20,0],-1,"增加全体水精灵20%攻击力",6,8,10002,1,"99"],["3","低级木灵之力",[2,3],[1,15,0],-1,"增加全体木精灵15%攻击力",6,8,10003,1,"99"],["4","攻击力增加",[1,0],[1,8,0],"-1","增加全体8%攻击力","0",5,"10005","1","99"],["5","意外收获",[0],[2,200,0],0,"增加200金币","0","5","10007","1","99"],["6","精灵魔盒",[0],[3,2,200],0,"随机获得一个2级精灵","2","4",10006,"1","10"],["7","暴击增加",[1,0],[5,50,0],-1,"全体暴击率+5%","0","3","10021","1","3"],["8","爆伤增加",[1,0],[6,80,0],-1,"全体暴击伤害+8%","0","3","10022","1","2"],["9","火灵之力",[2,1],[1,15,0],-1,"增加全体火精灵15%攻击力",9,12,10001,2,"99"],["10","水灵之力",[2,2],[1,40,0],-1,"增加全体水精灵40%攻击力",9,12,10002,2,"99"],["11","木灵之力",[2,3],[1,30,0],-1,"增加全体木精灵30%攻击力",9,12,10003,2,"99"],["12","精灵之力",[1,0],[1,50,0],2,"2波增加全体精灵50%攻击力","99",99,"10005",2,1],["13","飞来横财",[0],[2,400,0],0,"增加400金币","6","8","10008","2","99"],["14","超级精灵魔盒",[0],[3,3,400],0,"随机获得一个3级精灵","5","7",10006,"2","10"],["15","暴击增加",[1,0],[5,100,0],-1,"全体暴击率+10%","4","7","10021","2","3"],["16","爆伤增加",[1,0],[6,150,0],-1,"全体暴击伤害+15%","4","7","10022","2","2"],["17","攻速增加",[1,0],[4,0.1,0.5],"-1","全体攻速+10%","0","5","10023","2","1"],["18","弹夹扩容",[3,109],[7,2,0],-1,"玉米精灵高能子弹+1","6",99,"10016","2","1"],["19","爆裂狂怒",[3,101],[9,7,0],-1,"火鸟精灵充能后攻速+35%","6",99,"10026","2","1"],["20","高级火灵之力",[2,1],[1,20,0],-1,"增加全体火精灵20%攻击力",13,"16","10001",3,"99"],["21","高级水灵之力",[2,2],[1,55,0],-1,"增加全体水精灵55%攻击力",13,"16","10002",3,"99"],["22","高级木灵之力",[2,3],[1,40,0],-1,"增加全体木精灵40%攻击力",13,"16","10003",3,"99"],["23","特级火灵之力",[2,1],[1,30,0],-1,"增加全体火精灵30%攻击力","17","99","10001","4","99"],["24","特级水灵之力",[2,2],[1,70,0],-1,"增加全体水精灵70%攻击力","17","99","10002","4","99"],["25","特级木灵之力",[2,3],[1,60,0],-1,"增加全体木精灵60%攻击力","17","99","10003","4","99"],["26","狂暴之力",[1,0],[1,65,0],2,"2波内增加全体精灵65%攻击力","99",99,10005,3,1],["27","攻速增加_水",[2,2],[4,0.3,0.5],-1,"水精灵攻速+30%","6",99,"10019",3,"2"],["28","攻速增加_木",[2,3],[4,0.2,0.5],-1,"木精灵攻速+20%",6,99,"10017",3,"2"],["29","暴击_木",[3,109],[5,300,0],-1,"木系精灵暴击率+30%",6,99,"10015",3,"2"],["30","暴怒_木",[3,109],[6,350,0],-1,"木系精灵暴击伤害+35%",6,99,"10014",3,"2"],["31","暴击_火",[3,101],[5,100,0],-1,"火系精灵暴击率+10%",6,99,"10012",3,"3"],["32","暴怒_火",[3,101],[6,200,0],-1,"火系精灵暴击伤害+20%",6,99,"10011",3,"2"],["33","超级弹夹",[3,109],[7,3,0],-1,"玉米精灵高能子弹+2","9",99,"10016","4","1"],["34","超级爆裂狂怒",[3,101],[9,9,0],-1,"火鸟精灵充能后攻速+60%","9",99,"10026","4","1"],["35","技能提升",[4,0],[10,1,0],-1,"全体技能等级+1",6,99,"10005",3,"4"],["36","快速蓄能",[3,109],[11,0.3,0.8],-1,"玉米精灵蓄力时间-30%","7",99,"10018","4","3"],["37","中大奖",[0],[2,800,0],0,"增加800金币","9",99,"10010","3","99"],["38","特级精灵魔盒",[0],[3,4,800],0,"随机获得一个4级精灵","11","99","10006","4","2"]]