From d35d31d85fd4b827dc37008aef39c019b6a7781d Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Sat, 07 Nov 2020 16:34:50 +0800 Subject: [PATCH] Merge commit '2940e451058b1af7541ff651f485f33a10e92f7e' into master --- Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs | 2 Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs | 43 ++ Assets/Scripts/TowerDefense/Agents/Agent.cs | 2 Assets/Scripts/Data/EndlessPortData.cs | 24 + Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta | 11 Assets/Resources/Prefabs/Endless/WoodPile.prefab | 496 +++++++++++++++++++++++++++++++ Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs | 25 + Assets/Scenes/Levels/Battle/Endless.unity | 1 Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs | 15 Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs | 11 Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs | 23 + Assets/Scripts/Core/Health/DamageableBehaviour.cs | 2 Assets/Scripts/Event/EventType.cs | 2 Assets/Resources/Prefabs/Endless/BubbleBomb.prefab | 3 Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs | 4 Assets/Scripts/Enum/SpawnAgentType.cs | 2 Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs | 46 -- Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs | 114 +++++++ Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta | 7 Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs | 89 +++++ 20 files changed, 856 insertions(+), 66 deletions(-) diff --git a/Assets/Resources/Prefabs/Endless/BubbleBomb.prefab b/Assets/Resources/Prefabs/Endless/BubbleBomb.prefab index 5524e4e..30e0905 100644 --- a/Assets/Resources/Prefabs/Endless/BubbleBomb.prefab +++ b/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 diff --git a/Assets/Resources/Prefabs/Endless/WoodPile.prefab b/Assets/Resources/Prefabs/Endless/WoodPile.prefab new file mode 100644 index 0000000..4085018 --- /dev/null +++ b/Assets/Resources/Prefabs/Endless/WoodPile.prefab @@ -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: diff --git a/Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta b/Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta new file mode 100644 index 0000000..3fb36de --- /dev/null +++ b/Assets/Resources/Prefabs/Endless/WoodPile.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: debfb40db53346747839fbb2bba8eaf5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Levels/Battle/Endless.unity b/Assets/Scenes/Levels/Battle/Endless.unity index 7f124fe..1efb516 100644 --- a/Assets/Scenes/Levels/Battle/Endless.unity +++ b/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 diff --git a/Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs b/Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs index 139ca35..87cf356 100644 --- a/Assets/Scripts/ActionGameFramework/Health/DamageCollider.cs +++ b/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); } diff --git a/Assets/Scripts/Core/Health/DamageableBehaviour.cs b/Assets/Scripts/Core/Health/DamageableBehaviour.cs index f7b32ef..9f754ef 100644 --- a/Assets/Scripts/Core/Health/DamageableBehaviour.cs +++ b/Assets/Scripts/Core/Health/DamageableBehaviour.cs @@ -114,7 +114,7 @@ /// <summary> /// Fires the removed event /// </summary> - void OnRemoved() + protected void OnRemoved() { if (removed != null) { diff --git a/Assets/Scripts/Data/EndlessPortData.cs b/Assets/Scripts/Data/EndlessPortData.cs index 1a2f8a3..6a8c4cf 100644 --- a/Assets/Scripts/Data/EndlessPortData.cs +++ b/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> diff --git a/Assets/Scripts/Enum/SpawnAgentType.cs b/Assets/Scripts/Enum/SpawnAgentType.cs index 45a54e8..468bcdb 100644 --- a/Assets/Scripts/Enum/SpawnAgentType.cs +++ b/Assets/Scripts/Enum/SpawnAgentType.cs @@ -13,7 +13,7 @@ // 泡泡炸弹,在PVE模式里面,boss技能可以召唤炸弹和木桩等 BubbleBomb, - // 召唤木桩 + // 木桩墙壁 WoodPile } } \ No newline at end of file diff --git a/Assets/Scripts/Event/EventType.cs b/Assets/Scripts/Event/EventType.cs index af1b8af..c6ce753 100644 --- a/Assets/Scripts/Event/EventType.cs +++ b/Assets/Scripts/Event/EventType.cs @@ -65,6 +65,8 @@ EndlessLoseHeart, // 爱心为0 EndlessHeartAllLose, + // 木桩墙壁被打死 + EndlessWoodPileBeKilled, } } diff --git a/Assets/Scripts/TowerDefense/Agents/Agent.cs b/Assets/Scripts/TowerDefense/Agents/Agent.cs index 3f884c7..2fceb1c 100644 --- a/Assets/Scripts/TowerDefense/Agents/Agent.cs +++ b/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; diff --git a/Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs b/Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs index 5193cb9..662077d 100644 --- a/Assets/Scripts/TowerDefense/Agents/BubbleBombAgent.cs +++ b/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); } } } \ No newline at end of file diff --git a/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs b/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs new file mode 100644 index 0000000..8ac9530 --- /dev/null +++ b/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs @@ -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(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta b/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta new file mode 100644 index 0000000..9e3d797 --- /dev/null +++ b/Assets/Scripts/TowerDefense/Agents/WoodPileAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74cdda61650491a4fb62ef5cac504f6e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs index 8b48756..089f629 100644 --- a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs +++ b/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> diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs index c459c66..bf9d957 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs +++ b/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); diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs index 994b011..55e1712 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillWoodPile.cs +++ b/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]); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs index e3a5d05..cb76714 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkill.cs +++ b/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; } } } \ No newline at end of file diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs index 37b9e53..83117e5 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs +++ b/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(); diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs index ac027cb..cc9a5ea 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/EndlessBossSkillAI.cs @@ -73,7 +73,7 @@ } /// <summary> - /// 重置AI + /// 重置AI,恢复到初始状态 /// </summary> public abstract void Reset(); diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs index d2852a7..4befbf7 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkillAI/NormalBossSkillAI.cs +++ b/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; + } } } -- Gitblit v1.9.1