Browse Source

怪物提交

pull/20/head
yjm484 1 year ago
parent
commit
d43782c0b9
  1. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/AshBeetle.asset
  2. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/AshBeetle.asset.meta
  3. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BlastFistMushroom.asset
  4. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BlastFistMushroom.asset.meta
  5. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bone.asset
  6. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bone.asset.meta
  7. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/CorrosiveSludge.asset
  8. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/CorrosiveSludge.asset.meta
  9. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/DrowsyShroom.asset
  10. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/DrowsyShroom.asset.meta
  11. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/EmberWraith.asset
  12. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/EmberWraith.asset.meta
  13. 4
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/HoodWanderer.asset
  14. 0
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/HoodWanderer.asset.meta
  15. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ParasiticMushroom.asset
  16. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ParasiticMushroom.asset.meta
  17. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullGuardian.asset
  18. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullGuardian.asset.meta
  19. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullMage.asset
  20. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullMage.asset.meta
  21. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullWarlock.asset
  22. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullWarlock.asset.meta
  23. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ShatteringFistMushroom.asset
  24. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ShatteringFistMushroom.asset.meta
  25. 14
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullGuardian.asset
  26. 2
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullGuardian.asset.meta
  27. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullMage.asset
  28. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullMage.asset.meta
  29. 32
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullWarlock.asset
  30. 8
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullWarlock.asset.meta
  31. 1609
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/AshBeetle.prefab
  32. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/AshBeetle.prefab.meta
  33. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BlastFistMushroom.prefab
  34. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BlastFistMushroom.prefab.meta
  35. 1612
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullGuardian.prefab
  36. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullGuardian.prefab.meta
  37. 1612
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullWarlock.prefab
  38. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullWarlock.prefab.meta
  39. 1612
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullmage.prefab
  40. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullmage.prefab.meta
  41. 1614
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/CorrosiveSludge.prefab
  42. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/CorrosiveSludge.prefab.meta
  43. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/DrowsyShroom.prefab
  44. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/DrowsyShroom.prefab.meta
  45. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/EmberWraith.prefab
  46. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/EmberWraith.prefab.meta
  47. 5
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/HoodWanderer.prefab
  48. 0
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/HoodWanderer.prefab.meta
  49. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ParasiticMushroom.prefab
  50. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ParasiticMushroom.prefab.meta
  51. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullGuardian.prefab
  52. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullGuardian.prefab.meta
  53. 1614
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullWarlock.prefab
  54. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullWarlock.prefab.meta
  55. 1614
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_Skullmage.prefab
  56. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_Skullmage.prefab.meta
  57. 1613
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ShatteringFistMushroom.prefab
  58. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ShatteringFistMushroom.prefab.meta
  59. 1742
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullGuardian.prefab
  60. 2
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullGuardian.prefab.meta
  61. 1614
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullWarlock.prefab
  62. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullWarlock.prefab.meta
  63. 1614
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Skullmage.prefab
  64. 7
      ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Skullmage.prefab.meta
  65. 32
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  66. 90
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs
  67. 4
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs
  68. 213
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AshBeetle.cs
  69. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AshBeetle.cs.meta
  70. 242
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlastFistMushroom.cs
  71. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlastFistMushroom.cs.meta
  72. 73
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bone.cs
  73. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bone.cs.meta
  74. 260
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/CorrosiveSludge.cs
  75. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/CorrosiveSludge.cs.meta
  76. 248
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/DrowsyShroom.cs
  77. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/DrowsyShroom.cs.meta
  78. 241
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EmberWraith.cs
  79. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EmberWraith.cs.meta
  80. 23
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyManager.cs
  81. 218
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs
  82. 286
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/HoodWanderer.cs
  83. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/HoodWanderer.cs.meta
  84. 273
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ParasiticMushroom.cs
  85. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ParasiticMushroom.cs.meta
  86. 273
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ShatteringFistMushroom.cs
  87. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ShatteringFistMushroom.cs.meta
  88. 231
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullGuardian.cs
  89. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullGuardian.cs.meta
  90. 267
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullMage.cs
  91. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullMage.cs.meta
  92. 92
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullWarlock.cs
  93. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullWarlock.cs.meta
  94. 1
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs
  95. 18
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_AttackAndShield.cs
  96. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_AttackAndShield.cs.meta
  97. 18
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_BanStep.cs
  98. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_BanStep.cs.meta
  99. 7
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_Nothing.cs
  100. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_Nothing.cs.meta

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/AshBeetle.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: AshBeetle
m_EditorClassIdentifier:
enemyName: skullGuardian
enemyIcon: {fileID: 21300000, guid: bd8f3094e7ef01148bddd857e065ebc3, type: 3}
stepRange: 3
stepRangeMultiplier: 1
speed: 1
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 7
maxHP: 12
currentHP: 12
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 5
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/AshBeetle.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f3b1b010998041142826272011c50414
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BlastFistMushroom.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: BlastFistMushroom
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 48
currentHP: 48
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 4
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/BlastFistMushroom.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c122b87da214436469b174488c400c23
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bone.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: Bone
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 0
stepRangeMultiplier: 0
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 1
currentHP: 1
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 0
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bone.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fd4da5e8a3da1e64ea634a030cf9d266
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/CorrosiveSludge.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: CorrosiveSludge
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 30
currentHP: 30
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 7
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/CorrosiveSludge.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 05f713823d4884e46ba851f25df21285
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/DrowsyShroom.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: DrowsyShroom
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 15
currentHP: 15
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 4
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/DrowsyShroom.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cb99d0b48fab03c478afff5810b2b77d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/EmberWraith.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: EmberWraith
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 38
currentHP: 38
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 10
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/EmberWraith.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a89070f0aaf0c7a4fb3af1a1a4470107
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

4
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkeletonArcher.asset → ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/HoodWanderer.asset

@ -10,9 +10,9 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: SkeletonArcher
m_Name: HoodWanderer
m_EditorClassIdentifier:
enemyName: skeletonArcher
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1

0
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkeletonArcher.asset.meta → ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/HoodWanderer.asset.meta

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ParasiticMushroom.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: ParasiticMushroom
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 20
currentHP: 20
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 6
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ParasiticMushroom.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f5d3af83e6bdb834ba52a5bf19c0878e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullGuardian.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: RE_SkullGuardian
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 8
currentHP: 8
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 5
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullGuardian.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5630b512cc511e04183d23697c407f37
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullMage.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: RE_SkullMage
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 6
currentHP: 6
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 4
attackRange: 3

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullMage.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 39d8df1bed9c68e4c9cc64cdf94f6145
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullWarlock.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: RE_SkullWarlock
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 5
currentHP: 5
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 5
attackRange: 3

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/RE_SkullWarlock.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b1a39596f1aabfc4b9f0901eccb44366
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ShatteringFistMushroom.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: ShatteringFistMushroom
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 38
currentHP: 38
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 12
attackRange: 1

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/ShatteringFistMushroom.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d3a043d7961329c42b27d2aa5f6be3fe
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

14
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullGuardian.asset

@ -12,17 +12,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: SkullGuardian
m_EditorClassIdentifier:
enemyName: skullGuardian
enemyIcon: {fileID: 21300000, guid: bd8f3094e7ef01148bddd857e065ebc3, type: 3}
stepRange: 3
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 7
maxHP: 27
currentHP: 27
upShieldValue: 0
maxHP: 16
currentHP: 16
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3

2
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullGuardian.asset.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: f3b1b010998041142826272011c50414
guid: 6345205773c704b4bbd1dbf23deed7a3
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullMage.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: SkullMage
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 11
currentHP: 11
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 4
attackRange: 3

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullMage.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b0b09cece064a9a45a5770e45c9d77be
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullWarlock.asset

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 20f70984b262f8d4382bf5262dddb83e, type: 3}
m_Name: SkullWarlock
m_EditorClassIdentifier:
enemyName: HoodWanderer
enemyIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
stepRange: 4
stepRangeMultiplier: 1
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0
upShieldValue: 0
maxHP: 9
currentHP: 9
sufferDamageMultiply: 1
colourType: 0
maxSkillCoolDown: 3
currentSkillCoolDown: 3
damageMultiplier: 1
damage: 5
attackRange: 3

8
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/SkullWarlock.asset.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9bfb635e9a74e0a40897f1015c398345
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

1609
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/AshBeetle.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/AshBeetle.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: faed8b26a4858c34290ecb341e8eeacd
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BlastFistMushroom.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BlastFistMushroom.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 800c0767dc4bcc646a3a10d99143a0e2
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1612
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullGuardian.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullGuardian.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5a133951e41a4ec43a57bc107e44f87e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1612
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullWarlock.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullWarlock.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8a24262c2ec3f9a45919642911da8010
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1612
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullmage.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/BoneForSkullmage.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 71195df257cd2c84f8e1df758c1dcf58
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1614
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/CorrosiveSludge.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/CorrosiveSludge.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8ca81c0623a2728438d77e48fb2e9617
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/DrowsyShroom.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/DrowsyShroom.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7e3e5773e30caab47b324c8549d3aea1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/EmberWraith.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/EmberWraith.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 0b40e87c6ef35fd4ab0e637458b0898d
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

5
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkeletonArcher.prefab → ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/HoodWanderer.prefab

@ -540,7 +540,7 @@ GameObject:
- component: {fileID: 966530877171468336}
- component: {fileID: 4182936751232772189}
m_Layer: 9
m_Name: SkeletonArcher
m_Name: HoodWanderer
m_TagString: Enemy
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -606,10 +606,11 @@ MonoBehaviour:
moveType: 0
rangePool: []
enemyType: 0
enemyScript: 4
enemyScript: 6
lineAim: {fileID: 7907765502362765996}
canLineAppre: 1
enemyUIBar: {fileID: 0}
bone: {fileID: 1253231568001379261, guid: faed8b26a4858c34290ecb341e8eeacd, type: 3}
canMove: 0
planAction: 2
--- !u!114 &966530877171468336

0
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkeletonArcher.prefab.meta → ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/HoodWanderer.prefab.meta

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ParasiticMushroom.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ParasiticMushroom.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 324f36d654c1ae14fa302874c914d861
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullGuardian.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullGuardian.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: a2d780b42e1e8544784a6c3fbad33b85
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1614
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullWarlock.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_SkullWarlock.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3b3460a2f85e4af418b1fd504711dac7
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1614
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_Skullmage.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/RE_Skullmage.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 75eed9d1e1f05bb42b86c70a9cb083c1
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1613
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ShatteringFistMushroom.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/ShatteringFistMushroom.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2d5c0f23ba223494b90357f5d63672a8
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1742
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullGuardian.prefab

File diff suppressed because it is too large

2
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullGuardian.prefab.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: faed8b26a4858c34290ecb341e8eeacd
guid: 5c61e2225184e76439df52aa53207c18
PrefabImporter:
externalObjects: {}
userData:

1614
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullWarlock.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/SkullWarlock.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ff5ce56410d61cf47b6c413f60931031
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1614
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Skullmage.prefab

File diff suppressed because it is too large

7
ColorlessWorld-2024-4-2/Assets/Prefab/EnemyPrefab/Skullmage.prefab.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 3a8511131a3f5264ea3ee4414725e76c
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

32
ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity

@ -2343,6 +2343,8 @@ MonoBehaviour:
lineAim: {fileID: 0}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 0
--- !u!4 &173840243
@ -5278,6 +5280,8 @@ MonoBehaviour:
lineAim: {fileID: 0}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 0
--- !u!4 &490441552
@ -10412,6 +10416,8 @@ MonoBehaviour:
lineAim: {fileID: 632385595}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 2
--- !u!135 &1153479995
@ -12381,6 +12387,8 @@ MonoBehaviour:
lineAim: {fileID: 1373963700}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 0
--- !u!114 &1406908586
@ -13926,6 +13934,8 @@ MonoBehaviour:
lineAim: {fileID: 1334076123}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 0
--- !u!135 &1696574718
@ -14961,19 +14971,11 @@ MonoBehaviour:
lineOffSet: {x: 1, y: 0, z: 0}
columnOffSet: {x: 0, y: 0, z: 0.865}
enemyGenerateDataList:
- enemyPrefab: {fileID: 4438669652138308483, guid: ddcb59bfe66215e48b401ab086893b6d,
- enemyPrefab: {fileID: 6812776764525711320, guid: 8ca81c0623a2728438d77e48fb2e9617,
type: 3}
locationX: 6
locationY: 7
- enemyPrefab: {fileID: 1253231568001379261, guid: faed8b26a4858c34290ecb341e8eeacd,
type: 3}
locationX: 3
locationY: 5
- enemyPrefab: {fileID: 4438669652138308483, guid: ddcb59bfe66215e48b401ab086893b6d,
type: 3}
locationX: 2
locationY: 8
- enemyPrefab: {fileID: 3816684761213746185, guid: 6256581593a57044dbcf121b7915d0ed,
locationX: 5
locationY: 4
- enemyPrefab: {fileID: 8591057712024743076, guid: 3a8511131a3f5264ea3ee4414725e76c,
type: 3}
locationX: 3
locationY: 4
@ -18559,6 +18561,8 @@ MonoBehaviour:
lineAim: {fileID: 0}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 0
--- !u!224 &1256924769706151849
@ -20872,6 +20876,8 @@ MonoBehaviour:
lineAim: {fileID: 2475178588054003278}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 0
planAction: 2
--- !u!114 &7321289092789459554
@ -21496,6 +21502,8 @@ MonoBehaviour:
lineAim: {fileID: 1610333117079908973}
canLineAppre: 0
enemyUIBar: {fileID: 0}
bone: {fileID: 0}
bone_Re: {fileID: 0}
canMove: 1
planAction: 0
--- !u!224 &9050899475431737023

90
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardOriginalDataList.cs

@ -3,27 +3,101 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Linq;
public class CardOriginalDataList : Singleton<CardOriginalDataList>
{
public Dictionary<int, CardOriginalData> cardOriginalDataList;
//private CardOriginalData cardOriginalData;//卡牌数据类型
//public CardData_SO templateardData_SO;//卡牌数据模板
public Dictionary<int, CardOriginalData> commCardOriginalDataList=new Dictionary<int, CardOriginalData>();
public Dictionary<int, CardOriginalData> rareCardOriginalDataList = new Dictionary<int, CardOriginalData>();
public Dictionary<int, CardOriginalData> legendaryCardOriginalDataList = new Dictionary<int, CardOriginalData>();
// public List<CardData_SO> cardData_SOs;//测试用的表,用来打印字典
void Start()
{
cardOriginalDataList = ReadExcel("Assets/data/card_data_1.csv");
categorizeCardsByRarity();
}
public HashSet<int> GetCardRewards(int count)
{
var random = new System.Random();
var selectedCards = new HashSet<int>();
/* for(int i =0;i<10;i++)
{
cardData_SOs.Add(Instantiate(templateardData_SO));
cardData_SOs[i].cardId = i;
}*/
// 计算当前的概率
double commonProbability = 63.0 - GameManager.Instance.cardRewardsRarityAdjustment;
double rareProbability = 37.0;
double legendaryProbability = GameManager.Instance.cardRewardsRarityAdjustment;
while (selectedCards.Count < count)
{
double roll = random.NextDouble() * 100;
if (roll < legendaryProbability && legendaryCardOriginalDataList.Count > 0)
{
// 从传说卡牌中选择
selectedCards.Add(SelectRandomCard(legendaryCardOriginalDataList, random));
GameManager.Instance.cardRewardsRarityAdjustment = 0.0; // 重置修正值
GameManager.Instance.cardRewardsCounter = 0;// 重置计数器
}
else if (roll < legendaryProbability + rareProbability && rareCardOriginalDataList.Count > 0)
{
// 从稀有卡牌中选择
selectedCards.Add(SelectRandomCard(rareCardOriginalDataList, random));
}
else if (commCardOriginalDataList.Count > 0)
{
// 从普通卡牌中选择
selectedCards.Add(SelectRandomCard(commCardOriginalDataList, random));
}
// 检查是否已经选够了卡牌数量
if (selectedCards.Count >= count)
{
break;
}
}
//增加计数器
GameManager.Instance.cardRewardsCounter++;
// 如果这次没有抽到传说卡牌,则增加修正值
if (!selectedCards.Overlaps(legendaryCardOriginalDataList.Keys)&& GameManager.Instance.cardRewardsCounter>2)
{
GameManager.Instance.cardRewardsRarityAdjustment = Math.Min(GameManager.Instance.cardRewardsRarityAdjustment + 1.0, 63.0);
}
foreach (var card in selectedCards)
{
Debug.Log("卡牌id是"+card);
}
Debug.Log("修正值是" + GameManager.Instance.cardRewardsRarityAdjustment);
return selectedCards;
}
private int SelectRandomCard(Dictionary<int, CardOriginalData> cardSet, System.Random random)
{
return cardSet.Keys.ElementAt(random.Next(cardSet.Count));
}
private void categorizeCardsByRarity()
{
foreach (var card in cardOriginalDataList)
{
if (card.Value.Rarity==1)
{
commCardOriginalDataList.Add(card.Key, card.Value);
}
if (card.Value.Rarity == 2)
{
rareCardOriginalDataList.Add(card.Key, card.Value);
}
if (card.Value.Rarity == 3)
{
legendaryCardOriginalDataList.Add(card.Key, card.Value);
}
}
}
Dictionary<int, CardOriginalData> ReadExcel(string filePath)

4
ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs

@ -67,6 +67,8 @@ public class TurnMaster : Singleton<TurnMaster>
EnemyManager.Instance.EnemyLine_Observer();
//回复敌人系数
EnemyManager.Instance.enemyMultiplierRestore();
//决定敌人行动
EnemyManager.Instance.EnemyAtionRandom();
//阶段流转
StartCoroutine(EndPlayerTurnBegin());
@ -78,6 +80,8 @@ public class TurnMaster : Singleton<TurnMaster>
{
//回合结束结算玩家buff
Usermanager.Instance.PlayerTurnSettle();
//结算敌人护盾
EnemyManager.Instance.enemyShieldSettle(0);
//阶段流转
turn = Turn.enemyTurnBegin;
}

213
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AshBeetle.cs

@ -0,0 +1,213 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AshBeetle : MonoBehaviour
{
EnemyNode enemyNode;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Attack(), 0.7f },
{ new EnemyAction_Weak(), 0.3f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
case EnemyAction_Weak:
yield return StartCoroutine(WeakAttackAction());
break;
}
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
}
}
IEnumerator WeakAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.weak, 1);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.weak, 1);
}
}
}
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Shoot();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkullGuardianMoveCoroutine(disNode));
}
IEnumerator SkullGuardianMoveCoroutine( MapUnity endMapUnity )//移动到位置
{
while ( true )
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if(dDistance < 0.1f)
{
break;
}
this.gameObject .transform .position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void NextTurnIntention()
{
if (enemyNode.pasth.Count <= 1)
{
enemyNode.canMove = false;
}
else
{
enemyNode.canMove = true;
}
if(enemyNode .EnemyState .currentSkillCoolDown <=0)
{
enemyNode.planAction = EnemyNode.PlanAction.sheield;
}
else
{
enemyNode.planAction = EnemyNode.PlanAction.attack;
enemyNode.canLineAppre = true;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage),enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/AshBeetle.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 159aa5c40181a574ea93a2306670a2c8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

242
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlastFistMushroom.cs

@ -0,0 +1,242 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BlastFistMushroom : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyAction_Nothing(), 0.5f },
{ new EnemyActionAction_Attack(), 0.5f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
}
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if (toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
int damage = GameManager.Instance.getNodeDiffForEnemy();
MathTool.keepNature(damage);
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlastFistMushroom.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 55c67188084c0884a843685cc2343e6e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

73
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bone.cs

@ -0,0 +1,73 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bone : MonoBehaviour
{
EnemyNode enemyNode;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public int reTurn = 0;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyAction_Nothing(), 1.0f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void ChooseAction()
{
enemyAction = new EnemyAction_Nothing();
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
reTurn += 1;
if (reTurn == 2)
{
EnemyManager.Instance.enemyCount += 1;
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
enemyNode.boneOnDeath();
yield break;
}
}
IEnumerator JudgNextActionCoroutine()
{
yield return StartCoroutine(JudgeActionCoroutine());
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bone.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1127cf5fcca27ba4c9d86bf4d1bffce8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

260
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/CorrosiveSludge.cs

@ -0,0 +1,260 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class CorrosiveSludge : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Aoe(), 0.6f },
{ new EnemyActionAction_Attack(), 0.4f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Aoe:
yield return StartCoroutine(SkillAction());
break;
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
}
}
IEnumerator SkillAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
HashSet<MapUnity> targetSet= new HashSet<MapUnity>();
targetSet.Add(currentNode);
getNodeTools.getCircleNode(targetSet,1);
getNodeTools.RandomPollute(targetSet,4);
foreach (MapUnity target in targetSet)
{
if (target.Equals(GameManager.Instance.playerOn))
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(8), enemyNode);
}
}
yield break;
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if (toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/CorrosiveSludge.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 80ff1cf9bf5e8df42a81bfd4e085df46
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

248
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/DrowsyShroom.cs

@ -0,0 +1,248 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class DrowsyShroom : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyAction_Sleep(), 0.5f },
{ new EnemyActionAction_Attack(), 0.5f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyAction_Sleep:
yield return StartCoroutine(SleepAction());
break;
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
}
}
IEnumerator SleepAction()
{
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.levelSleep, 4);
yield break;
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if (toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/DrowsyShroom.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5020a3e65f711024bbf871c4b7f33988
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

241
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EmberWraith.cs

@ -0,0 +1,241 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class EmberWraith : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Attack(), 0.5f },
{ new EnemyActionAction_Shield(), 0.5f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
enemyNode.sufferAbnormalCondition(AbnormalCondition.flashPoint, 1);
}
private void Update()
{
}
private void OnEnable()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
case EnemyActionAction_Shield:
yield return StartCoroutine(ShieldAction());
break;
}
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
}
}
IEnumerator ShieldAction()
{
for (int i = 0; i < EnemyManager.Instance.enemySpeedSortingList.Count; i++)
{
EnemyManager.Instance.enemySpeedSortingList[i].sufferAbnormalCondition(AbnormalCondition.angerUpperDamage, 3);
EnemyManager.Instance.enemySpeedSortingList[i].EnemyState.shieldValue += EnemyManager.Instance.enemySpeedSortingList[i].ShieldCalculation(7);
}
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage(int damage)
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EmberWraith.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7f71efaf8368f534ab344c5b2fd0e12d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

23
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyManager.cs

@ -91,14 +91,14 @@ public class EnemyManager : Singleton<EnemyManager>
foreach (var observer in enemySpeedSortingList)
{
EnemySortIconSync();
enemyTurnState = EnemyTurnState.stop;
observer.EnemyTurn();
enemyTurnState = EnemyTurnState.stop;
enemyCount += 1;
yield return new WaitUntil(()=>enemyTurnState==EnemyTurnState.runing);
Debug.Log(enemyCount);
Debug.Log("enemyCountÊÇ"+enemyCount);
if (enemyCount >=enemySpeedSortingList.Count)
{
TurnMaster.Instance.EndEnemyTurn();
@ -137,6 +137,14 @@ public class EnemyManager : Singleton<EnemyManager>
}
enemySortIconList.Clear();
}
public void EnemyAtionRandom()
{
foreach (var observer in enemySpeedSortingList)
{
observer.DetermineIntent();
}
}
public void EnemySkillCoolDown_Observer()
{
foreach (var observer in enemyObservers)
@ -162,6 +170,14 @@ public class EnemyManager : Singleton<EnemyManager>
}
}
public void enemyShieldSettle(int settleTurn)
{
foreach (var observer in enemyObservers)
{
observer.GetEnemyNode().enemyShieldSettle(settleTurn);
}
}
public void enemyTurnBeginSettle(int settleTurn)
{
foreach (var observer in enemyObservers)
@ -931,6 +947,7 @@ public class EnemyManager : Singleton<EnemyManager>
{
influencePreviewPool.Add(i);
}
}

218
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs

@ -40,6 +40,10 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
[Header("当前意图脚本")]
public EnemyAction currentActionScript;
public GameObject bone;
public GameObject bone_Re;
public enum EnemyType
{
enemy,
@ -52,7 +56,18 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
wolf,
bird,
skullGuardian,
skeletonArcher
skeletonArcher,
skullmage,
ashBeetle,
hoodWanderer,
skullWarlock,
blastFistMushroom,
shatteringFistMushroom,
parasiticMushroom,
emberWraith,
drowsyShroom,
bone,
corrosiveSludge
}
[Header("意图行动")]
public bool canMove; //可以移动
@ -72,10 +87,25 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
private void OnEnable()
{
EnemyManager.Instance.enemyObservers.Add(this);
if (enemyType==EnemyType.enemy)
{
EnemyManager.Instance.enemySpeedSortingList.Add(this);
}
if (templateEnemyState != null)
EnemyState = Instantiate(templateEnemyState);
if (enemyType == EnemyType.enemy)
enemyUIBar = GetComponent<EnemyUIBar>();
}
private void OnDisable()
{
EnemyManager.Instance.enemyObservers.Remove(this);
if (enemyType == EnemyType.enemy)
{
EnemyManager.Instance.enemySpeedSortingList.Remove(this);
}
}
public void Start()
@ -98,6 +128,79 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
}
public void DetermineIntent()
{
switch (enemyScript)
{
case EnemyScript.ashBeetle:
AshBeetle ashBeetle = GetComponent<AshBeetle>();
ashBeetle.ChooseAction();
break;
case EnemyScript.hoodWanderer:
HoodWanderer hoodWanderer = GetComponent<HoodWanderer>();
hoodWanderer.ChooseAction();
break;
case EnemyScript.skullGuardian:
SkullGuardian skullGuardian = GetComponent<SkullGuardian>();
skullGuardian.ChooseAction();
break;
case EnemyScript.drowsyShroom:
DrowsyShroom drowsyShroom = GetComponent<DrowsyShroom>();
drowsyShroom.ChooseAction();
break;
case EnemyScript.skullmage:
SkullMage skullmage = GetComponent<SkullMage>();
skullmage.ChooseAction();
break;
case EnemyScript.skullWarlock:
SkullWarlock skullWarlock = GetComponent<SkullWarlock>();
skullWarlock.ChooseAction();
break;
case EnemyScript.blastFistMushroom:
BlastFistMushroom blastFistMushroom = GetComponent<BlastFistMushroom>();
blastFistMushroom.ChooseAction();
break;
case EnemyScript.parasiticMushroom:
ParasiticMushroom parasiticMushroom = GetComponent<ParasiticMushroom>();
parasiticMushroom.ChooseAction();
break;
case EnemyScript.emberWraith:
EmberWraith emberWraith = GetComponent<EmberWraith>();
emberWraith.ChooseAction();
break;
case EnemyScript.shatteringFistMushroom:
ShatteringFistMushroom shatteringFistMushroom = GetComponent<ShatteringFistMushroom>();
shatteringFistMushroom.ChooseAction();
break;
case EnemyScript.bone:
Bone bone = GetComponent<Bone>();
bone.ChooseAction();
break;
case EnemyScript.corrosiveSludge:
CorrosiveSludge corrosiveSludge = GetComponent<CorrosiveSludge>();
corrosiveSludge.ChooseAction();
break;
}
}
public EnemyAction GetRandomAction(Dictionary<EnemyAction, float>actionPool)
{
System.Random random = new System.Random();
float totalWeight = actionPool.Values.Sum();
float randomNumber = (float)random.NextDouble() * totalWeight;
float cumulativeWeight = 0f;
foreach (var action in actionPool)
{
cumulativeWeight += action.Value;
if (randomNumber <= cumulativeWeight)
{
return action.Key;
}
}
return actionPool.Keys.Last();
}
public void GetEnemyPosition()
{
Debug .Log ("敌人生成在("+positionX +","+positionY +")");
@ -120,7 +223,8 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
stepMultiplie = 0f;
}
int trueStepRange=EnemyState.stepRange+extraStep;
return (int)(trueStepRange * stepMultiplie);
int result=(int)(trueStepRange * stepMultiplie);
return result;
}
public void EnemyTurn()
@ -137,13 +241,53 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
Bird bird = GetComponent<Bird>();
bird.BirdTurn();
break;
case EnemyScript.ashBeetle:
AshBeetle ashBeetle = GetComponent<AshBeetle>();
ashBeetle.enemyTurn();
break;
case EnemyScript.hoodWanderer:
HoodWanderer hoodWanderer = GetComponent<HoodWanderer>();
hoodWanderer.enemyTurn();
break;
case EnemyScript.drowsyShroom:
DrowsyShroom drowsyShroom = GetComponent<DrowsyShroom>();
drowsyShroom.enemyTurn();
break;
case EnemyScript.skullGuardian:
SkullGuardian skullGuardian = GetComponent<SkullGuardian>();
skullGuardian.SkullGuardianTurn();
skullGuardian.enemyTurn();
break;
case EnemyScript.skullmage:
SkullMage skullmage = GetComponent<SkullMage>();
skullmage.enemyTurn();
break;
case EnemyScript.skeletonArcher:
SkeletonArcher skeletonArcher = GetComponent<SkeletonArcher>();
skeletonArcher.skeletonArcherTurn();
case EnemyScript.skullWarlock:
SkullWarlock skullWarlock = GetComponent<SkullWarlock>();
skullWarlock.enemyTurn();
break;
case EnemyScript.blastFistMushroom:
BlastFistMushroom blastFistMushroom = GetComponent<BlastFistMushroom>();
blastFistMushroom.enemyTurn();
break;
case EnemyScript.parasiticMushroom:
ParasiticMushroom parasiticMushroom = GetComponent<ParasiticMushroom>();
parasiticMushroom.enemyTurn();
break;
case EnemyScript.emberWraith:
EmberWraith emberWraith = GetComponent<EmberWraith>();
emberWraith.enemyTurn();
break;
case EnemyScript.shatteringFistMushroom:
ShatteringFistMushroom shatteringFistMushroom = GetComponent<ShatteringFistMushroom>();
shatteringFistMushroom.enemyTurn();
break;
case EnemyScript.bone:
Bone bone = GetComponent<Bone>();
bone.enemyTurn();
break;
case EnemyScript.corrosiveSludge:
CorrosiveSludge corrosiveSludge = GetComponent<CorrosiveSludge>();
corrosiveSludge.enemyTurn();
break;
}
}
@ -170,7 +314,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void AppearAimLine()
{
MapUnity currentMapUnity = GameManager.Instance.X[positionX].Y[positionY];
EnemyManager.Instance.AttackRangeInfluencedNode(currentMapUnity, EnemyState.attackRange + EnemyState.stepRange,rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(currentMapUnity, EnemyState.attackRange + getStepRange(),rangePool);
switch (planAction)
{
@ -338,7 +482,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
System.Random random = new System.Random();
int randomIndex = random.Next(setArray.Length);
MapUnity randomMapUnity = setArray[randomIndex];
Debug.Log("Ä¿µÄµØÊÇ£º" + "X:" + randomMapUnity.locationX + "Y:" + randomMapUnity.locationY);
//Debug.Log("Ä¿µÄµØÊÇ£º" + "X:" + randomMapUnity.locationX + "Y:" + randomMapUnity.locationY);
return randomMapUnity;
}
@ -438,6 +582,17 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
{
boomCal();
}
if (bone != null)
{
var currentenemy = Instantiate(bone, this.transform.position, this.transform.rotation);
EnemyNode newEnemyNode = currentenemy.GetComponent<EnemyNode>();
newEnemyNode.positionX = positionX;
newEnemyNode.positionY = positionY;
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
currentNode.enemyNode = newEnemyNode;
}
switch (enemyType)
{
case EnemyType.enemy:
@ -452,6 +607,36 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
public void boneOnDeath()
{
if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.boom))
{
boomCal();
}
if (bone_Re != null)
{
var currentenemy = Instantiate(bone_Re, this.transform.position, this.transform.rotation);
EnemyNode newEnemyNode = currentenemy.GetComponent<EnemyNode>();
newEnemyNode.positionX = positionX;
newEnemyNode.positionY = positionY;
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
currentNode.enemyNode = newEnemyNode;
}
switch (enemyType)
{
case EnemyType.enemy:
EnemyManager.Instance.statePanel.SetActive(false);
RewardManager.Instance.JudgeEnemyOver();
Destroy(this.gameObject);
break;
case EnemyType.block:
GetComponent<BlockNode>().OnDeath();
break;
}
}
private void boomCal()
{
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
@ -721,7 +906,11 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
break;
}
}
foreach (var Buff in EnemyState.abnormalCondition)
{
Debug.Log(Buff.Key + "²ãÊý:" + Buff.Value.value);
}
if(EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.flashPoint))
{
FlashPointRealize();
@ -856,7 +1045,6 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void enemyTurnSettle(int settleTurn)
{
EnemyState.shieldValue = 0;
foreach (var key in EnemyState.abnormalCondition.Keys.ToList())
{
EnemyState.abnormalCondition[key].SettleEnemy(this);
@ -865,6 +1053,11 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
}
public void enemyShieldSettle(int settleTurn)
{
EnemyState.shieldValue = 0;
}
public void enemyTurnBeginSettle(int settleTurn)
{
EnemyState.shieldValue = 0;
@ -907,9 +1100,11 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
//施加新Buff
public void AddEnemyAbnormalCondition(string condition, int value)
{
{
Debug.Log(condition);
if(BuffDataManager.Instance.abnormalCondition.ContainsKey(condition))
{
Debug.Log(condition+" success");
EnemyState.abnormalCondition.Add(condition, BuffDataManager.Instance.abnormalCondition[condition].NewBuff(value));
}
}
@ -970,6 +1165,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
//闪位实现
public void FlashPointRealize()
{
Debug.Log("654654564");
HashSet <MapUnity> targetNodeList= new HashSet<MapUnity>();
targetNodeList.Add(GameManager.Instance.X[positionX].Y[positionY]);
getNodeTools.getCircleNodeForEnemy(targetNodeList,1);

286
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/HoodWanderer.cs

@ -0,0 +1,286 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class HoodWanderer : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Shoot(), 0.3f },
{ new EnemyAction_ShootAndPollute(), 0.4f },
{ new EnemyActionAction_Shield(), 0.3f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Shoot();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Shoot:
yield return StartCoroutine(RemoteAttackAction());
break;
case EnemyAction_ShootAndPollute:
yield return StartCoroutine(shootAndPolluteAction());
break;
case EnemyActionAction_Shield:
yield return StartCoroutine(shieldAction());
break;
}
}
IEnumerator shootAndPolluteAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
RandomPollute(getNodeTools.getAllPlayerNodes(), 3);
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
RandomPollute(getNodeTools.getAllPlayerNodes(), 3);
}
}
}
}
IEnumerator shieldAction()
{
enemyNode.sufferAbnormalCondition(AbnormalCondition.angerUpperDamage,3);
enemyNode.EnemyState.shieldValue += enemyNode.ShieldCalculation(5);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if(enemyNode.getStepRange() + 1<= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator RemoteAttackAction()
{
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.immunity, 1);
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.banStep, 1);
//enemyNode.sufferAbnormalCondition(AbnormalCondition.immunity, 1);
enemyNode.sufferAbnormalCondition(AbnormalCondition.boom, 1);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
}
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if(toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage),enemyNode);
}
}

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkeletonArcher.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/HoodWanderer.cs.meta

273
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ParasiticMushroom.cs

@ -0,0 +1,273 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ParasiticMushroom : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Attack(), 0.4f },
{ new EnemyAction_Parasitism(), 0.4f },
{ new EnemyAction_AttackAndShield(), 0.2f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
case EnemyAction_Parasitism:
yield return StartCoroutine(MeleeAttackAndParasitism());
break;
case EnemyAction_AttackAndShield:
yield return StartCoroutine(MeleeAttackAndShield());
break;
}
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
}
}
IEnumerator MeleeAttackAndParasitism()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.parasitism, 1);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.parasitism, 1);
}
}
}
}
IEnumerator MeleeAttackAndShield()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(8);
enemyNode.EnemyState.shieldValue += enemyNode.ShieldCalculation(7);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(8);
enemyNode.EnemyState.shieldValue += enemyNode.ShieldCalculation(7);
}
}
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage(int damage)
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ParasiticMushroom.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bda1c3f001b47d74f86c660612824f66
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

273
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ShatteringFistMushroom.cs

@ -0,0 +1,273 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class ShatteringFistMushroom : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Attack(), 0.5f },
{ new EnemyAction_BanStep(), 0.25f },
{ new EnemyAction_Vulnerable(), 0.25f }
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
case EnemyAction_BanStep:
yield return StartCoroutine(MeleeAttackAndBanStepAction());
break;
case EnemyAction_Vulnerable:
yield return StartCoroutine(MeleeAttackAndVulnerableAction());
break;
}
}
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
}
}
}
}
IEnumerator MeleeAttackAndBanStepAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.banStep, 1);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(enemyNode.EnemyState.damage);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.banStep, 1);
}
}
}
}
IEnumerator MeleeAttackAndVulnerableAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(7);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.vulnerable, 1);
}
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage(7);
Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.vulnerable, 1);
}
}
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage(int damage)
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/ShatteringFistMushroom.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a9cfb911258ed7d4a80872da17003456
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

231
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullGuardian.cs

@ -1,16 +1,27 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SkullGuardian : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Attack(), 1.0f }
};
private void Start()
{
@ -19,79 +30,40 @@ public class SkullGuardian : MonoBehaviour
private void Update()
{
//时时寻路
if (GameManager.Instance.complete == true && TurnMaster.Instance.turn == TurnMaster.Turn.playerTurn)
{
if (lastTime > 0)
{
lastTime -= Time.deltaTime;
}
else
{
/*enemyNode.FindPath();
if(enemyNode .pasth .Count >1)
{
enemyNode.canMove = true;
}
else
{
enemyNode.canMove = false;
}*/
//重置时间标量
lastTime = time;
}
}
}
public void SkullGuardianTurn()
{
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void SkullGuardianAction()
{
//回合动作
switch (enemyNode.planAction)
{
case EnemyNode.PlanAction.attack:
//攻击
AttackDamage();
Debug.Log("攻击");
break;
case EnemyNode.PlanAction.sheield:
//回盾
enemyNode.EnemyState.shieldValue += enemyNode.EnemyState.upShieldValue;
enemyNode.EnemyState.currentSkillCoolDown = enemyNode.EnemyState.maxSkillCoolDown;
Debug.Log("回盾");
break;
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Attack();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
}
public void SkullGuardianMove()
{
if (enemyNode.pasth.Count >= 2&& enemyNode.canMove)
{
enemyNode.Move(enemyNode.pasth[0], enemyNode.EnemyState.stepRange);
}
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
yield return StartCoroutine(MeleeAttackAction());
}
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Attack:
yield return StartCoroutine(MeleeAttackAction());
break;
}
IEnumerator JudgNextActionCoroutine()
{
yield return StartCoroutine(JudgeActionCoroutine());
//下回合意图
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
Debug.Log(1);
}
IEnumerator MeleeAttackAction()
@ -99,8 +71,10 @@ public class SkullGuardian : MonoBehaviour
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
AttackDamage();
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.vulnerable, 1);
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
else
{
@ -109,26 +83,53 @@ public class SkullGuardian : MonoBehaviour
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
AttackDamage();
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.vulnerable, 1);
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
}
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
if(enemyNode.getStepRange() + 1<= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
@ -140,6 +141,7 @@ public class SkullGuardian : MonoBehaviour
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
@ -147,50 +149,109 @@ public class SkullGuardian : MonoBehaviour
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkullGuardianMoveCoroutine(disNode));
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator RemoteAttackAction()
{
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.immunity, 1);
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.banStep, 1);
//enemyNode.sufferAbnormalCondition(AbnormalCondition.immunity, 1);
enemyNode.sufferAbnormalCondition(AbnormalCondition.boom, 1);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
}
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
Debug.Log("4+46+54");
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkullGuardianMoveCoroutine( MapUnity endMapUnity )//移动到位置
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while ( true )
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if(dDistance < 0.1f)
if (dDistance < 0.1f)
{
break;
}
this.gameObject .transform .position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void NextTurnIntention()
{
if (enemyNode.pasth.Count <= 1)
{
enemyNode.canMove = false;
}
else
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
enemyNode.canMove = true;
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
if(enemyNode .EnemyState .currentSkillCoolDown <=0)
for (int c = 0; c < toColourPool.Count; c++)
{
enemyNode.planAction = EnemyNode.PlanAction.sheield;
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if(toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
else
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.planAction = EnemyNode.PlanAction.attack;
enemyNode.canLineAppre = true;
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()

2
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullGuardian.cs.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 159aa5c40181a574ea93a2306670a2c8
guid: 1a948ef3ecbf4ce4bb3cc1cb6d93526b
MonoImporter:
externalObjects: {}
serializedVersion: 2

267
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullMage.cs

@ -0,0 +1,267 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SkullMage : MonoBehaviour
{
EnemyNode enemyNode;
[Header("瞄准射线图层剔除")]
public LayerMask layerMask;
[Header("计数标量")]
public float time;
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Shoot(), 0.2f },
{ new EnemyAction_ShootAndPollute(), 0.8f },
};
private void Start()
{
enemyNode = GetComponent<EnemyNode>();
}
private void Update()
{
}
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Shoot();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Shoot:
yield return StartCoroutine(RemoteAttackAction());
break;
case EnemyAction_ShootAndPollute:
yield return StartCoroutine(shootAndPolluteAction());
break;
}
}
IEnumerator shootAndPolluteAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
RandomPollute(getNodeTools.getAllPlayerNodes(), 4);
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
RandomPollute(getNodeTools.getAllPlayerNodes(), 4);
}
}
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
IEnumerator moveTowardsPlayer()
{
enemyNode.FindPathTowardsPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
IEnumerator moveAwayFromPlayer()
{
enemyNode.FindPathAwayFromPlayer();
for (int i = 1; i < getMoveStep(); i++)
{
if (enemyNode.pasth.Count > 1)
{
yield return StartCoroutine(moveOneStep(enemyNode.pasth[i]));
}
}
}
private int getMoveStep()
{
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
else
{
return enemyNode.pasth.Count;
}
}
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;
enemyNode.positionX = disNode.locationX;
enemyNode.positionY = disNode.locationY;
disNode.enemyNode = enemyNode;
yield return StartCoroutine(SkeletonArcherMoveCoroutine(disNode));
}
IEnumerator RemoteAttackAction()
{
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.immunity, 1);
//Usermanager.Instance.SufferPlayerAbnormalCondition(AbnormalCondition.banStep, 1);
//enemyNode.sufferAbnormalCondition(AbnormalCondition.immunity, 1);
enemyNode.sufferAbnormalCondition(AbnormalCondition.boom, 1);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(moveTowardsPlayer());
}
}
IEnumerator JudgNextActionCoroutine()
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.sleep))
{
}
else
{
yield return StartCoroutine(JudgeActionCoroutine());
}
//下回合意图
ArcherAim();
//让下一个敌人运动
EnemyManager.Instance.enemyTurnState = EnemyManager.EnemyTurnState.runing;
}
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
{
break;
}
this.gameObject.transform.position = Vector3.Lerp(this.gameObject.transform.position, endMapUnity.transform.position, Time.deltaTime * moveSpeed);
yield return 0;
}
//判断腐蚀
enemyNode.CorrodeRealize(endMapUnity);
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
toColourPool.Add(currentNode);
for (int i = 0; i < currentNode.unitPool.Count; i++)
{
if (currentNode.unitPool[i] != null && currentNode.unitPool[i].blocked == false)
{
toColourPool.Add(currentNode.unitPool[i]);
}
}
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if (toColourPool[c].playerOn)
{
AttackDamage();
}
}
}
}
public void ArcherAim()
{
Vector3 dir = GameManager.Instance.player.transform.position - this.transform.position;
Ray ray = new Ray(this.transform.position, dir);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullMage.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6c4186aa69e2c5b488336a9cb2d98064
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

92
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkeletonArcher.cs → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullWarlock.cs

@ -1,8 +1,9 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SkeletonArcher : MonoBehaviour
public class SkullWarlock : MonoBehaviour
{
EnemyNode enemyNode;
@ -14,6 +15,14 @@ public class SkeletonArcher : MonoBehaviour
float lastTime = 0;
[Header("移动速度标量")]
public float moveSpeed;
//怪物行动
public EnemyAction enemyAction;
public Dictionary<EnemyAction, float> actionPool = new Dictionary<EnemyAction, float>()
{
{ new EnemyActionAction_Shoot(), 0.5f },
{ new EnemyActionAction_Shield(), 0.5f },
};
private void Start()
{
@ -22,28 +31,71 @@ public class SkeletonArcher : MonoBehaviour
private void Update()
{
}
public void skeletonArcherTurn()
public void enemyTurn()
{
StartCoroutine(JudgNextActionCoroutine());
}
public void ChooseAction()
{
enemyAction = new EnemyActionAction_Shoot();
enemyAction = enemyNode.GetRandomAction(actionPool);
Debug.Log("行动是:" + enemyAction);
enemyNode.enemyUIBar.SwitchIntention(enemyAction);
}
IEnumerator JudgeActionCoroutine()//等移动到位置就判断是否还能走
{
if (enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
Debug.Log("真正行动是:" + enemyAction);
switch (enemyAction)
{
case EnemyActionAction_Shoot:
yield return StartCoroutine(RemoteAttackAction());
break;
case EnemyActionAction_Shield:
yield return StartCoroutine(shieldAndPolluteAction());
break;
}
}
IEnumerator shieldAndPolluteAction()
{
enemyNode.EnemyState.shieldValue += enemyNode.ShieldCalculation(5);
RandomPollute(getNodeTools.getAllPlayerNodes(), 4);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
yield return StartCoroutine(moveAwayFromPlayer());
}
else
{
yield return StartCoroutine(RemoteAttackAction());
yield return StartCoroutine(moveTowardsPlayer());
}
}
public void RandomPollute(HashSet<MapUnity> set, int num)
{
HashSet<MapUnity> randomNodes = MathTool.GetRandomElements(set, num);
foreach (var node in randomNodes)
{
node.whoColour = MapUnity.WhoColour.enemyColour;
}
GameManager.Instance.SyncColourCountUI();
}
@ -73,7 +125,7 @@ public class SkeletonArcher : MonoBehaviour
private int getMoveStep()
{
if(enemyNode.getStepRange() + 1<= enemyNode.pasth.Count)
if (enemyNode.getStepRange() + 1 <= enemyNode.pasth.Count)
{
return enemyNode.getStepRange() + 1;
}
@ -103,9 +155,13 @@ public class SkeletonArcher : MonoBehaviour
//enemyNode.sufferAbnormalCondition(AbnormalCondition.immunity, 1);
enemyNode.sufferAbnormalCondition(AbnormalCondition.boom, 1);
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
if (getNodeTools.canRemoteAttack(currentNode,enemyNode.EnemyState.attackRange))
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
AttackDamage();
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
{
AttackDamage();
}
yield return new WaitForSeconds(1);
yield return StartCoroutine(moveAwayFromPlayer());
}
@ -115,7 +171,7 @@ public class SkeletonArcher : MonoBehaviour
}
}
IEnumerator JudgNextActionCoroutine()
{
@ -136,7 +192,7 @@ public class SkeletonArcher : MonoBehaviour
IEnumerator SkeletonArcherMoveCoroutine(MapUnity endMapUnity)//移动到位置
{
while (true)
{
{
float dDistance = Vector3.Distance(this.gameObject.transform.position, endMapUnity.transform.position);
if (dDistance < 0.1f)
@ -153,10 +209,10 @@ public class SkeletonArcher : MonoBehaviour
yield break;
}
public void ArcherColour(MapUnity currentNode)
{
{
List<MapUnity> toColourPool = new List<MapUnity>();
if (currentNode.blocked == false)
@ -173,9 +229,9 @@ public class SkeletonArcher : MonoBehaviour
for (int c = 0; c < toColourPool.Count; c++)
{
if (toColourPool.Count > 0)
{
{
toColourPool[c].whoColour = MapUnity.WhoColour.enemyColour;
if(toColourPool[c].playerOn)
if (toColourPool[c].playerOn)
{
AttackDamage();
}
@ -191,11 +247,11 @@ public class SkeletonArcher : MonoBehaviour
{
enemyNode.lineAim.GetComponent<EnemyAimLine>().aimGamgObject = raycastHit.collider.gameObject;
}
}
public void AttackDamage()
{
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage),enemyNode);
Usermanager.Instance.SufferDamage(enemyNode.DamageCalculation(enemyNode.EnemyState.damage), enemyNode);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/SkullWarlock.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e038ef7935f7ddf4397b3ea4ec19e4f2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs

@ -44,7 +44,6 @@ public class EnemyAction
//½üÕ½
public virtual void MeleeAttackRange(EnemyNode enemyNode)
{
Debug.Log("attack");
isAoe = false;
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.getStepRange()+1, enemyNode.rangePool);
}

18
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_AttackAndShield.cs

@ -0,0 +1,18 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyAction_AttackAndShield : EnemyAction
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_AttackAndShield.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 12592c52a58d234499393729b0f2e197
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

18
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_BanStep.cs

@ -0,0 +1,18 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyAction_BanStep : EnemyAction
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_BanStep.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 480d13c96b7e04843ad2713607f8f23f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

7
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_Nothing.cs

@ -0,0 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyAction_Nothing : EnemyAction
{
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction_Nothing.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 628a9c5762584cc47b6291c51b764d34
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save