chenxin
2020-11-07 d35d31d85fd4b827dc37008aef39c019b6a7781d
Merge commit '2940e451058b1af7541ff651f485f33a10e92f7e' into master
4 files added
16 files modified
922 ■■■■■ changed files
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab 3 ●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless/WoodPile.prefab 496 ●●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta 7 ●●●●● patch | view | raw | blame | history
Assets/Scenes/Levels/Battle/Endless.unity 1 ●●●● patch | view | raw | blame | history
Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs 4 ●●●● patch | view | raw | blame | history
Assets/Scripts/Core/Health/DamageableBehaviour.cs 2 ●●● patch | view | raw | blame | history
Assets/Scripts/Data/EndlessPortData.cs 24 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Enum/SpawnAgentType.cs 2 ●●● patch | view | raw | blame | history
Assets/Scripts/Event/EventType.cs 2 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/Agent.cs 2 ●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs 15 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs 114 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs 23 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs 46 ●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs 89 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs 43 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs 25 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs 2 ●●● patch | view | raw | blame | history
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs 11 ●●●●● patch | view | raw | blame | history
Assets/Resources/Prefabs/Endless/BubbleBomb.prefab
@@ -219,7 +219,6 @@
  bShowDebugNode: 0
  NormalEffect: {fileID: 5386092016719681635}
  ExplodeEffect: {fileID: 1333670259778310432}
  Collider: {fileID: 6659287669452185599}
--- !u!54 &8434816861478773555
Rigidbody:
  m_ObjectHideFlags: 0
@@ -249,7 +248,7 @@
  m_Radius: 2.2
  m_Height: 1
  m_Direction: 1
  m_Center: {x: 0, y: 0.4, z: 0}
  m_Center: {x: 0, y: 0.4, z: -1.94}
--- !u!114 &8434816861478773554
MonoBehaviour:
  m_ObjectHideFlags: 0
Assets/Resources/Prefabs/Endless/WoodPile.prefab
New file
@@ -0,0 +1,496 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &138455136374950083
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 8534711676145704198}
  - component: {fileID: 3143404536626948965}
  - component: {fileID: 8832774425949147379}
  m_Layer: 0
  m_Name: Cube
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &8534711676145704198
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 138455136374950083}
  m_LocalRotation: {x: -0, y: 1, z: -0, w: 0}
  m_LocalPosition: {x: 0, y: 0.053, z: 0}
  m_LocalScale: {x: 1.5999999, y: 1.5999999, z: 1.6}
  m_Children: []
  m_Father: {fileID: 8434816861478773449}
  m_RootOrder: 3
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3143404536626948965
MeshFilter:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 138455136374950083}
  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &8832774425949147379
MeshRenderer:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 138455136374950083}
  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: 94110c9a997a3cf4d971aa75155f5351, 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: 1
  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!1 &8434816860007424699
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 8434816860007424696}
  m_Layer: 11
  m_Name: Targetable
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &8434816860007424696
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816860007424699}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0.5, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 8434816861478773449}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8434816861478773448
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 8434816861478773449}
  - component: {fileID: 8434816861478773452}
  - component: {fileID: 8434816861478773455}
  - component: {fileID: 8434816861478773555}
  - component: {fileID: 7051272566736607782}
  - component: {fileID: 8434816861478773554}
  - component: {fileID: 2476106126470318335}
  - component: {fileID: 652547545057790155}
  - component: {fileID: 2034107896435957072}
  - component: {fileID: 7091940065452968968}
  - component: {fileID: 1083071696881444773}
  m_Layer: 11
  m_Name: WoodPile
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &8434816861478773449
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0.2, z: 0}
  m_LocalScale: {x: 4.5, y: 4.5, z: 4.5}
  m_Children:
  - {fileID: 8434816860007424696}
  - {fileID: 1277171420674534872}
  - {fileID: 9114815543095638400}
  - {fileID: 8534711676145704198}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!195 &8434816861478773452
NavMeshAgent:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_AgentTypeID: 0
  m_Radius: 0.1
  m_Speed: 2
  m_Acceleration: 20
  avoidancePriority: 50
  m_AngularSpeed: 0
  m_StoppingDistance: 0.4
  m_AutoTraverseOffMeshLink: 1
  m_AutoBraking: 1
  m_AutoRepath: 1
  m_Height: 1
  m_BaseOffset: 0
  m_WalkableMask: 7
  m_ObstacleAvoidanceType: 0
--- !u!114 &8434816861478773455
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 4a4f7293b07e4698a4e3b652679f0c75, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  description:
  projectile: {fileID: 0}
  projectilePoints: []
  epicenter: {fileID: 8434816861478773449}
  isMultiAttack: 0
  maxAttackNum: 1
  fireRate: 0
  bWoodAffector: 0
  randomAudioSource: {fileID: 0}
  towerTargetter: {fileID: 7490226013430720439}
  radiusEffectColor: {r: 0, g: 0, b: 0, a: 0}
--- !u!54 &8434816861478773555
Rigidbody:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  serializedVersion: 2
  m_Mass: 1
  m_Drag: 0
  m_AngularDrag: 0.05
  m_UseGravity: 0
  m_IsKinematic: 1
  m_Interpolate: 0
  m_Constraints: 0
  m_CollisionDetection: 0
--- !u!114 &7051272566736607782
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 4eb6b59d40564378ba0b1580a4a9dd85, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  lootDropped: 10
--- !u!114 &8434816861478773554
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 8cf1cc7cb7e6b49f893f609dd57fce01, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damageableBehaviour: {fileID: 0}
  damageScale: 1
--- !u!114 &2476106126470318335
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 7d012ff014d994436a27059a09e8ab64, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  homeBaseAttackChargeTime: 1
--- !u!114 &652547545057790155
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 59d007c1fe5e41c1888e4af3392f8676, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  initialPoolCapacity: 10
--- !u!114 &2034107896435957072
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: fedeb0b3c5e104ea19d0d4599d22ab97, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  damage: 10
  damageMulti: 1
  towerName:
  bSet: 0
  chanceToSpawnCollisionPrefab: 1
  collisionObj: {fileID: 0}
  alignment:
    unityObjectReference: {fileID: 11400000, guid: 9dc4735bf52f547d59ebe1007e9a0e7f,
      type: 2}
--- !u!114 &7091940065452968968
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 74cdda61650491a4fb62ef5cac504f6e, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  configuration:
    maxHealth: 60
    startingHealth: 60
    alignment:
      unityObjectReference: {fileID: 11400000, guid: 9dc4735bf52f547d59ebe1007e9a0e7f,
        type: 2}
  targetTransform: {fileID: 0}
  bElit: 0
  bBoss: 0
  poisonTex: {fileID: 0}
  frozenTex: {fileID: 0}
  commonTex: {fileID: 0}
  PoisonParticle: {fileID: 0}
  PoisonEndParticle: {fileID: 0}
  SlowDownParticle: {fileID: 0}
  FrostParticle: {fileID: 0}
  appliedEffectOffset: {x: 0, y: 0, z: 0}
  appliedEffectScale: 1
  healthBar: {fileID: 9222104150701355608}
  spawnParticle: {fileID: 0}
  bShowDebugNode: 0
--- !u!65 &1083071696881444773
BoxCollider:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8434816861478773448}
  m_Material: {fileID: 0}
  m_IsTrigger: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Size: {x: 1.8, y: 1.8, z: 0.61}
  m_Center: {x: 0, y: 0, z: -1.15}
--- !u!1 &8585545065585961043
GameObject:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1277171420674534872}
  - component: {fileID: 7490226013430720439}
  - component: {fileID: 833589883818491094}
  m_Layer: 0
  m_Name: Targetter
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!4 &1277171420674534872
Transform:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8585545065585961043}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 8434816861478773449}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7490226013430720439
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8585545065585961043}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: d0e4035901ee40bba7c0866d2c6338a1, type: 3}
  m_Name:
  m_EditorClassIdentifier:
  turret: {fileID: 0}
  searchEnemyFunc: 1
  turretXRotationRange: {x: 0, y: 359}
  onlyYTurretRotation: 1
  searchRate: 0
  idleRotationSpeed: 1
  idleCorrectionTime: 0.2
  attachedCollider: {fileID: 833589883818491094}
  idleWaitTime: 2
--- !u!135 &833589883818491094
SphereCollider:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 8585545065585961043}
  m_Material: {fileID: 0}
  m_IsTrigger: 1
  m_Enabled: 1
  serializedVersion: 2
  m_Radius: 0
  m_Center: {x: 0, y: 0, z: 0}
--- !u!1001 &4198952192164864370
PrefabInstance:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 8434816861478773449}
    m_Modifications:
    - target: {fileID: 4912913822749028214, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_Name
      value: HealthBar
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalPosition.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalPosition.y
      value: 1.5
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalPosition.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalRotation.x
      value: 0.7071068
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalRotation.y
      value: -0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalRotation.z
      value: -0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalRotation.w
      value: 0.7071068
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_RootOrder
      value: 2
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: m_LocalEulerAnglesHint.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 5025685238251000618, guid: 3d8c8419dca866149b46e4ab68d15496,
        type: 3}
      propertyPath: damageableBehaviour
      value:
      objectReference: {fileID: 7091940065452968968}
    m_RemovedComponents: []
  m_SourcePrefab: {fileID: 100100000, guid: 3d8c8419dca866149b46e4ab68d15496, type: 3}
--- !u!4 &9114815543095638400 stripped
Transform:
  m_CorrespondingSourceObject: {fileID: 4916796871218370802, guid: 3d8c8419dca866149b46e4ab68d15496,
    type: 3}
  m_PrefabInstance: {fileID: 4198952192164864370}
  m_PrefabAsset: {fileID: 0}
--- !u!114 &9222104150701355608 stripped
MonoBehaviour:
  m_CorrespondingSourceObject: {fileID: 5025685238251000618, guid: 3d8c8419dca866149b46e4ab68d15496,
    type: 3}
  m_PrefabInstance: {fileID: 4198952192164864370}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 0}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 5440fde571ec4db4a719f37df8e972f0, type: 3}
  m_Name:
  m_EditorClassIdentifier:
Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta
New file
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: debfb40db53346747839fbb2bba8eaf5
PrefabImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scenes/Levels/Battle/Endless.unity
@@ -17463,6 +17463,7 @@
  - {fileID: 2600682549799167283, guid: 49b7c959ca8c2a04fb624bfcc4ae6d70, type: 3}
  - {fileID: 8299866977034198745, guid: 27794bd3f4607d24eb654bc09cab1b4d, type: 3}
  - {fileID: 6638534413219671158, guid: 080168af0fb1a0f48bd653b0def3737e, type: 3}
  - {fileID: 652547545057790155, guid: debfb40db53346747839fbb2bba8eaf5, type: 3}
--- !u!4 &1991275771
Transform:
  m_ObjectHideFlags: 0
Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs
@@ -54,7 +54,7 @@
            var agent = this.gameObject.GetComponent<Agent>();
            if (agent == null)
                return;
            BallisticProjectile ballistic = c.gameObject.GetComponent<BallisticProjectile>();
            if (ballistic.IsHitEnemy)
@@ -68,7 +68,7 @@
            LazyLoad();
            BallisticAttack ballisticAttack = damager.GetComponent<BallisticAttack>();
            ballisticAttack.DealDamage((Targetable)damageableBehaviour);
            ballisticAttack.DealDamage((Targetable)damageableBehaviour, ballisticAttack.attributeId);
            damager.HasDamaged(c.transform.position, damageableBehaviour.configuration.alignmentProvider);
        }
Assets/Scripts/Core/Health/DamageableBehaviour.cs
@@ -114,7 +114,7 @@
        /// <summary>
        /// Fires the removed event
        /// </summary>
        void OnRemoved()
        protected void OnRemoved()
        {
            if (removed != null)
            {
Assets/Scripts/Data/EndlessPortData.cs
@@ -177,6 +177,30 @@
        }
        /// <summary>
        /// 根据关卡等级和波次获得该波次敌人的血量
        /// </summary>
        /// <param name="level"></param>
        /// <param name="wave"></param>
        /// <param name="tunel">赛道</param>
        public static float GetWaveEnemiesHP(int level, int wave, int tunel)
        {
            List<List<EndlessPortConfig>> list = GetLevelWaveData(level);
            List<EndlessPortConfig> waveData = list[wave];
            float hp = 0;
            for (int i = 0; i < waveData.Count; ++i)
            {
                if (waveData[i].Config.tunel == tunel)
                {
                    hp = waveData[i].Config.b_hp;
                    break;
                }
            }
            return hp;
        }
        /// <summary>
        /// 根据关卡等级、波次、赛道获得击杀敌人掉落的奖励列表
        /// </summary>
        /// <param name="level">关卡等级</param>
Assets/Scripts/Enum/SpawnAgentType.cs
@@ -13,7 +13,7 @@
        // 泡泡炸弹,在PVE模式里面,boss技能可以召唤炸弹和木桩等
        BubbleBomb,
        // 召唤木桩
        // 木桩墙壁
        WoodPile
    }
}
Assets/Scripts/Event/EventType.cs
@@ -65,6 +65,8 @@
        EndlessLoseHeart,
        // 爱心为0
        EndlessHeartAllLose,
        // 木桩墙壁被打死
        EndlessWoodPileBeKilled,
    }
}
Assets/Scripts/TowerDefense/Agents/Agent.cs
@@ -401,7 +401,7 @@
        /// 处理Agent的锁定Buf,播放特效,设置速度为零,并时间到达后重设数据。
        /// </summary>
        /// <param name="binfo"></param>
        protected void SetAgentStopBuff(buffinfo binfo)
        protected virtual void SetAgentStopBuff(buffinfo binfo)
        {
            MoveStopTime = binfo.last / 1000;
Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs
@@ -1,3 +1,4 @@
using DG.Tweening;
using Core.Utilities;
using UnityEngine;
@@ -104,7 +105,19 @@
        protected override void Update()
        {
        }
        public override void Initialize()
        {
            this.configuration.bInvincible = true;
            mDefaultScale = this.transform.localScale;
            Sequence agentTweenSeq = DOTween.Sequence();
            var ss = mDefaultScale * 0.3f;
            this.transform.localScale = this.transform.localScale * 0.3f;
            Tweener agScale = this.transform.DOScale(mDefaultScale, 0.3f);
            agentTweenSeq.Append(agScale);
            agentTweenSeq.AppendCallback(beDamageStart);
        }
    }
}
Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs
New file
@@ -0,0 +1,114 @@
using Core.Utilities;
using KTGMGemClient;
using DG.Tweening;
using UnityEngine;
/**
 * 木桩墙壁
 * @Author: chenxin
 * @Date: 2020-11-07 11:13:25
 */
namespace TowerDefense.Agents
{
    public class WoodPileAgent : Agent
    {
        /// <summary>
        /// 外部赋值,唯一标识一个泡泡炸弹代理
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        ///  木桩墙壁收到货塔攻击的额外伤害倍率
        /// </summary>
        public float FireHurtRate { get; set; }
        /// <summary>
        /// Peforms the relevant path update
        /// 执行相关路径更新
        /// </summary>
        protected override void PathUpdate()
        {
        }
        /// <summary>
        /// The behaviour for when the agent has been blocked
        /// 代理被阻止时的行为
        /// </summary>
        protected override void OnPartialPathUpdate()
        {
        }
        protected override void Update()
        {
        }
        /// <summary>
        /// Stops the navMeshAgent and attempts to return to pool
        /// </summary>
        public override void Remove()
        {
            // 统一管理器内删除当前的Agent:
            AgentInsManager.instance.removeAgent(this);
            configuration.SetHealth(0);
            OnRemoved();
            if (m_NavMeshAgent.enabled)
            {
                m_NavMeshAgent.isStopped = true;
            }
            m_NavMeshAgent.enabled = false;
            // 必须要重置数据,不然会有一系列的小Bug.
            this.m_CurrentNode = null;
            m_NextNode = null;
            this.liveID = this.liveID + 1;
            bInDeathAct = false;
            // 删除当前停止特效和状态.
            if (MoveStopTime > 0)
                MoveStopTime = 0.0f;
            Poolable.TryPool(gameObject);
        }
        protected override void SetAgentStopBuff(buffinfo binfo)
        {
            // 本来木桩也不会动
        }
        /// <summary>
        /// Setup all the necessary parameters for this agent from configuration data
        /// </summary>
        public override void Initialize()
        {
            configuration.SetHealth(configuration.maxHealth);
            state = isPathBlocked ? State.OnPartialPath : State.OnCompletePath;
            // 设置一个DOTween队列,让场景内刷出来的Agent有一个变大淡出的效果,此时是无敌效果加持.
            this.configuration.bInvincible = true;
            mDefaultScale = this.transform.localScale;
            Sequence agentTweenSeq = DOTween.Sequence();
            var ss = mDefaultScale * 0.3f;
            this.transform.localScale = this.transform.localScale * 0.3f;
            Tweener agScale = this.transform.DOScale(mDefaultScale, 0.3f);
            agentTweenSeq.Append(agScale);
            agentTweenSeq.AppendCallback(beDamageStart);
            this.nodeMoveUpdate = false;
            // 获取移动速度
            fMoveSpeed = this.m_NavMeshAgent.speed / 2.0f;
        }
        public override void PlayDeath()
        {
            EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, Id);
            Remove();
        }
    }
}
Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 74cdda61650491a4fb62ef5cac504f6e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -36,7 +36,8 @@
        /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理
        /// </summary>
        /// <param name="enemy"></param>
        public void DealDamage(Targetable enemy)
        /// <param name="attributeId">子弹的属性id</param>
        public void DealDamage(Targetable enemy, int attributeId = -1)
        {
            switch ((enemy as Agent).AgentType)
            {
@@ -47,11 +48,31 @@
                    HandleBubbleBomb(enemy);
                    break;
                case SpawnAgentType.WoodPile:
                    HandleWoodPile(enemy, attributeId);
                    break;
            }
        }
        /// <summary>
        /// 处理木桩墙壁收到的伤害
        /// </summary>
        /// <param name="enemy"></param>
        private void HandleWoodPile(Targetable enemy, int id)
        {
            float finalDamage = damager.finalDamage;
            if (id == 10101)
                finalDamage *= (enemy as WoodPileAgent).FireHurtRate;
            int tid = enemy.liveID;
            Vector3 backPos = enemy.position;
            // 这里也可以把碰撞点传进来
            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider);
            EndlessGameUI.instance.generateBloodText(backPos, finalDamage);
        }
        /// <summary>
        /// 处理泡泡炸弹收到的伤害
        /// </summary>
        /// <param name="enemy"></param>
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs
@@ -12,6 +12,9 @@
 */
namespace KTGMGemClient
{
    /// <summary>
    /// 泡泡炸弹配置数据
    /// </summary>
    public class BubbleBombConfig
    {
        public BubbleBombAgent Agent { get; set; }
@@ -81,10 +84,7 @@
    public class BossSkillBubbleBomb : EndlessBossSkill
    {
        public BossSkillBubbleBomb(boss_skill param) : base(param)
        {
            random = new System.Random();
        }
        public BossSkillBubbleBomb(boss_skill param) : base(param) { }
        /// <summary>
        /// 被攻击的次数
@@ -97,8 +97,6 @@
        /// 所有存在于场景中的泡泡炸弹
        /// </summary>
        protected List<BubbleBombConfig> bubbleBombList;
        protected System.Random random;
        /// <summary>
        /// 泡泡炸弹对象池
@@ -118,7 +116,6 @@
        {
            base.ReleaseSkill();
            Debug.Log("--------------------- 泡泡炸弹释放 ---------------------");
            // cx test
            SpawnBubbleBomb();
        }
@@ -159,6 +156,7 @@
                bubbleBomb.AgentType = SpawnAgentType.BubbleBomb;
                bubbleBomb.opponentAgent = false;
                bubbleBomb.Reset();
                bubbleBomb.Initialize();
                // 出生位置
                Vector3 spawnPosition = EndlessLevelManager.instance.GetTunelWorldPosition(tunelIdList[i], (EndlessBossSkillTunelType)SkillData.target[1]);
@@ -176,39 +174,6 @@
                config.MoveSpeed = SkillData.effect[1];
                bubbleBombList.Add(config);
            }
        }
        /// <summary>
        /// 获取赛道列表
        /// </summary>
        protected List<int> GetTunelList()
        {
            List<int> tunelIdList = new List<int>();
            int count = 0;
            // 剩余没有用到的赛道
            List<int> remainList = new List<int>() { 1, 2, 3, 4, 5 };
            for (int i = 0; i < SkillData.tunnel.Count; ++i)
            {
                // 统计6这种类型的数量
                if (SkillData.tunnel[i] == 6)
                {
                    ++count;
                    continue;
                }
                tunelIdList.Add(SkillData.tunnel[i]);
                remainList.Remove(SkillData.tunnel[i]);
            }
            for (int i = 0; i < count; ++i)
            {
                int num = random.Next(remainList.Count);
                tunelIdList.Add(remainList[num]);
                remainList.Remove(remainList[num]);
            }
            return tunelIdList;
        }
        public override void Reset()
@@ -338,6 +303,7 @@
                    if (config.Agent.bInDeathState) return;
                    ++config.AttackCount;
                    Debug.Log($"--------------------- BubbleBombAgent Id: {id}, AttackCount:{config.AttackCount} ---------------------");
                    if (config.AttackCount >= config.NeedAttackCount)
                        AgentDead(config);
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs
@@ -1,7 +1,11 @@
using System.Collections.Generic;
using UnityEngine;
using Core.Utilities;
using TowerDefense.Agents;
using TowerDefense.Level;
/**
 * 召唤木桩
 * 召唤木桩墙壁
 * @Author: chenxin
 * @Date: 2020-11-02 17:15:39
 */
@@ -11,23 +15,102 @@
    {
        public BossSkillWoodPile(boss_skill param) : base(param) { }
        protected string prefabPath = "Prefabs/Endless/WoodPile";
        /// <summary>
        /// 保存所有还在场景中的agent用于清理
        /// </summary>
        protected List<WoodPileAgent> agentList;
        /// <summary>
        /// 释放技能
        /// </summary>
        public override void ReleaseSkill()
        {
            base.ReleaseSkill();
            SpawnOnTunel();
        }
        protected void SpawnOnTunel()
        {
            List<int> tunelIdList = GetTunelList();
            GameObject prefab = Resources.Load<GameObject>(prefabPath);
            for (int i = 0; i < tunelIdList.Count; ++i)
            {
                GameObject obj = Poolable.TryGetPoolable(prefab);
                WoodPileAgent agent = obj.GetComponent<WoodPileAgent>();
                agent.Id = GameUtils.GetId();
                agent.waveLineID = tunelIdList[i] - 1;
                agent.AgentType = SpawnAgentType.WoodPile;
                agent.opponentAgent = false;
                agent.FireHurtRate = SkillData.effect[1];
                Vector3 spawnPosition = EndlessLevelManager.instance.GetTunelWorldPosition(tunelIdList[i], (EndlessBossSkillTunelType)SkillData.target[1]);
                obj.transform.position = spawnPosition;
                agent.Initialize();
                float enemiesTotalHP = EndlessPortData.GetWaveEnemiesHP(EndlessLevelManager.instance.CurrentLevel, EndlessLevelManager.instance.WaveManager.CurrentWaveIndex, tunelIdList[i]);
                // 当前波次怪物 * 倍数
                float hp = enemiesTotalHP * SkillData.effect[0];
                agent.SetAgentData(hp, 0, 0);
                AgentInsManager.instance.addAgent(agent);
                agentList.Add(agent);
            }
        }
        public override void Init()
        {
            base.Init();
            Debug.Log("--------------------- 召唤木桩技能初始化 ---------------------");
            agentList = new List<WoodPileAgent>();
        }
        public override void Update(float deltaTime)
        protected override void AddEvent()
        {
            IsCDCompleted = false;
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, OnWoodPileAgentRemoved);
        }
        protected override void RemoveEvent()
        {
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessWoodPileBeKilled, OnWoodPileAgentRemoved);
        }
        private void OnWoodPileAgentRemoved(int id)
        {
            for (int i = 0; i < agentList.Count; ++i)
            {
                if (agentList[i].Id == id)
                {
                    agentList.Remove(agentList[i]);
                    break;
                }
            }
        }
        public override void Reset()
        {
            base.Reset();
            ClearWoodPileAgents();
        }
        public override void Clear()
        {
            base.Clear();
            ClearWoodPileAgents();
        }
        /// <summary>
        /// 清理在场景中的所有木桩墙壁
        /// </summary>
        private void ClearWoodPileAgents()
        {
            while (agentList.Count > 0)
            {
                agentList[0].Remove();
                agentList.Remove(agentList[0]);
            }
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using Core.Utilities;
/**
@@ -14,6 +15,7 @@
            SkillData = param;
            SkillType = (EndlessBossSkillType)param.skill_class;
            SkillAI = GetSkillAI(param);
            random = new System.Random();
        }
        /// <summary>
@@ -46,6 +48,8 @@
        /// 技能cd的计时器
        /// </summary>
        protected Timer cdTimer;
        protected System.Random random;
        /// <summary>
        /// 帧刷新
@@ -100,7 +104,7 @@
            cdTimer.SetTime(SkillData.cool_down / 1000f);
            cdTimer.Reset();
        }
        public virtual void Reset()
        {
            if (cdTimer != null)
@@ -124,12 +128,45 @@
        protected virtual void AddEvent()
        {
        }
        protected virtual void RemoveEvent()
        {
        }
        /// <summary>
        /// 获取赛道列表
        /// </summary>
        protected List<int> GetTunelList()
        {
            List<int> tunelIdList = new List<int>();
            int count = 0;
            // 剩余没有用到的赛道
            List<int> remainList = new List<int>() { 1, 2, 3, 4, 5 };
            for (int i = 0; i < SkillData.tunnel.Count; ++i)
            {
                // 统计6这种类型的数量
                if (SkillData.tunnel[i] == 6)
                {
                    ++count;
                    continue;
                }
                tunelIdList.Add(SkillData.tunnel[i]);
                remainList.Remove(SkillData.tunnel[i]);
            }
            for (int i = 0; i < count; ++i)
            {
                int num = random.Next(remainList.Count);
                tunelIdList.Add(remainList[num]);
                remainList.Remove(remainList[num]);
            }
            return tunelIdList;
        }
    }
}
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs
@@ -71,6 +71,17 @@
        {
            if (isPaused || EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return;
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Update(Time.deltaTime);
            }
            for (int i = 0; i < waitList.Count; ++i)
            {
                if (waitList[i].IsCDCompleted)
                    AddSkill(waitList[i]);
            }
            switch (skillState)
            {
                case EndlessBossSkillState.Init:
@@ -114,14 +125,6 @@
        private void HandleWait(float deltaTime)
        {
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Update(Time.deltaTime);
                if (skillList[i].IsCDCompleted)
                    AddSkill(skillList[i]);
            }
            for (int i = 0; i < cdList.Count; ++i)
            {
                if (cdList[i].IsConditionOK)
@@ -136,6 +139,9 @@
            }
        }
        /// <summary>
        /// 飘字闪烁完成
        /// </summary>
        private void OnGlintTitleCompleted()
        {
            EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted);
@@ -166,6 +172,7 @@
                {
                    skillList.Add(skill);
                    skill.Init();
                    waitList.Add(skill);
                }
            }
@@ -198,7 +205,7 @@
        public void Reset()
        {
            if (isPaused) return;
            for (int i = 0; i < skillList.Count; ++i)
            {
                skillList[i].Reset();
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs
@@ -73,7 +73,7 @@
        }
        /// <summary>
        /// 重置AI
        /// 重置AI,恢复到初始状态
        /// </summary>
        public abstract void Reset();
Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs
@@ -25,7 +25,16 @@
            {
                IsActived = true;
                timer = null;
                Debug.Log("--------------------- 技能准备完成 ---------------------");
                switch ((EndlessBossSkillType)SkillData.skill_class)
                {
                    case EndlessBossSkillType.BubbleBomb:
                        Debug.Log("--------------------- 泡泡炸弹 技能准备完成 ---------------------");
                        break;
                    case EndlessBossSkillType.WoodPile:
                        Debug.Log("--------------------- 木桩墙壁 技能准备完成 ---------------------");
                        break;
                }
            }
        }