dev45-1218 #76

Merged
45 merged 6 commits from dev45-1218 into dev-1217 12 months ago
  1. 2
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/TNTBurket.asset
  2. 710
      ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset
  3. 1
      ColorlessWorld-2024-4-2/Assets/GameDate/PlayerState.asset
  4. 3
      ColorlessWorld-2024-4-2/Assets/Prefab/MapNodePrefab/MapUnity _2.prefab
  5. 2
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab.meta
  6. 13
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Boom.prefab
  7. 0
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Boom.prefab.meta
  8. 14
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/TntBurket.prefab
  9. 0
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/TntBurket.prefab.meta
  10. 68
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab
  11. 7
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab.meta
  12. 377
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Whirlpool.prefab
  13. 0
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Whirlpool.prefab.meta
  14. 14
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/tree.prefab
  15. 0
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/tree.prefab.meta
  16. 6820
      ColorlessWorld-2024-4-2/Assets/Scenes/ChooseWeapon.unity
  17. 9
      ColorlessWorld-2024-4-2/Assets/Scenes/Level3.unity
  18. 9
      ColorlessWorld-2024-4-2/Assets/Scenes/Level4.unity
  19. 51
      ColorlessWorld-2024-4-2/Assets/Scenes/Map.unity
  20. 57
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  21. 2261
      ColorlessWorld-2024-4-2/Assets/Scenes/StartMainScence.unity
  22. 27
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs
  23. 32
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/TurnMaster.cs
  24. 14
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlackSheep.cs
  25. 54
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs
  26. 19
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyPool.cs
  27. 80
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BoomNode.cs
  28. 26
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TNTBucketNode.cs
  29. 28
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TreeNode.cs
  30. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI.meta
  31. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI/BlockUIBar.cs
  32. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI/BlockUIBar.cs.meta
  33. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode.meta
  34. 1
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/BlockNode.cs
  35. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/BlockNode.cs.meta
  36. 136
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Boom.cs
  37. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Boom.cs.meta
  38. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Box.cs
  39. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Box.cs.meta
  40. 45
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/TNTBucket.cs
  41. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/TNTBucket.cs.meta
  42. 31
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Tree.cs
  43. 0
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Tree.cs.meta
  44. 25
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs
  45. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs.meta
  46. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode.meta
  47. 75
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode/ItemTakerOverNode.cs
  48. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode/ItemTakerOverNode.cs.meta
  49. 4
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/Whirlpool.cs
  50. 10
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs
  51. 6
      ColorlessWorld-2024-4-2/Assets/Scripts/ForwardCamera.cs
  52. 89
      ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs
  53. 886
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LeveGeneraterNew.cs
  54. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LeveGeneraterNew.cs.meta
  55. 17
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelDevelopManager.cs
  56. 139
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelGenerator.cs
  57. 52
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelNode.cs
  58. 163
      ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs
  59. 29
      ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs
  60. 69
      ColorlessWorld-2024-4-2/Assets/Scripts/PlayerManager/PlayerStatsManager.cs
  61. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Data_SO/LevelDevelopData_SO.cs
  62. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Data_SO/PlayerState_SO.cs
  63. 8
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI.meta
  64. 18
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI/MouseSetActiveUI.cs
  65. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI/MouseSetActiveUI.cs.meta
  66. 18
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs
  67. 19
      ColorlessWorld-2024-4-2/Assets/Scripts/UI/CardActiveSort/CardActiveSort.cs
  68. 64
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/ObjectItemSettleManager.cs
  69. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/ObjectItemSettleManager.cs.meta
  70. 77
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/SettlementManager.cs
  71. 5
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/EnemyPoolToLevel.csv
  72. 7
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/EnemyPoolToLevel.csv.meta
  73. 5
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/LevelMapToItem.csv
  74. 7
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/LevelMapToItem.csv.meta
  75. 2
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv
  76. 7
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv.meta

2
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/TNTBurket.asset

@ -16,7 +16,7 @@ MonoBehaviour:
enemyIcon: {fileID: 0}
stepRange: 0
stepRangeMultiplier: 1
speed: 0
speed: 2
maxMoveCoolDown: 0
currentMoveCoolDown: 0
shieldValue: 0

710
ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset

@ -13,692 +13,546 @@ MonoBehaviour:
m_Name: LevelState_1
m_EditorClassIdentifier:
levelStep: 0
currentPoint: {x: 0, y: 2}
mapLevel: 1
currentPoint: {x: 1, y: 1}
levelSaveMap:
- levelDataList:
- roomType: 0
- roomType: 13
isUse: 0
passBy: 0
nodePos: {x: -7.5830135, y: 0.059705734, z: -8.679104}
nodePos: {x: -7.5830135, y: 0.05970478, z: -7.669101}
line: 0
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 0
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 13
isUse: 1
passBy: 0
nodePos: {x: -7.583021, y: 0.05970764, z: -7.679106}
passBy: 1
nodePos: {x: -7.583021, y: 0.059706688, z: -6.669104}
line: 0
column: 1
fatherLevelNodes: []
nextLevelNodes:
- {x: 1, y: 1}
- {x: 1, y: 0}
- roomType: 0
isUse: 1
passBy: 1
nodePos: {x: -7.583029, y: 0.05970955, z: -6.679107}
line: 0
column: 2
fatherLevelNodes: []
nextLevelNodes:
- {x: 1, y: 3}
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -7.5830364, y: 0.059711456, z: -5.679109}
line: 0
column: 3
fatherLevelNodes: []
nextLevelNodes:
- {x: 1, y: 3}
- {x: 1, y: 4}
- roomType: 0
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 13
isUse: 0
passBy: 0
nodePos: {x: -7.583044, y: 0.059713364, z: -4.679111}
nodePos: {x: -7.583029, y: 0.059708595, z: -5.669105}
line: 0
column: 4
column: 2
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 3
isUse: 1
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: -5.4530487, y: 0.059719086, z: -8.679108}
nodePos: {x: -5.5830326, y: 0.05971241, z: -7.669103}
line: 1
column: 0
fatherLevelNodes:
- {x: 0, y: 1}
nextLevelNodes:
- {x: 2, y: 1}
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool: weak
enemyList:
- 2001
mapIndex: 100001
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -5.4530506, y: 0.059720993, z: -7.679108}
nodePos: {x: -5.5830364, y: 0.059714317, z: -6.669105}
line: 1
column: 1
fatherLevelNodes:
- {x: 0, y: 1}
nextLevelNodes:
- {x: 2, y: 1}
- {x: 2, y: 0}
- {x: 2, y: 2}
fightEenemyPool: weak
enemyList:
- 2002
- 2002
mapIndex: 100001
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: -5.4530544, y: 0.0597229, z: -6.679111}
nodePos: {x: -5.583042, y: 0.059716225, z: -5.669106}
line: 1
column: 2
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: -5.45306, y: 0.059724808, z: -5.679114}
line: 1
column: 3
fatherLevelNodes:
- {x: 0, y: 2}
- {x: 0, y: 3}
nextLevelNodes:
- {x: 2, y: 2}
- {x: 2, y: 4}
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -5.453064, y: 0.059726715, z: -4.679116}
line: 1
column: 4
fatherLevelNodes:
- {x: 0, y: 3}
nextLevelNodes:
- {x: 2, y: 4}
fightEenemyPool: weak
enemyList:
- 2001
mapIndex: 100001
- levelDataList:
- roomType: 5
isUse: 0
passBy: 0
nodePos: {x: -3.3230686, y: 0.059732437, z: -8.679108}
line: 2
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 3
- roomType: 12
isUse: 1
passBy: 0
nodePos: {x: -3.3230724, y: 0.059734344, z: -7.679109}
nodePos: {x: -3.5830479, y: 0.05972004, z: -7.669102}
line: 2
column: 1
column: 0
fatherLevelNodes:
- {x: 1, y: 0}
- {x: 1, y: 1}
nextLevelNodes:
- {x: 3, y: 0}
- roomType: 5
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 6
isUse: 1
passBy: 0
nodePos: {x: -3.3230762, y: 0.05973625, z: -6.679111}
nodePos: {x: -3.5830517, y: 0.059721947, z: -6.669105}
line: 2
column: 2
column: 1
fatherLevelNodes:
- {x: 1, y: 1}
- {x: 1, y: 3}
nextLevelNodes:
- {x: 3, y: 1}
- {x: 3, y: 2}
- roomType: 5
isUse: 0
passBy: 0
nodePos: {x: -3.32308, y: 0.05973816, z: -5.679112}
line: 2
column: 3
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 0
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 11
isUse: 1
passBy: 0
nodePos: {x: -3.3230858, y: 0.059740067, z: -4.679114}
nodePos: {x: -3.5830574, y: 0.059723854, z: -5.669108}
line: 2
column: 4
column: 2
fatherLevelNodes:
- {x: 1, y: 3}
- {x: 1, y: 4}
- {x: 1, y: 1}
nextLevelNodes:
- {x: 3, y: 3}
- {x: 3, y: 4}
- {x: 3, y: 2}
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 5
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -1.1930923, y: 0.05974579, z: -8.679106}
nodePos: {x: -1.5830636, y: 0.05972767, z: -7.669103}
line: 3
column: 0
fatherLevelNodes:
- {x: 2, y: 1}
fatherLevelNodes: []
nextLevelNodes:
- {x: 4, y: 0}
fightEenemyPool: weak
enemyList:
- 2002
- 2002
mapIndex: 100001
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -1.1930962, y: 0.059747696, z: -7.679107}
nodePos: {x: -1.5830674, y: 0.059729576, z: -6.669105}
line: 3
column: 1
fatherLevelNodes:
- {x: 2, y: 2}
fatherLevelNodes: []
nextLevelNodes:
- {x: 4, y: 0}
- roomType: 5
- {x: 4, y: 1}
fightEenemyPool: weak
enemyList:
- 2004
- 2005
- 2003
- 2003
mapIndex: 100001
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -1.1931, y: 0.059749603, z: -6.679109}
nodePos: {x: -1.5830703, y: 0.059731483, z: -5.669107}
line: 3
column: 2
fatherLevelNodes:
- {x: 2, y: 2}
fatherLevelNodes: []
nextLevelNodes:
- {x: 4, y: 2}
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: -1.1931033, y: 0.05975151, z: -5.679111}
line: 3
column: 3
fatherLevelNodes:
- {x: 2, y: 4}
nextLevelNodes:
- {x: 4, y: 4}
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: -1.1931071, y: 0.059753418, z: -4.679114}
line: 3
column: 4
fatherLevelNodes:
- {x: 2, y: 4}
nextLevelNodes:
- {x: 4, y: 4}
fightEenemyPool: weak
enemyList:
- 2002
- 2002
mapIndex: 100002
- levelDataList:
- roomType: 5
- roomType: 10
isUse: 1
passBy: 0
nodePos: {x: 0.9368901, y: 0.05975914, z: -8.679108}
nodePos: {x: 0.41692686, y: 0.0597353, z: -7.669103}
line: 4
column: 0
fatherLevelNodes:
- {x: 3, y: 1}
- {x: 3, y: 0}
nextLevelNodes:
- {x: 5, y: 0}
- roomType: 3
isUse: 0
- {x: 5, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 8
isUse: 1
passBy: 0
nodePos: {x: 0.93688774, y: 0.059761047, z: -7.67911}
nodePos: {x: 0.41692448, y: 0.059737206, z: -6.669104}
line: 4
column: 1
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 3
fatherLevelNodes:
- {x: 3, y: 1}
nextLevelNodes:
- {x: 5, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 0.93688583, y: 0.059762955, z: -6.679111}
nodePos: {x: 0.41692352, y: 0.059739113, z: -5.669106}
line: 4
column: 2
fatherLevelNodes:
- {x: 3, y: 2}
nextLevelNodes:
- {x: 5, y: 3}
- roomType: 5
- {x: 5, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 7
isUse: 0
passBy: 0
nodePos: {x: 0.93688345, y: 0.059764862, z: -5.679114}
line: 4
column: 3
nodePos: {x: 2.416922, y: 0.059742928, z: -7.669101}
line: 5
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: 0.936883, y: 0.05976677, z: -4.679116}
line: 4
column: 4
fatherLevelNodes:
- {x: 3, y: 3}
- {x: 3, y: 4}
nextLevelNodes:
- {x: 5, y: 4}
- levelDataList:
- roomType: 1
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 7
isUse: 1
passBy: 0
nodePos: {x: 3.0668812, y: 0.05977249, z: -8.679108}
nodePos: {x: 2.4169211, y: 0.059744835, z: -6.669104}
line: 5
column: 0
column: 1
fatherLevelNodes:
- {x: 4, y: 0}
- {x: 4, y: 1}
- {x: 4, y: 2}
nextLevelNodes:
- {x: 6, y: 0}
- {x: 6, y: 1}
- roomType: 1
isUse: 0
passBy: 0
nodePos: {x: 3.0668805, y: 0.0597744, z: -7.679108}
line: 5
column: 1
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 4
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 7
isUse: 0
passBy: 0
nodePos: {x: 3.0668807, y: 0.059776306, z: -6.67911}
nodePos: {x: 2.4169207, y: 0.059746742, z: -5.669105}
line: 5
column: 2
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
isUse: 1
passBy: 0
nodePos: {x: 3.06688, y: 0.059778214, z: -5.679112}
line: 5
column: 3
fatherLevelNodes:
- {x: 4, y: 2}
nextLevelNodes:
- {x: 6, y: 4}
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: 3.0668788, y: 0.05978012, z: -4.679114}
line: 5
column: 4
fatherLevelNodes:
- {x: 4, y: 4}
nextLevelNodes:
- {x: 6, y: 4}
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 6
isUse: 1
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 5.1968794, y: 0.059785843, z: -8.679108}
nodePos: {x: 4.4169207, y: 0.059750557, z: -7.669101}
line: 6
column: 0
fatherLevelNodes:
- {x: 5, y: 0}
nextLevelNodes:
- {x: 7, y: 1}
- roomType: 6
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool: strong
enemyList: []
mapIndex:
- roomType: 2
isUse: 1
passBy: 0
nodePos: {x: 5.1968794, y: 0.05978775, z: -7.679109}
nodePos: {x: 4.4169207, y: 0.059752464, z: -6.669105}
line: 6
column: 1
fatherLevelNodes:
- {x: 5, y: 0}
- {x: 5, y: 1}
nextLevelNodes:
- {x: 7, y: 1}
- roomType: 6
- {x: 7, y: 0}
- {x: 7, y: 2}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 5.1968794, y: 0.059789658, z: -6.679112}
nodePos: {x: 4.4169207, y: 0.05975437, z: -5.669106}
line: 6
column: 2
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 6
isUse: 0
passBy: 0
nodePos: {x: 5.1968794, y: 0.059791565, z: -5.679115}
line: 6
column: 3
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 6
isUse: 1
passBy: 0
nodePos: {x: 5.1968794, y: 0.059793472, z: -4.679116}
line: 6
column: 4
fatherLevelNodes:
- {x: 5, y: 3}
- {x: 5, y: 4}
nextLevelNodes:
- {x: 7, y: 3}
- {x: 7, y: 4}
fightEenemyPool: strong
enemyList: []
mapIndex:
- levelDataList:
- roomType: 0
isUse: 0
- roomType: 8
isUse: 1
passBy: 0
nodePos: {x: 7.3268824, y: 0.059799194, z: -8.679108}
nodePos: {x: 6.4169235, y: 0.059758186, z: -7.669102}
line: 7
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 4
fatherLevelNodes:
- {x: 6, y: 1}
nextLevelNodes:
- {x: 8, y: 0}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 9
isUse: 1
passBy: 0
nodePos: {x: 7.3268833, y: 0.0598011, z: -7.67911}
nodePos: {x: 6.416924, y: 0.059760094, z: -6.669105}
line: 7
column: 1
fatherLevelNodes:
- {x: 6, y: 0}
- {x: 6, y: 1}
nextLevelNodes:
- {x: 8, y: 2}
- {x: 8, y: 1}
- roomType: 4
isUse: 0
passBy: 0
nodePos: {x: 7.326885, y: 0.05980301, z: -6.679111}
line: 7
column: 2
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 10
isUse: 1
passBy: 0
nodePos: {x: 7.3268857, y: 0.059804916, z: -5.679114}
nodePos: {x: 6.416925, y: 0.059762, z: -5.669108}
line: 7
column: 3
column: 2
fatherLevelNodes:
- {x: 6, y: 4}
- {x: 6, y: 1}
nextLevelNodes:
- {x: 8, y: 4}
- {x: 8, y: 2}
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: 7.326885, y: 0.059806824, z: -4.679115}
line: 7
column: 4
fatherLevelNodes:
- {x: 6, y: 4}
nextLevelNodes:
- {x: 8, y: 4}
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 1
isUse: 0
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: 9.456891, y: 0.059812546, z: -8.679108}
nodePos: {x: 8.41693, y: 0.059765816, z: -7.669103}
line: 8
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
nextLevelNodes:
- {x: 9, y: 0}
fightEenemyPool: strong
enemyList: []
mapIndex:
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: 9.456893, y: 0.059814453, z: -7.679108}
nodePos: {x: 8.416932, y: 0.059767723, z: -6.669105}
line: 8
column: 1
fatherLevelNodes:
- {x: 7, y: 1}
fatherLevelNodes: []
nextLevelNodes:
- {x: 9, y: 1}
- roomType: 0
fightEenemyPool: strong
enemyList: []
mapIndex:
- roomType: 1
isUse: 1
passBy: 0
nodePos: {x: 9.456895, y: 0.05981636, z: -6.67911}
nodePos: {x: 8.416934, y: 0.05976963, z: -5.669107}
line: 8
column: 2
fatherLevelNodes:
- {x: 7, y: 1}
- {x: 7, y: 3}
nextLevelNodes:
- {x: 9, y: 3}
- {x: 9, y: 2}
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 9.456898, y: 0.059818268, z: -5.679112}
line: 8
column: 3
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 9.456898, y: 0.059820175, z: -4.679116}
line: 8
column: 4
fatherLevelNodes:
- {x: 7, y: 3}
- {x: 7, y: 4}
nextLevelNodes:
- {x: 9, y: 3}
- {x: 9, y: 2}
fightEenemyPool: elite
enemyList: []
mapIndex:
- levelDataList:
- roomType: 1
isUse: 0
- roomType: 9
isUse: 1
passBy: 0
nodePos: {x: 11.586908, y: 0.059825897, z: -8.679108}
nodePos: {x: 10.41694, y: 0.059773445, z: -7.669103}
line: 9
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
fatherLevelNodes:
- {x: 8, y: 0}
nextLevelNodes:
- {x: 10, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 11.586911, y: 0.059827805, z: -7.679109}
nodePos: {x: 10.416943, y: 0.059775352, z: -6.669104}
line: 9
column: 1
fatherLevelNodes:
- {x: 8, y: 1}
nextLevelNodes:
- {x: 10, y: 2}
- roomType: 1
- {x: 10, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 6
isUse: 1
passBy: 0
nodePos: {x: 11.586914, y: 0.059829712, z: -6.679111}
nodePos: {x: 10.416943, y: 0.05977726, z: -5.669106}
line: 9
column: 2
fatherLevelNodes:
- {x: 8, y: 2}
nextLevelNodes:
- {x: 10, y: 2}
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: 11.58692, y: 0.05983162, z: -5.679112}
line: 9
column: 3
fatherLevelNodes:
- {x: 8, y: 2}
- {x: 8, y: 4}
nextLevelNodes:
- {x: 10, y: 3}
- {x: 10, y: 2}
- roomType: 4
isUse: 0
passBy: 0
nodePos: {x: 11.586924, y: 0.059833527, z: -4.679114}
line: 9
column: 4
fatherLevelNodes: []
nextLevelNodes: []
- {x: 10, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 13.71693, y: 0.05983925, z: -8.679108}
nodePos: {x: 12.416952, y: 0.059781075, z: -7.669101}
line: 10
column: 0
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool: strong
enemyList: []
mapIndex:
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 13.716934, y: 0.059841156, z: -7.679107}
line: 10
column: 1
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 13.716938, y: 0.059843063, z: -6.679109}
nodePos: {x: 12.416956, y: 0.059782982, z: -6.669105}
line: 10
column: 2
column: 1
fatherLevelNodes:
- {x: 9, y: 0}
- {x: 9, y: 1}
- {x: 9, y: 3}
- {x: 9, y: 2}
nextLevelNodes:
- {x: 11, y: 1}
- {x: 11, y: 2}
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: 13.71694, y: 0.05984497, z: -5.679113}
line: 10
column: 3
fatherLevelNodes:
- {x: 9, y: 3}
nextLevelNodes:
- {x: 11, y: 2}
fightEenemyPool: strong
enemyList: []
mapIndex:
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 13.716942, y: 0.059846878, z: -4.679115}
nodePos: {x: 12.416958, y: 0.05978489, z: -5.669107}
line: 10
column: 4
column: 2
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool: strong
enemyList: []
mapIndex:
- levelDataList:
- roomType: 4
- roomType: 8
isUse: 0
passBy: 0
nodePos: {x: 15.846952, y: 0.0598526, z: -8.67911}
nodePos: {x: 14.416967, y: 0.059788704, z: -7.669103}
line: 11
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 8
isUse: 1
passBy: 0
nodePos: {x: 15.846956, y: 0.059854507, z: -7.67911}
nodePos: {x: 14.416971, y: 0.05979061, z: -6.669107}
line: 11
column: 1
fatherLevelNodes:
- {x: 10, y: 2}
- {x: 10, y: 1}
nextLevelNodes:
- {x: 12, y: 1}
- {x: 12, y: 2}
- roomType: 0
isUse: 1
passBy: 0
nodePos: {x: 15.84696, y: 0.059856415, z: -6.679111}
line: 11
column: 2
fatherLevelNodes:
- {x: 10, y: 3}
- {x: 10, y: 2}
nextLevelNodes:
- {x: 12, y: 3}
- {x: 12, y: 2}
- roomType: 0
isUse: 0
passBy: 0
nodePos: {x: 15.846966, y: 0.059858322, z: -5.679114}
line: 11
column: 3
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 1
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 8
isUse: 0
passBy: 0
nodePos: {x: 15.846968, y: 0.05986023, z: -4.679115}
nodePos: {x: 14.416973, y: 0.05979252, z: -5.669109}
line: 11
column: 4
column: 2
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 4
- roomType: 5
isUse: 0
passBy: 0
nodePos: {x: 17.976984, y: 0.05986595, z: -8.679108}
nodePos: {x: 16.41698, y: 0.059796333, z: -7.669105}
line: 12
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 4
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 5
isUse: 1
passBy: 0
nodePos: {x: 17.976994, y: 0.05986786, z: -7.679109}
nodePos: {x: 16.416985, y: 0.05979824, z: -6.669105}
line: 12
column: 1
fatherLevelNodes:
- {x: 11, y: 1}
nextLevelNodes:
- {x: 13, y: 2}
- {x: 13, y: 2}
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 17.977, y: 0.059869766, z: -6.679111}
line: 12
column: 2
fatherLevelNodes:
- {x: 11, y: 1}
- {x: 11, y: 2}
nextLevelNodes:
- {x: 13, y: 2}
- {x: 13, y: 2}
- roomType: 4
isUse: 1
passBy: 0
nodePos: {x: 17.977009, y: 0.059871674, z: -5.679112}
line: 12
column: 3
fatherLevelNodes:
- {x: 11, y: 2}
nextLevelNodes:
- {x: 13, y: 2}
- roomType: 4
- {x: 13, y: 1}
fightEenemyPool:
enemyList: []
mapIndex:
- roomType: 5
isUse: 0
passBy: 0
nodePos: {x: 17.977015, y: 0.05987358, z: -4.679114}
nodePos: {x: 16.416985, y: 0.059800148, z: -5.669108}
line: 12
column: 4
column: 2
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool:
enemyList: []
mapIndex:
- levelDataList:
- roomType: 2
- roomType: 3
isUse: 0
passBy: 0
nodePos: {x: 20.107035, y: 0.059879303, z: -8.179108}
nodePos: {x: 18.417002, y: 0.059803963, z: -7.169103}
line: 13
column: 0
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 2
isUse: 0
passBy: 0
nodePos: {x: 20.10704, y: 0.05988121, z: -7.17911}
line: 13
column: 1
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 2
fightEenemyPool: Boss
enemyList: []
mapIndex:
- roomType: 3
isUse: 1
passBy: 0
nodePos: {x: 20.10705, y: 0.059883118, z: -6.179111}
nodePos: {x: 18.417011, y: 0.05980587, z: -6.169105}
line: 13
column: 2
column: 1
fatherLevelNodes:
- {x: 12, y: 3}
- {x: 12, y: 1}
- {x: 12, y: 1}
- {x: 12, y: 2}
- {x: 12, y: 2}
nextLevelNodes: []
- roomType: 2
isUse: 0
passBy: 0
nodePos: {x: 20.107058, y: 0.059885025, z: -5.179113}
line: 13
column: 3
fatherLevelNodes: []
nextLevelNodes: []
- roomType: 2
fightEenemyPool: Boss
enemyList: []
mapIndex:
- roomType: 3
isUse: 0
passBy: 0
nodePos: {x: 20.107065, y: 0.059886932, z: -4.179115}
nodePos: {x: 18.417017, y: 0.059807777, z: -5.169107}
line: 13
column: 4
column: 2
fatherLevelNodes: []
nextLevelNodes: []
fightEenemyPool: weak
fightEenemyPool: Boss
enemyList: []
mapIndex:

1
ColorlessWorld-2024-4-2/Assets/GameDate/PlayerState.asset

@ -23,5 +23,6 @@ MonoBehaviour:
currentHP: 68
cardRewardNumToChoose: 0
cardRewardNumToGget: 0
canColorCount: 20
castRange: 2
money: 0

3
ColorlessWorld-2024-4-2/Assets/Prefab/MapNodePrefab/MapUnity _2.prefab

@ -556,6 +556,9 @@ MonoBehaviour:
- {fileID: 0}
locationX: 0
locationY: 0
cubeQ: 0
cubeS: 0
cubeR: 0
compalte: 0
influenced: 0
infHighLight: 0

2
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree.meta → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8530888d5a27b2741a53af50312ea8fe
guid: d568482e910ee3943abf3fad34ef25ae
folderAsset: yes
DefaultImporter:
externalObjects: {}

13
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/Boom.prefab → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Boom.prefab

@ -42,6 +42,7 @@ GameObject:
- component: {fileID: 6047049870113643063}
- component: {fileID: 4354208083307919355}
- component: {fileID: 1659492356731567997}
- component: {fileID: 2413313573070466585}
m_Layer: 0
m_Name: Boom
m_TagString: Untagged
@ -175,6 +176,18 @@ MonoBehaviour:
damage: 4
damageParticle: {fileID: 0}
particlePoint: {fileID: 213849091084324756}
--- !u!114 &2413313573070466585
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &8227655768270691818
GameObject:
m_ObjectHideFlags: 0

0
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/Boom.prefab.meta → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Boom.prefab.meta

14
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/TntBurket.prefab → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/TntBurket.prefab

@ -42,6 +42,7 @@ GameObject:
- component: {fileID: 6047049870113643063}
- component: {fileID: 4354208083307919355}
- component: {fileID: 7413273311470108406}
- component: {fileID: 1630748448776617996}
m_Layer: 0
m_Name: TntBurket
m_TagString: Untagged
@ -171,3 +172,16 @@ MonoBehaviour:
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!114 &1630748448776617996
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3}
m_Name:
m_EditorClassIdentifier:
takeOverType: 0

0
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/TntBurket.prefab.meta → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/TntBurket.prefab.meta

68
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/Whirlpool.prefab → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab

@ -41,9 +41,10 @@ GameObject:
m_Component:
- component: {fileID: 6047049870113643063}
- component: {fileID: 4354208083307919355}
- component: {fileID: 3998761273940534422}
- component: {fileID: 6425500129360686181}
- component: {fileID: 327044631283834333}
m_Layer: 0
m_Name: Whirlpool
m_Name: Vacancy
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -107,7 +108,7 @@ SpriteRenderer:
m_SortingLayer: 0
m_SortingOrder: 2
m_Sprite: {fileID: 21300000, guid: f9ca4d2a420a8f14b8ff292551fc0001, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Color: {r: 1, g: 1, b: 1, a: 0}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
@ -117,7 +118,7 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!114 &3998761273940534422
--- !u!114 &6425500129360686181
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -126,6 +127,63 @@ MonoBehaviour:
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e1d4d1a606d36b43ae3dd2b9a98896f, type: 3}
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3}
m_Name:
m_EditorClassIdentifier:
takeOverType: 0
blockType: 2
--- !u!114 &327044631283834333
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bc7c825b2060cb44ab9a88f267adf20d, type: 3}
m_Name:
m_EditorClassIdentifier:
templateEnemyState: {fileID: 11400000, guid: b991b3f0500bd0c439d1a956c497c4cb, type: 2}
EnemyState: {fileID: 0}
positionX: 0
positionY: 0
pasth: []
oppositePasth: []
moveType: 0
rangePool: []
aoeRangePool: []
stateText:
jumpHeight: 0
posCount: 0
jumpSpeed: 0
speedCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
enemyType: 1
enemyScript: 0
lineAim: {fileID: 0}
canLineAppre: 0
disableAttack: {fileID: 0}
enemyUIBar: {fileID: 0}
blockUIBar: {fileID: 0}
enemyUI: {fileID: 0}
followPoint: {fileID: 5563030652977735299}
bone: {fileID: 0}
bone_Re: {fileID: 0}
lasteHp: 0
anim: {fileID: 0}
meleeAttackSpeed: 0
meleeAttackSpeedCurve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
drawCardCount: 2

7
ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab.meta

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

377
ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Whirlpool.prefab

@ -0,0 +1,377 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &791787655015542540
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3507841565684247920}
- component: {fileID: 9192163590229144868}
- component: {fileID: 780701334481676733}
- component: {fileID: 4869295605941821901}
m_Layer: 0
m_Name: Canvas
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3507841565684247920
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791787655015542540}
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 5757482445103523294}
m_Father: {fileID: 6047049870113643063}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0.33}
m_SizeDelta: {x: 1, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!223 &9192163590229144868
Canvas:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791787655015542540}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 2
m_Camera: {fileID: 0}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
m_OverrideSorting: 0
m_OverridePixelPerfect: 0
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 0
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 801241541
m_SortingOrder: 0
m_TargetDisplay: 0
--- !u!114 &780701334481676733
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791787655015542540}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier:
m_UiScaleMode: 0
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 1
--- !u!114 &4869295605941821901
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791787655015542540}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreReversedGraphics: 1
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
--- !u!1 &2458175114420723768
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6047049870113643063}
- component: {fileID: 4354208083307919355}
- component: {fileID: 3998761273940534422}
- component: {fileID: 8508715456860937413}
m_Layer: 0
m_Name: Whirlpool
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &6047049870113643063
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 3.592, y: 1, z: -1.2736247}
m_LocalScale: {x: 0.9, y: 0.9, z: 0.9}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 3507841565684247920}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &4354208083307919355
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 2
m_Sprite: {fileID: 21300000, guid: f9ca4d2a420a8f14b8ff292551fc0001, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 0}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1.923, y: 1.879}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!114 &3998761273940534422
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8e1d4d1a606d36b43ae3dd2b9a98896f, type: 3}
m_Name:
m_EditorClassIdentifier:
posX: 0
posY: 0
holdColorCount: 7
holdeText: {fileID: 1137274421971972761}
holdPool: []
--- !u!114 &8508715456860937413
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3}
m_Name:
m_EditorClassIdentifier:
takeOverType: 0
blockType: 1
--- !u!1 &2956698644888883949
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 666127146751557209}
- component: {fileID: 4527207791058968114}
- component: {fileID: 1137274421971972761}
m_Layer: 0
m_Name: Text (Legacy)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &666127146751557209
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2956698644888883949}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5757482445103523294}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4527207791058968114
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2956698644888883949}
m_CullTransparentMesh: 1
--- !u!114 &1137274421971972761
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2956698644888883949}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: 846d2bc064c8faa4a858510d85bd7140, type: 3}
m_FontSize: 45
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 3
m_MaxSize: 45
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 7
--- !u!1 &8745365788768358793
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5757482445103523294}
- component: {fileID: 1406558591327533686}
- component: {fileID: 6754258001192525857}
m_Layer: 0
m_Name: Panel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5757482445103523294
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8745365788768358793}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 666127146751557209}
m_Father: {fileID: 3507841565684247920}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 99, y: 99}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1406558591327533686
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8745365788768358793}
m_CullTransparentMesh: 1
--- !u!114 &6754258001192525857
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8745365788768358793}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0.392}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1

0
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/Whirlpool.prefab.meta → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Whirlpool.prefab.meta

14
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/tree.prefab → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/tree.prefab

@ -42,6 +42,7 @@ GameObject:
- component: {fileID: 6047049870113643063}
- component: {fileID: 4354208083307919355}
- component: {fileID: 4840821816182305307}
- component: {fileID: 6425500129360686181}
m_Layer: 0
m_Name: tree
m_TagString: Untagged
@ -172,3 +173,16 @@ MonoBehaviour:
canMove: 0
planAction: 0
drawCardCount: 2
--- !u!114 &6425500129360686181
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2458175114420723768}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3}
m_Name:
m_EditorClassIdentifier:
takeOverType: 0

0
ColorlessWorld-2024-4-2/Assets/Prefab/CardPrefab/PlaceItem/Tree/tree.prefab.meta → ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/tree.prefab.meta

6820
ColorlessWorld-2024-4-2/Assets/Scenes/ChooseWeapon.unity

File diff suppressed because it is too large

9
ColorlessWorld-2024-4-2/Assets/Scenes/Level3.unity

@ -26816,6 +26816,7 @@ MonoBehaviour:
- Y: []
- Y: []
- Y: []
ToolX: []
character: 0
playerOn: {fileID: 0}
player: {fileID: 1809205617}
@ -41980,7 +41981,11 @@ MonoBehaviour:
mapUnity: {fileID: 887005656701010215, guid: ecde4b12dc4538b4caff9ada56c9ab30, type: 3}
line: 9
column: 5
lineForTool: 0
columnForTool: 0
generatePoint: {fileID: 514899946}
generatePointTest: {fileID: 0}
cameraObject: {fileID: 0}
lineOffSet: {x: 1, y: 0, z: 0}
columnOffSet: {x: 0, y: 0, z: 0.865}
enemyGenerateDataList: []
@ -42433,8 +42438,8 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
step: 2
startPositionX: 3
startPositionY: 0
startPositionX: 8
startPositionY: 2
chooseNodeLayerMask:
serializedVersion: 2
m_Bits: 64

9
ColorlessWorld-2024-4-2/Assets/Scenes/Level4.unity

@ -26818,6 +26818,7 @@ MonoBehaviour:
- Y: []
- Y: []
- Y: []
ToolX: []
character: 0
playerOn: {fileID: 0}
player: {fileID: 1809205617}
@ -41982,7 +41983,11 @@ MonoBehaviour:
mapUnity: {fileID: 887005656701010215, guid: ecde4b12dc4538b4caff9ada56c9ab30, type: 3}
line: 11
column: 6
lineForTool: 0
columnForTool: 0
generatePoint: {fileID: 514899946}
generatePointTest: {fileID: 0}
cameraObject: {fileID: 0}
lineOffSet: {x: 1, y: 0, z: 0}
columnOffSet: {x: 0, y: 0, z: 0.865}
enemyGenerateDataList: []
@ -42435,8 +42440,8 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
step: 2
startPositionX: 3
startPositionY: 0
startPositionX: 9
startPositionY: 3
chooseNodeLayerMask:
serializedVersion: 2
m_Bits: 64

51
ColorlessWorld-2024-4-2/Assets/Scenes/Map.unity

@ -3836,11 +3836,19 @@ MonoBehaviour:
- levelColumn: []
monsterIcon: {fileID: 1709634788, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
eliteMonsterIcon: {fileID: 929432110, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
eliteAndMonsterIcon: {fileID: 21300000, guid: 182c3c1bcddd9bd4a86cdaaf70e3d6b0,
type: 3}
bossIcon: {fileID: 865203525, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
shopIcon: {fileID: 865446097, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
campfireIcon: {fileID: -1693594073, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
incidentIcon: {fileID: -687936468, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
treasureIcon: {fileID: 558621461, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
forgingIcon: {fileID: 21300000, guid: 8ef49f8fd07fb3c4a9605ea6310de0bf, type: 3}
deleteCardIcon: {fileID: 21300000, guid: 2b6cbc9fb953ffc4eb02968e26d8f0cb, type: 3}
addCardIcon: {fileID: 21300000, guid: a8b50b2b4dd2d3b429b213be2a984e0b, type: 3}
resourceIcon: {fileID: 21300000, guid: 00234b60ba12993428c782adbed08140, type: 3}
potionIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
startIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3}
--- !u!1 &324633910
GameObject:
m_ObjectHideFlags: 0
@ -6387,7 +6395,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &516762761
RectTransform:
m_ObjectHideFlags: 0
@ -15897,6 +15905,7 @@ GameObject:
- component: {fileID: 1218299171}
- component: {fileID: 1218299173}
- component: {fileID: 1218299172}
- component: {fileID: 1218299174}
m_Layer: 0
m_Name: LevelGenerator
m_TagString: Untagged
@ -16034,7 +16043,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1218299170}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 866d367de8bbaf7429cd6671eca3869e, type: 3}
m_Name:
@ -16076,6 +16085,38 @@ MonoBehaviour:
- {fileID: 3078551910747698100, guid: 287ce1e0469b3834d9755ff86a081d6f, type: 3}
BossLevelPrefabList:
- {fileID: 1885417030641983838, guid: 901545c3f11968544836db15d83586de, type: 3}
enemyPoolFileName: EnemyPoolToLevel.csv
--- !u!114 &1218299174
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1218299170}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9357c62ffeceff4468da4ccfd5b937a3, type: 3}
m_Name:
m_EditorClassIdentifier:
generatorPoint: {fileID: 1941874171}
originalPoint: {x: 0, y: 0, z: 0}
generatorLine: 14
generatorColumn: 3
lineOffset: 1
columnOffset: 2
pathAmount: 3
treasureFloor: 5
forgingFloor: 11
singleFightFloor: 01000000060000000a000000
multipleFightFloor: 010000000300000008000000060000000a000000
rewardNodeFloor: 0200000007000000
randomRoomTypeWeightBase: 0c00000008000000090000000a0000000b00000006000000
randomRoomTypeWeightAttach: 06000000060000000c00000008000000090000000a0000000b000000
levelPrefab: {fileID: 980190143975240430, guid: c8c223db4c0d17645bca03489a39b721,
type: 3}
levelBossPrefab: {fileID: 980190143975240430, guid: e252a7011ae30f84da117f7e07d56996,
type: 3}
enemyPoolFileName: EnemyPoolToLevel.csv
--- !u!1 &1219222994
GameObject:
m_ObjectHideFlags: 0
@ -24691,7 +24732,7 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1941874171}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: 0, z: -0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@ -24699,7 +24740,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -139.4, y: -30.4}
m_AnchoredPosition: {x: -139.4, y: -20.3}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1946917990
@ -25138,7 +25179,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &1972940909
RectTransform:
m_ObjectHideFlags: 0

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

@ -3259,7 +3259,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!4 &173840243
@ -3329,7 +3328,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!135 &173840245
@ -7241,6 +7239,7 @@ Transform:
- {fileID: 1766672721}
- {fileID: 430040821}
- {fileID: 1607756701}
- {fileID: 940772628}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &350066633
@ -10568,7 +10567,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!114 &490441551
@ -10622,7 +10620,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!4 &490441552
@ -19848,6 +19845,51 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 932865024}
m_CullTransparentMesh: 1
--- !u!1 &940772627
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 940772628}
- component: {fileID: 940772629}
m_Layer: 0
m_Name: ObjectItemSettleManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &940772628
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 940772627}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 348176937}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &940772629
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 940772627}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 90ef6bc6f4b6bb14287b411057d7c3f3, type: 3}
m_Name:
m_EditorClassIdentifier:
readyToActivateEffects: []
--- !u!1 &942284930
GameObject:
m_ObjectHideFlags: 0
@ -39334,6 +39376,8 @@ MonoBehaviour:
type: 3}
isPass: 0
isTreasure: 0
itemCsvFilePath: LevelMapToItem.csv
itemLimitCsvFilePath: MapItemCount.csv
--- !u!4 &1690695890
Transform:
m_ObjectHideFlags: 0
@ -42079,6 +42123,7 @@ MonoBehaviour:
bookAnim: {fileID: 4328817775323300922}
paper: {fileID: 802147682}
whiteColorNode: {fileID: 1485211135}
itemPrefabPath: ItemPrefab/
--- !u!4 &1802141879
Transform:
m_ObjectHideFlags: 0
@ -42517,7 +42562,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
step: 2
startPositionX: 3
startPositionX: 4
startPositionY: 0
chooseNodeLayerMask:
serializedVersion: 2
@ -49044,7 +49089,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!4 &1624752141151469405
@ -49880,7 +49924,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!1 &7228810535441088300

2261
ColorlessWorld-2024-4-2/Assets/Scenes/StartMainScence.unity

File diff suppressed because it is too large

27
ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs

@ -425,6 +425,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
mapUnity.influenced = false;
}
MapUnityManager.Instance.castPool.Clear();
//遍历影响池变色
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
@ -478,10 +479,8 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
{
//射线检测瞄准的地图节点,判断是否可放置和改变放置影响区
Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.value);
// Debug.Log(Mouse.current.position.value);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 500, layerMask.value))
{
//Debug.Log(raycastHit.collider.gameObject.name);
{
//检测到跟上次瞄准地方不同,更新
if (currentNode == null || raycastHit.collider.transform.gameObject != currentNode.gameObject)
{
@ -490,6 +489,7 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
mapUnity.influenced = false;
}
cardEntity.influencePreviewPool.Clear();
currentNode = raycastHit.collider.transform.GetComponent<MapUnity>();
//重新调用范围预览
//GameManager.Instance.player.StepPreviewInfluencedNode(cardEntity.cardOriginalData.CastingRange);
@ -510,11 +510,14 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
Vector3 face = currentNode.transform.position - GameManager.Instance.playerOn.transform.position;
float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180;
getNodeTools.setEffectRangePreviewTest(cardEntity.cardOriginalData, euler, currentNode,cardEntity);
//setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, euler, currentNode);
//influencePreviewPool.Add(currentNode);
//更新涂色预览材质
SettlementManager.Instance.PreviewSwitchColor(cardEntity.cardOriginalData, currentNode);
// SettlementManager.Instance.PreviewSwitchColor(cardEntity.cardOriginalData, currentNode);
//更新地块计数
SettlementManager.Instance.PreviewColorMapUnity(cardEntity.cardOriginalData, currentNode);
}
//更新效果作用范围内怪物虚血
@ -565,8 +568,8 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
getNodeTools.setEffectRangePreviewTest(cardEntity.cardOriginalData, 90.0f, mapUnity, cardEntity);
//更新效果作用范围内怪物虚血
EnemyManager.Instance.ShowExpHp_Observer(cardEntity.influencePreviewPool);
//¸üĐÂͿɍԤŔŔ˛ÄÖĘ
SettlementManager.Instance.PreviewSwitchColor(cardEntity.cardOriginalData, GameManager .Instance .playerOn );
//更新涂色材质和地块数量统计预览
SettlementManager.Instance.PreviewColorMapUnity(cardEntity.cardOriginalData, GameManager .Instance .playerOn );
}
public void OnDrag(PointerEventData eventData)
@ -575,13 +578,13 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
}
private void dyeing()
{
{
//遍历影响池变色
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
mapUnity.PlayerInfluenced(cardEntity.influencePreviewPool);
// mapUnity.playerMark.meshRenderer .material = mapUnity.castPreRange;
}
foreach (MapUnity mapUnity in cardEntity.influencePreviewPool)
{
mapUnity.PlayerInfluenced(cardEntity.influencePreviewPool);
// mapUnity.playerMark.meshRenderer .material = mapUnity.castPreRange;
}
}

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

@ -394,30 +394,14 @@ public class TurnMaster : Singleton<TurnMaster>
int actualCardsToDraw = Mathf.Min(handCard.maxHandCard - handCardCount, drawNum);
CardActiveSort.Instance.drawCardCount = actualCardsToDraw;
CardActiveSort.Instance.StartCoroutine(CardActiveSort.Instance.ReflashCardPointWithDrawCards());
yield return CardActiveSort.Instance.StartCoroutine(CardActiveSort.Instance.SortOldCardPointWithDrawCards());
Debug.Log("łéż¨ľă1");
while (CardActiveSort.Instance.canDrawCard ==false )
{
Debug.Log("łéż¨ľă"+CardActiveSort.Instance.canDrawCard);
yield return null;
}
yield return new WaitUntil(() => CardActiveSort.Instance.canDrawCard == true);
Debug.Log("łéż¨ľă2");
for (int i = handCardCount; i < handCardCount + actualCardsToDraw; i++)
{
if (cardDeck.cardList.Count > 0)
{
/*int cardRarity= CardOriginalDataList.Instance.cardOriginalDataList[cardDeck.cardList.Count - 1].Rarity;
var a = Instantiate(cardDeck.cardPrefabPuTong,handCard .cardPanle .transform );
a.GetComponent<RectTransform>().localEulerAngles = new Vector3(0, 0, 0);
CardEntity cardEntity = a.GetComponent<CardEntity>();
cardEntity .createCard(cardDeck.cardList[cardDeck.cardList.Count - 1], i);
cardDeck.cardList.RemoveAt(cardDeck.cardList.Count - 1);
handCard.cardEntityList.Add(cardEntity);*/
createCard(i);
{
createCard(i);
}
else if (usedCard.usedCardList.Count > 0)
{
@ -427,19 +411,15 @@ public class TurnMaster : Singleton<TurnMaster>
cardDeck.cardList.Add(usedCard.usedCardList[c]);
cardDeck.cardList.Shuffle();
}
usedCard.usedCardList.Clear();
/*var a = Instantiate(cardDeck.cardPrefabPuTong, handCard.cardPanle.transform);
a.GetComponent <RectTransform >().localEulerAngles = new Vector3(0, 0, 0);
CardEntity cardEntity = a.GetComponent<CardEntity>();
cardEntity.createCard(cardDeck.cardList[cardDeck.cardList.Count - 1], i);
cardDeck.cardList.RemoveAt(cardDeck.cardList.Count - 1);
handCard.cardEntityList.Add(cardEntity);*/
createCard(i);
}
yield return new WaitForSeconds(0.1f);
}
yield return CardActiveSort.Instance.StartCoroutine(CardActiveSort.Instance.ReflashCardPointWithDrawCards());
yield break;
}
public void createCard(int i)

14
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlackSheep.cs

@ -84,7 +84,7 @@ public class BlackSheep : MonoBehaviour
IEnumerator MeleeAttackAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -99,7 +99,7 @@ public class BlackSheep : MonoBehaviour
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -115,7 +115,7 @@ public class BlackSheep : MonoBehaviour
IEnumerator MeleeAttackAndPolluteAction()
{
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -142,7 +142,7 @@ public class BlackSheep : MonoBehaviour
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -171,7 +171,7 @@ public class BlackSheep : MonoBehaviour
IEnumerator ShieldAction()
{
enemyNode.EnemyState.shieldValue += 4;
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity currentNode = getNodeTools .LocationToGetNode ( enemyNode.positionX,enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -185,7 +185,7 @@ public class BlackSheep : MonoBehaviour
{
yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1);
currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
if (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -242,7 +242,7 @@ public class BlackSheep : MonoBehaviour
IEnumerator moveOneStep(MapUnity nexMapUnity)
{
enemyNode.bleedCal();
MapUnity currentNode = GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY);
MapUnity disNode = nexMapUnity;
currentNode.blocked = false;
currentNode.enemyNode = null;

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

@ -8,6 +8,7 @@ using UnityEngine;
using UnityEngine.Assertions;
using UnityEngine.UI;
using static Name;
using static UnityEditor.FilePathAttribute;
using static UnityEngine.Rendering.DebugUI;
public class EnemyNode : MonoBehaviour,IEnemyObserver
@ -68,8 +69,6 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
[Header("µÐÈ˽üÕ½¹¥»÷¶¯»­ËÙ¶È")]
public float meleeAttackSpeed;
public AnimationCurve meleeAttackSpeedCurve;
[Header("µÐÈËÊܵ½ÄÄÖÖÑÕÉ«¹¥»÷")]
public int colorUnderAttack;
public enum EnemyType
{
@ -193,11 +192,11 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
{
EnemyState.currentNumberOfHits -= 1;
blockUIBar.SyncHp(EnemyState.currentNumberOfHits);
if(EnemyState.currentNumberOfHits <= 0 )
/* if(EnemyState.currentNumberOfHits <= 0 )
{
GameManager.Instance.X[positionX].Y[positionY].blocked = false;
// GameManager.Instance.X[positionX].Y[positionY].blocked = false;
OnDeath();
}
}*/
}
}
@ -212,7 +211,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
{
enemyUIBar.sheildFlash.enabled = true;
}
if (mapUnities.Contains(GameManager.Instance.X[positionX].Y[positionY]))
if (mapUnities.Contains(getNodeTools .LocationToGetNode (positionX ,positionY)))
{
enemyUIBar.isSync = false;
float remainDamage = EnemyState.shieldValue - Usermanager.Instance.expectDamage;
@ -264,11 +263,13 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void StartPosition()
{
//this.transform.position = GameManager.Instance.X[positionX].Y[positionY].transform.position;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = this;
transform.SetParent(GameManager.Instance.X[positionX].Y[positionY].CylinderFloor.transform);
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
mapUnity.enemyNode = this;
//GameManager.Instance.X[positionX].Y[positionY].enemyNode = this;
transform.SetParent(mapUnity.CylinderFloor.transform);
if (enemyType ==EnemyType.block)
{
GameManager.Instance.X[positionX].Y[positionY].blocked = true;
mapUnity.blocked = true;
}
}
@ -396,7 +397,21 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
int result=(int)(trueStepRange * stepMultiplie);
return result;
}
public virtual List<MapUnity> PreviewColorRange()
{
return null;
}
public virtual bool CanOneDeath()
{
if (EnemyState.currentNumberOfHits - 1 <= 0)
{
return true;
}
else
{
return false;
}
}
public void EnemyTurn()
{
switch (enemyScript)
@ -495,7 +510,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
public void AppearAimLine()
{
MapUnity currentMapUnity = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentMapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
EnemyManager.Instance.AttackRangeInfluencedNode(currentMapUnity, EnemyState.attackRange + getStepRange(),rangePool);
switch (planAction)
@ -567,7 +582,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
private MapUnity getEndNodeTowardsPlayer()
{
MapUnity currentMapUnity = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentMapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
HashSet<MapUnity> shootAbleMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> reachAbleMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>();
@ -625,7 +640,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
private MapUnity getEndNodeAwayFromPlayer()
{
MapUnity currentMapUnity = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentMapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
HashSet<MapUnity> nearestMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>();
Dictionary<MapUnity, int> endNodeMapUnityMap = new Dictionary<MapUnity, int>();
@ -687,7 +702,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void FindPathTowardsPlayer()
{
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
pasth.Clear();
pasth = AStarManager.Instance.FindPathWithEndNode(currentNode, getEndNodeTowardsPlayer());
@ -695,7 +710,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void FindPathAwayFromPlayer()
{
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
pasth.Clear();
pasth = AStarManager.Instance.FindPathWithEndNode(currentNode, getEndNodeAwayFromPlayer());
@ -782,7 +797,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
EnemyNode newEnemyNode = currentenemy.GetComponent<EnemyNode>();
newEnemyNode.positionX = positionX;
newEnemyNode.positionY = positionY;
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
currentNode.enemyNode = newEnemyNode;
}
@ -803,6 +818,11 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
//发动被破坏效果(用于场地物体)
public virtual IEnumerator ActiveEffect()
{
yield return null;
}
public void boneOnDeath()
{
if (EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.boomAndPollute))
@ -835,7 +855,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void boomAndPolluteCal()
{
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
HashSet<MapUnity> targetSet=new HashSet<MapUnity>();
targetSet.Add(currentNode);
getNodeTools.getCircleNodeForBoom(targetSet, 1);

19
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyPool.cs

@ -67,4 +67,23 @@ public class EnemyPool : MonoBehaviour
}
return enemyPrefabs;
}
public static string enemyIndexToString( int enemyIndex)
{
switch (enemyIndex)
{
case 2001:
return Name.EnemyName.DarkCloud;
case 2002:
return Name.EnemyName.BlackSheep;
case 2003:
return Name.EnemyName.Grinfiend;
case 2004:
return Name.EnemyName.Polymaw;
case 2005:
return Name.EnemyName.Mushroom;
}
return Name.EnemyName.BlackSheep;
}
}

80
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BoomNode.cs

@ -1,80 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UIElements;
public class BoomNode : BlockNode
{
public int damage = 4;
public GameObject damageParticle;
public Transform particlePoint;
public override void OnDeath()
{
StartCoroutine(DrawCardAndDestory());
}
IEnumerator DrawCardAndDestory()
{
//¼ÆËã½Ç¶È
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
CAngle(currentNode);
currentNode.blocked = false;
currentNode.enemyNode = null;
Destroy(this.gameObject);
yield break;
}
public void CAngle(MapUnity currentNode)
{
List<MapUnity> effectRangePreviewPool = new List<MapUnity>();
Vector3 direction = transform.position- GameManager.Instance.player.transform.position ;
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up);
if (angle1 < 0)
{
angle1 += 360f;
}
if (angle1 >= 300f)
{
angle1 = 330f;
}
else if (angle1 >= 240f)
{
angle1 = 270f;
}
else if (angle1 >= 180f)
{
angle1 = 210f;
}
else if (angle1 >= 120f)
{
angle1 = 150f;
}
else if (angle1 >= 60f)
{
angle1 = 90f;
}
else if (angle1 >= 0f)
{
angle1 = 30f;
}
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList ();
// SettlementManager.Instance.damageWork(damage, effectRangePreviewPool, -1);
foreach (var mapNode in effectRangePreviewPool )
{
// Vector3 pos = mapNode.transform.position;
// pos.y = particlePoint.position.y;
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
// bluePartical.transform.SetParent(currentNode.transform);
mapNode.switchColor(colorUnderAttack);
}
}
}

26
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TNTBucketNode.cs

@ -1,26 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TNTBucketNode : BlockNode
{
public override void OnDeath()
{
StartCoroutine(DrawCardAndDestory());
}
IEnumerator DrawCardAndDestory()
{
foreach (var node in GameManager.Instance.X[positionX].Y[positionY].unitPool )
{
if(node != null )
{
node.switchColor(colorUnderAttack);
}
}
GameManager.Instance.X[positionX].Y[positionY].blocked = false;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null;
Destroy(this.gameObject);
yield break;
}
}

28
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TreeNode.cs

@ -1,28 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TreeNode : BlockNode
{
public int drawCardCount=2;
public override void OnDeath()
{
if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.banDrawCard))
{
}
else
{
StartCoroutine(DrawCardAndDestory());
}
}
IEnumerator DrawCardAndDestory()
{
TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount));
yield return StartCoroutine(TurnMaster.Instance.MoveCards());
GameManager.Instance.X[positionX].Y[positionY].blocked = false;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null;
Destroy(this.gameObject);
yield break;
}
}

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockUI.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI.meta

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockUI/BlockUIBar.cs → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI/BlockUIBar.cs

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockUI/BlockUIBar.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/BlockUI/BlockUIBar.cs.meta

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode.meta

1
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BlockNode.cs → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/BlockNode.cs

@ -37,6 +37,7 @@ public class BlockNode : EnemyNode
blockUIBar.CreatSartHp(EnemyState.currentNumberOfHits);
// blockUIBar.enemyNode = enemyNode;
}
public override void OnDeath()
{
Destroy(this.gameObject);

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BlockNode.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/BlockNode.cs.meta

136
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Boom.cs

@ -0,0 +1,136 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UIElements;
public class Boom : BlockNode
{
public int damage = 4;
public GameObject damageParticle;
public Transform particlePoint;
public override void OnDeath()
{
// StartCoroutine(BoomdAndDestory());
}
public override IEnumerator ActiveEffect()
{
yield return StartCoroutine(BoomdAndDestory());
}
IEnumerator BoomdAndDestory()
{
//¼ÆËã½Ç¶È
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX,positionY);
CAngle(currentNode);
currentNode.blocked = false;
currentNode.enemyNode = null;
Destroy(this.gameObject);
yield break;
}
public override List<MapUnity> PreviewColorRange()
{
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
List<MapUnity> effectRangePreviewPool = new List<MapUnity>();
Vector3 direction = transform.position - GameManager.Instance.player.transform.position;
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up);
if (angle1 < 0)
{
angle1 += 360f;
}
if (angle1 >= 300f)
{
angle1 = 330f;
}
else if (angle1 >= 240f)
{
angle1 = 270f;
}
else if (angle1 >= 180f)
{
angle1 = 210f;
}
else if (angle1 >= 120f)
{
angle1 = 150f;
}
else if (angle1 >= 60f)
{
angle1 = 90f;
}
else if (angle1 >= 0f)
{
angle1 = 30f;
}
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList();
foreach (var mapNode in effectRangePreviewPool)
{
// Vector3 pos = mapNode.transform.position;
// pos.y = particlePoint.position.y;
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
// bluePartical.transform.SetParent(currentNode.transform);
mapNode.switchPreColor(currentNode.colorUnderAttack);
}
return effectRangePreviewPool;
}
public void CAngle(MapUnity currentNode)
{
List<MapUnity> effectRangePreviewPool = new List<MapUnity>();
Vector3 direction = transform.position- GameManager.Instance.player.transform.position ;
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up);
if (angle1 < 0)
{
angle1 += 360f;
}
if (angle1 >= 300f)
{
angle1 = 330f;
}
else if (angle1 >= 240f)
{
angle1 = 270f;
}
else if (angle1 >= 180f)
{
angle1 = 210f;
}
else if (angle1 >= 120f)
{
angle1 = 150f;
}
else if (angle1 >= 60f)
{
angle1 = 90f;
}
else if (angle1 >= 0f)
{
angle1 = 30f;
}
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList ();
// SettlementManager.Instance.damageWork(damage, effectRangePreviewPool, -1);
foreach (var mapNode in effectRangePreviewPool )
{
// Vector3 pos = mapNode.transform.position;
// pos.y = particlePoint.position.y;
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
// bluePartical.transform.SetParent(currentNode.transform);
mapNode.switchColor(currentNode. colorUnderAttack);
if(mapNode .enemyNode != null )
{
mapNode.enemyNode.EnemyState.currentHP -= 4;
}
}
}
}

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BoomNode.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Boom.cs.meta

2
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BoxNode.cs → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Box.cs

@ -2,7 +2,7 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BoxNode : MonoBehaviour
public class Box : MonoBehaviour
{
EnemyNode enemyNode;

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/BoxNode.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Box.cs.meta

45
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/TNTBucket.cs

@ -0,0 +1,45 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TNTBucket : BlockNode
{
public override void OnDeath()
{
//StartCoroutine(DrawCardAndDestory());
}
public override IEnumerator ActiveEffect()
{
yield return StartCoroutine(DrawCardAndDestory());
}
IEnumerator DrawCardAndDestory()
{
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
foreach (var node in mapUnity.unitPool )
{
if(node != null )
{
node.switchColor(mapUnity . colorUnderAttack);
}
}
mapUnity.blocked = false;
mapUnity.enemyNode = null;
Destroy(this.gameObject);
yield break;
}
public override List<MapUnity> PreviewColorRange()
{
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
List<MapUnity> effectRangePreviewPool = new List<MapUnity>();
foreach (var node in mapUnity.unitPool)
{
if (node != null)
{
effectRangePreviewPool.Add(node);
node.switchPreColor(mapUnity.colorUnderAttack);
}
}
return effectRangePreviewPool;
}
}

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TNTBucketNode.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/TNTBucket.cs.meta

31
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Tree.cs

@ -0,0 +1,31 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Tree : BlockNode
{
public int drawCardCount=2;
public override void OnDeath()
{
/*if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.banDrawCard))
{
}
else
{
StartCoroutine(DrawCardAndDestory());
}*/
}
public override IEnumerator ActiveEffect()
{
yield return StartCoroutine(DrawCardAndDestory());
}
IEnumerator DrawCardAndDestory()
{
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
yield return TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount));
mapUnity.blocked = false;
mapUnity.enemyNode = null;
Destroy(this.gameObject);
yield break;
}
}

0
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block/BlockNode/TreeNode.cs.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Tree.cs.meta

25
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs

@ -0,0 +1,25 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class Vacancy : BlockNode
{
public int drawCardCount = 2;
private void Start()
{
if (blockUIBar == null)
{
CreatEnemyUIBar(this);
}
lasteHp = (int)EnemyState.currentHP;
enemyUI.SetActive(false);
}
public override void OnDeath()
{
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs.meta

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

2
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyUI/Block.meta → ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode.meta

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ab7664ff672480f459fb5c68b41dcc23
guid: 158addf8acf787245a6bc01d0b3fd919
folderAsset: yes
DefaultImporter:
externalObjects: {}

75
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode/ItemTakerOverNode.cs

@ -0,0 +1,75 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemTakerOverNode : MonoBehaviour
{
public enum TakeOverType
{
oneCenter,
oneCircle
}
public TakeOverType takeOverType;
public enum BlockType
{
common,
whirlpool,
vacancy
}
public BlockType blockType;
public HashSet<MapUnity> TakeOverCalculation(MapUnity currentMapUnity)
{
HashSet <MapUnity > mapUnities = new HashSet <MapUnity >();
switch (takeOverType)
{
case TakeOverType.oneCenter:
if(currentMapUnity !=null && currentMapUnity .blocked ==false &&currentMapUnity .gameObject .activeInHierarchy ==true )
{
mapUnities .Add(currentMapUnity );
}
else
{
return null;
}
break;
}
return mapUnities;
}
public void GenerateBlockItem(MapUnity currentMapUnity,GameObject prefab)
{
switch (blockType)
{
case BlockType.common:
Vector3 pos = currentMapUnity.transform.position;
pos.y = 1;
var block = Instantiate(prefab, pos, Quaternion.identity);
currentMapUnity.enemyNode = block.GetComponent<EnemyNode>();
currentMapUnity.enemyNode.positionX = currentMapUnity.locationX;
currentMapUnity.enemyNode.positionY = currentMapUnity.locationY;
currentMapUnity.blocked = true;
break;
case BlockType.whirlpool:
Vector3 pos2 = currentMapUnity.transform.position;
pos.y = 1;
var whirlpool = Instantiate(prefab, pos2, Quaternion.identity);
Whirlpool whirlpoolS = whirlpool.GetComponent<Whirlpool>();
whirlpoolS.posX = currentMapUnity.locationX;
whirlpoolS.posY = currentMapUnity.locationY;
break;
case BlockType.vacancy:
Vector3 pos3 = currentMapUnity.transform.position;
pos.y = 1;
var vacancy = Instantiate(prefab, pos3, Quaternion.identity);
currentMapUnity.enemyNode = vacancy.GetComponent<EnemyNode>();
currentMapUnity.enemyNode.positionX = currentMapUnity.locationX;
currentMapUnity.enemyNode.positionY = currentMapUnity.locationY;
currentMapUnity.blocked = true;
currentMapUnity .CylinderFloor .SetActive(false);
break;
}
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode/ItemTakerOverNode.cs.meta

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

4
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/Whirlpool.cs

@ -13,7 +13,7 @@ public class Whirlpool : MonoBehaviour
private void Start()
{
MapUnity currentNode = GameManager .Instance .X[posX].Y[posY];
MapUnity currentNode = getNodeTools.LocationToGetNode( posX,posY);
this.gameObject.transform.position = currentNode.transform.position;
for(int i=0;i<currentNode .unitPool .Count;i++)
{
@ -25,7 +25,7 @@ public class Whirlpool : MonoBehaviour
}
holdPool.Add(currentNode);
holdeText .text =holdColorCount .ToString();
GameManager.Instance.playerUsedCard += WhirlpoolHold;
GameManager.Instance.whirlpoolEffectSycn += WhirlpoolHold;
}

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

@ -76,28 +76,28 @@ public class EnemyAction
//通用普攻
public virtual void GeneralAttackRange(EnemyNode enemyNode)
{
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.EnemyState .attackRange , enemyNode.rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY), enemyNode.EnemyState .attackRange , enemyNode.rangePool);
}
//近战
public virtual void MeleeAttackRange(EnemyNode enemyNode)
{
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.getStepRange()+1, enemyNode.rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY), enemyNode.getStepRange()+1, enemyNode.rangePool);
}
//远程-攻击范围
public virtual void ShootAttackRange(EnemyNode enemyNode)
{
Debug.Log("shoot");
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.EnemyState.attackRange, enemyNode.rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(getNodeTools.LocationToGetNode(enemyNode.positionX,enemyNode.positionY), enemyNode.EnemyState.attackRange, enemyNode.rangePool);
}
//范围-作用范围
public virtual void AoeAttackRange(EnemyNode enemyNode)
{
Debug.Log("aoe");
//几-几
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.EnemyState.attackRange, enemyNode.rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(GameManager.Instance.X[enemyNode.positionX].Y[enemyNode.positionY], enemyNode.EnemyState.aoeRange, enemyNode.aoeRangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY), enemyNode.EnemyState.attackRange, enemyNode.rangePool);
EnemyManager.Instance.AttackRangeInfluencedNode(getNodeTools.LocationToGetNode(enemyNode.positionX, enemyNode.positionY), enemyNode.EnemyState.aoeRange, enemyNode.aoeRangePool);
ShowAttackRangeAoe(enemyNode);
}
//魔法

6
ColorlessWorld-2024-4-2/Assets/Scripts/ForwardCamera.cs

@ -17,8 +17,10 @@ public class ForwardCamera : MonoBehaviour
maxAnglesX = 10;
minAnglesX = -0;
maxAnglesY = 60;
minAnglesY = -60;
// maxAnglesY = 60;
// minAnglesY = -60;
maxAnglesY = 180;
minAnglesY = -180;
}
void Update()
{

89
ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs

@ -1,7 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
@ -313,6 +312,7 @@ public class GameManager : Singleton<GameManager>
White.fillAmount = Metal.fillAmount + whiteNodeCountLatest / totoalNode;
// Black.fillAmount = Bule.fillAmount + blackNodeCountLatest / totoalNode;
//Ô¤ÀÀͿɫ
if (onDrag && currentCardEntity != null )
{
if(currentCardEntity.cardOriginalData.CastingRange != 0)
@ -330,7 +330,7 @@ public class GameManager : Singleton<GameManager>
{
currentMapNode = playerOn;
}
List<int> ints = SettlementManager.Instance.PreviewColorMapUnity(currentCardEntity.cardOriginalData, currentMapNode);
List<int> ints = SettlementManager.Instance.GetNodeCountStats();
for (int i = 0; i < ints.Count; i++)
{
switch (i)
@ -600,40 +600,83 @@ public class GameManager : Singleton<GameManager>
//¿ª¾Ö³¡µØÍ¿É«
IEnumerator StartMapColour()
{
//鯤소
for (int i = 0; i < X.Count ; i++)
/* //玩家
for (int i = 0; i < X.Count ; i++)
{
if (i % 2 == 0)
{
X[i].Y[0].switchColor(PlayerStatsManager.Instance.colorSortList[0]);
}
else
{
X[i].Y[0].switchColor(PlayerStatsManager.Instance.colorSortList[1]);
}
}
for (int i = 0; i < X.Count; i++)
{
X[i].Y[1].switchColor(PlayerStatsManager.Instance.colorSortList[2]);
}
//怪物
for (int i = 0; i <X.Count; i++)
{
for (int j = X[i].Y .Count -2; j < X[i].Y.Count; j++)
{
X[i].Y[j].switchColor(Name.NodeColor.Black);
}
}
yield return null;*/
List<MapUnity> whiteMapUnities = new List<MapUnity>();
for(int i=0;i< X .Count;i++)
{
if (i % 2 == 0)
{
X[i].Y[0].switchColor(PlayerStatsManager.Instance.colorSortList[0]);
}
else
for (int j=0;j<X[i].Y .Count;j++)
{
X[i].Y[0].switchColor(PlayerStatsManager.Instance.colorSortList[1]);
if (X[i].Y[j].blocked ==false&& X[i].Y[j].gameObject .activeInHierarchy ==true)
{
whiteMapUnities.Add(X[i].Y[j]);
}
}
}
for (int i = 0; i < X.Count; i++)
for(int i = 0; i < playerState.canColorCount ; i++)
{
X[i].Y[1].switchColor(PlayerStatsManager.Instance.colorSortList[2]);
if (whiteMapUnities.Count <= 0)
{
break;
}
int index = UnityEngine.Random.Range(0, whiteMapUnities.Count );
whiteMapUnities[index].switchColor(PlayerStatsManager.Instance.colorSortList[UnityEngine.Random.Range(0, 3)]);
whiteMapUnities.RemoveAt(index);
yield return null;
}
//밍膠
for (int i = 0; i <X.Count; i++)
for (int i = 0; i < 20; i++)
{
for (int j = X[i].Y .Count -2; j < X[i].Y.Count; j++)
if(whiteMapUnities.Count<=0)
{
X[i].Y[j].switchColor(Name.NodeColor.Black);
break;
}
int index = UnityEngine.Random.Range(0, whiteMapUnities.Count);
whiteMapUnities[index].switchColor(Name.stringColorToint (Name .Color .Black ));
whiteMapUnities.RemoveAt(index);
yield return null;
}
yield return null;
}
BroadCastWhirlpoolEffectSycn();
}
//鯤소姦렴供寧蠟엥탬
public event Action playerUsedCard;
public void BroadCastPlayerUsedCard()
//施法完一张卡牌
public event Action usedCardEvent;
//触发漩涡同步颜色
public event Action whirlpoolEffectSycn;
public void BroadCastWhirlpoolEffectSycn()
{
if (whirlpoolEffectSycn != null)
whirlpoolEffectSycn();
}
public void BroadUsedCardEvent()
{
if (playerUsedCard != null)
playerUsedCard();
if (usedCardEvent != null)
usedCardEvent();
}
}

886
ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LeveGeneraterNew.cs

@ -0,0 +1,886 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using static LevelDevelopManager;
public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
{
public GameObject generatorPoint;//初始位置
public Vector3 originalPoint;
[Header("节点生成行(横)")]
public int generatorLine;
[Header("节点生成列(竖)")]
public int generatorColumn;
[Header("节点生成列(竖)间距")]
public float lineOffset;
[Header("节点生成行(横)间距")]
public float columnOffset;
[Header("生成路线数量")]
public int pathAmount;
[Header("特定房间生成层数")]
//宝箱
public int treasureFloor;
//锻造
public int forgingFloor;
//单节点战斗
public List<int> singleFightFloor;
//三节点战斗
public List<int> multipleFightFloor;
//随机奖励节点
public List<int> rewardNodeFloor;
public List <RoomType> randomRoomTypeWeightBase;
public List<RoomType> randomRoomTypeWeightAttach;
[Header("节点生成资源")]
public GameObject levelPrefab;
public GameObject levelBossPrefab;
[Header("怪物池地图概率字典")]
public string enemyPoolFileName;
Dictionary<int, List<string>> probabilityDictionaryWeak = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryStrong = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryElite = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryBoss = new Dictionary<int, List<string>>();
private void Start()
{
originalPoint = generatorPoint.transform.position;
if (LevelDevelopManager.Instance.levelDevelopData.levelStep == 0)
{
GenerateLevelMap(generatorLine, generatorColumn);
//存储保存数据
SaveDataLoader();
}
else
{
GeneratorLevelMapFormSave();
}
}
public void GenerateLevelMap(int generatorLine, int generatorColumn)
{
GenerateGridMap(generatorLine, generatorColumn);
GeneratePath();
RandomSetUpRoom();
// CheckNodeRule();
ShowMap();
SetRoomEnemyPoolAndMap();
}
//生成网格
public void GenerateGridMap(int generatorLine, int generatorColumn)
{
for (int i = 0; i < generatorLine; i++)
{
if (i == generatorLine - 1)
{
for (int j = 0; j < generatorColumn; j++)
{
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x, generatorPoint.transform.position.y, generatorPoint.transform.position.z + lineOffset);
var level = Instantiate(levelBossPrefab, generatorPoint.transform.position, levelPrefab.transform.rotation);
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform);
level.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
level.transform.localPosition += new Vector3(0, 5f, 0);
LevelNode bossLevelNode = level.GetComponent<LevelNode>();
bossLevelNode.line = i;
bossLevelNode.column = j;
LevelDevelopManager.Instance.levelMap[i].levelColumn.Add(bossLevelNode);
}
}
else
{
for (int j = 0; j < generatorColumn; j++)
{
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x, generatorPoint.transform.position.y, generatorPoint.transform.position.z + lineOffset);
GenerateLevelNode(i, j, generatorPoint.transform.position);
}
}
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x + columnOffset, generatorPoint.transform.position.y, originalPoint.z);
}
}
//生成路线
public void GeneratePath()
{
List<LevelList> levelMap = LevelDevelopManager.Instance.levelMap;
for (int i=0;i<generatorLine;i++)
{
if (i < 2)
{
levelMap[i].levelColumn[0].gameObject.SetActive(false);
levelMap[i].levelColumn[2].gameObject.SetActive(false);
levelMap[i].levelColumn[1].isUse = true;
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
if (i==1)
{
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]);
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]);
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
}
}
else if (i < 5)
{
levelMap[i].levelColumn[0].isUse = true;
levelMap[i].levelColumn[2].isUse = true;
levelMap[i].levelColumn[1].isUse = true;
if(i!=4)
{
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]);
if (i != 2)
{
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[0]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[2]);
}
}
else
{
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[0]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[2]);
}
}
else if (i < 7)
{
levelMap[i].levelColumn[0].gameObject.SetActive(false);
levelMap[i].levelColumn[2].gameObject.SetActive(false);
levelMap[i].levelColumn[1].isUse = true;
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
if (i == 6)
{
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]);
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]);
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
}
}
else if(i<10)
{
levelMap[i].levelColumn[0].isUse = true;
levelMap[i].levelColumn[2].isUse = true;
levelMap[i].levelColumn[1].isUse = true;
if (i != 9)
{
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]);
if (i != 7)
{
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[0]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[2]);
}
}
else
{
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[0]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]);
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[2]);
}
}
else
{
levelMap[i].levelColumn[0].gameObject.SetActive(false);
levelMap[i].levelColumn[2].gameObject.SetActive(false);
levelMap[i].levelColumn[1].isUse = true;
if(i!= generatorLine-1)
{
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]);
}
if(i!=10)
{
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]);
}
}
}
/* int currentColum = column;
LevelDevelopManager.Instance.levelMap[0].levelColumn[currentColum].isUse = true;
//生成路线表
List<int> path = new List<int>();
path.Add(LevelDevelopManager.Instance.levelMap[0].levelColumn[currentColum].column);//加入起点
LevelNode LevelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[currentColum];
LevelNode nextLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[generatorColumn / 2];
LevelNode.nextLevelNodes.Add(nextLevelNode);
nextLevelNode.fatherLevelNodes.Add(LevelNode);
nextLevelNode.isUse = true;
int pathOffset = Random.Range(-1, 2);
if (CheckChoosePath(line, currentColum, pathOffset))
{
LevelNode LevelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[currentColum];
currentColum += pathOffset;
LevelNode nextLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[currentColum];
if (!LevelNode.nextLevelNodes.Contains(nextLevelNode))
LevelNode.nextLevelNodes.Add(nextLevelNode);
if (!nextLevelNode.fatherLevelNodes.Contains(LevelNode))
nextLevelNode.fatherLevelNodes.Add(LevelNode);
nextLevelNode.isUse = true;
//加入路线表
path.Add(nextLevelNode.column);
break;
}*/
}
//检查路线选择是否合理
public bool CheckChoosePath(int line, int column, int pathOffset)
{
int nextcolumn = (column + pathOffset);
if (nextcolumn < 0 || nextcolumn > generatorColumn - 1)
{
return false;
}
if (pathOffset == -1)
{
LevelNode levelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[column - 1];
if (levelNode.isUse == true)
{
foreach (var node in levelNode.nextLevelNodes)
{
if (node.column > nextcolumn)
{
return false;
}
}
}
}
if (pathOffset == 1)
{
LevelNode levelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[column + 1];
if (levelNode.isUse == true)
{
foreach (var node in levelNode.nextLevelNodes)
{
if (node.column < nextcolumn)
{
return false;
}
}
}
}
return true;
}
//检查节点是否合理(分支目的地不同,保底精英)
public void CheckNodeRule()
{
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++)
{
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j];
if (currentLevelNode.isUse)
{
if (currentLevelNode.nextLevelNodes.Count > 1 && i != treasureFloor - 1 && i != generatorLine - 3 && i != generatorLine - 2)
{
Debug.Log(i);
List<LevelDevelopManager.RoomType> roomTypes = new List<LevelDevelopManager.RoomType>();
foreach (var room in currentLevelNode.nextLevelNodes)
{
if (!roomTypes.Contains(room.roomType))
{
Debug.Log(currentLevelNode.line + ";" + currentLevelNode.column + "过");
roomTypes.Add(room.roomType);
}
else
{
Debug.Log(currentLevelNode.line + ";" + currentLevelNode.column + "否");
RandomGetOneRoom(currentLevelNode.nextLevelNodes, i, j);
}
}
}
}
}
}
}
//生成房间
public LevelNode GenerateLevelNode(int line, int column, Vector3 pos)
{
var level = Instantiate(levelPrefab, pos, levelPrefab.transform.rotation);
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform);
level.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f);
LevelNode levelNode = level.GetComponent<LevelNode>();
levelNode.line = line;
levelNode.column = column;
LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(levelNode);
return levelNode;
}
//生成Boss房间
public LevelNode GenerateLevelBossNode(int line, int column, Vector3 pos)
{
var level = Instantiate(levelBossPrefab, pos, levelPrefab.transform.rotation);
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform);
level.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f);
LevelNode levelNode = level.GetComponent<LevelNode>();
levelNode.line = line;
levelNode.column = column;
LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(levelNode);
return levelNode;
}
//按规则随机设定房间
public void RandomSetUpRoom()
{
List<LevelList> levelMap = LevelDevelopManager.Instance.levelMap;
for (int i = 0; i < generatorLine; i++)
{
if (i == 0)
{
//第一层是初始点
foreach (var room in levelMap[i].levelColumn)
{
room.SetUpRoom(RoomType.start);
}
}
else if (i == treasureFloor)
{
//指定宝箱层
foreach (var room in levelMap[i].levelColumn)
{
room.SetUpRoom(RoomType.treasure);
}
}
else if (i == generatorLine - 2)
{
//倒数第二层全是篝火
foreach (var room in levelMap[i].levelColumn)
{
room.SetUpRoom(RoomType.campfire);
}
}
else if (i == generatorLine - 3)
{
//倒数第三层全是铸造
foreach (var room in levelMap[i].levelColumn)
{
room.SetUpRoom(RoomType.forging);
}
}
else if (i == generatorLine - 1)
{
//最后一层boss房
foreach (var room in levelMap[i].levelColumn)
{
room.SetUpRoom(RoomType.boss);
}
}
}
//阶段的随机奖励生成
List<List<LevelNode>> levelNodes = new List<List<LevelNode>>();
List <LevelNode > aNode_1 = new List <LevelNode>();
List<LevelNode> aNode_2 = new List<LevelNode>();
List<LevelNode> bNode_1 = new List<LevelNode>();
List<LevelNode> bNode_2 = new List<LevelNode>();
for (int i = 0; i < 3; i++)
{
aNode_1.Add(levelMap[rewardNodeFloor[0]].levelColumn[i]);
aNode_2.Add(levelMap[rewardNodeFloor[0]+2].levelColumn[i]);
bNode_1.Add(levelMap[rewardNodeFloor[1]].levelColumn[i]);
bNode_2.Add(levelMap[rewardNodeFloor[1] + 2].levelColumn[i]);
}
levelNodes .Add(aNode_1);
levelNodes .Add(aNode_2);
levelNodes.Add(bNode_1);
levelNodes.Add(bNode_2);
int shopA_l = Random.Range(0, 2);
int shopA_C = Random.Range(0, levelNodes[shopA_l].Count);
int shopB_l = Random.Range(2, 4);
int shopB_C = Random.Range(0, levelNodes[shopB_l].Count);
levelNodes[shopA_l][shopA_C ].SetUpRoom(RoomType.shop);
levelNodes[shopB_l][shopB_C].SetUpRoom(RoomType.shop);
levelNodes[shopA_l][shopA_C] = null;
levelNodes[shopB_l][shopB_C] = null;
List <int > order = new List<int>() {0,2,1,3};
for (int a = 0; a < order.Count; a++)
{
int i = order [a];
for (int j = 0; j < 3; j++)
{
bool isGo = true;
LevelNode currentNode = levelNodes[i][j];
while (isGo)
{
RoomType roomType;
if (randomRoomTypeWeightBase.Count>0)
{ roomType = randomRoomTypeWeightBase[Random.Range(0, randomRoomTypeWeightBase.Count)]; }
else
{
roomType = randomRoomTypeWeightAttach[Random.Range(0, randomRoomTypeWeightAttach.Count)];
}
if (currentNode != null)
{
switch (i)
{
case 0:
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
case 1:
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
case 2:
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
case 3:
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
}
}
else
{
isGo = false;
}
}
}
}
//生成随机怪物
for(int i=0;i<multipleFightFloor .Count;i++ )
{
for (int j = 0; j < 3; j++)
{
levelMap[multipleFightFloor[i]].levelColumn[j].SetUpRoom(RoomType.monster);
}
}
int randomLine = Random.Range(0, multipleFightFloor.Count);
while (multipleFightFloor [ randomLine] <4)
{
randomLine = Random.Range(0, multipleFightFloor.Count);//保证精英不会刷在四层以下
}
int randomColumn = Random.Range(0, 3);
if (singleFightFloor.Contains(multipleFightFloor[randomLine]))
{
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteAndMonster);
}
else
{
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteMonster);
}
multipleFightFloor.RemoveAt(randomLine);
randomLine = Random.Range(0, multipleFightFloor.Count);
while (multipleFightFloor[randomLine] < 4)
{
randomLine = Random.Range(0, multipleFightFloor.Count);//保证精英不会刷在四层以下
}
randomColumn = Random.Range(0, 3);
if (singleFightFloor .Contains (multipleFightFloor[randomLine]))
{
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteAndMonster );
}
else
{
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteMonster);
}
/* for (int i = 0; i < singleFightFloor.Count; i++)
{
levelMap[singleFightFloor [i]].levelColumn[1].SetUpRoom(RoomType.monster);
}
int randomLine_s = Random.Range(0, singleFightFloor.Count);
while (singleFightFloor[randomLine_s] < 4)
{
randomLine_s = Random.Range(0,singleFightFloor.Count);//保证精英不会刷在四层以下
}
levelMap[singleFightFloor[randomLine_s]].levelColumn[1].SetUpRoom(RoomType.eliteAndMonster);*/
}
//判断下一个房间的所有子集是否有重复
public void RandomGetOneRoom(List<LevelNode> nextLevelNodes, int line, int column)
{
HashSet<LevelDevelopManager.RoomType> candidateRoomTypeList = new HashSet<LevelDevelopManager.RoomType>();
while (true)
{
candidateRoomTypeList.Clear();
for (int i = 0; i < nextLevelNodes.Count; i++)
{
bool contravenes = true;
LevelDevelopManager.RoomType candidateRoomType = LevelDevelopManager.RoomType.monster;
while (contravenes)
{
contravenes = false;
//candidateRoomType = GetRoomTypeByWeight();//获取后选房间类型
LevelNode currentLevelNode = nextLevelNodes[i];
switch (candidateRoomType)
{
case LevelDevelopManager.RoomType.monster:
break;
case LevelDevelopManager.RoomType.eliteMonster:
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes)
{
if (fatherRoom.roomType == LevelDevelopManager.RoomType.eliteMonster || line < 5)
{
contravenes = true;
}
}
break;
case LevelDevelopManager.RoomType.incident:
break;
case LevelDevelopManager.RoomType.campfire:
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes)
{
if (fatherRoom.roomType == LevelDevelopManager.RoomType.campfire || line == generatorLine - 3 || line < 5)
{
contravenes = true;
}
}
break;
case LevelDevelopManager.RoomType.shop:
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes)
{
if (fatherRoom.roomType == LevelDevelopManager.RoomType.shop)
{
contravenes = true;
}
}
break;
}
}
candidateRoomTypeList.Add(candidateRoomType);
}
if (candidateRoomTypeList.Count == nextLevelNodes.Count)
{
List<LevelDevelopManager.RoomType> roomTypes = candidateRoomTypeList.ToList();
for (int k = 0; k < nextLevelNodes.Count; k++)
{
Debug.Log(roomTypes[k]);
nextLevelNodes[k].SetUpRoom(roomTypes[k]);
}
break;
}
}
}
//显示连线,设置能否进入
public void ShowMap()
{
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++)
{
if (LevelDevelopManager.Instance.levelMap[i].levelColumn[j].isUse == false)
{
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].gameObject.SetActive(false);
}
else
{
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].GetComponent<LevelNode>().LineShow();
}
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].GetComponent<LevelNode>().JudgeCanEnter();
}
}
}
//载入保存数据
public void SaveDataLoader()
{
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++)
{
LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Clear();
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++)
{
LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Add(LevelDevelopManager.Instance.levelMap[i].levelColumn[j].ReturnSaveData());
}
}
}
//根据保存的信息生成地图
public void GeneratorLevelMapFormSave()
{
for (int i = 0; i < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Count; j++)
{
LevelDevelopData_SO.levelData currentLevelData = LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList[j];
if (i == generatorLine - 1)
{
LevelNode currentNode = GenerateLevelBossNode(i, j, currentLevelData.nodePos);
currentNode.SetUpRoomWithRoomData(currentLevelData);
}
else
{
LevelNode currentNode = GenerateLevelNode(i, j, currentLevelData.nodePos);
currentNode.SetUpRoomWithRoomData(currentLevelData);
}
}
}
for (int i = 0; i < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Count; j++)
{
LevelDevelopData_SO.levelData currentLevelData = LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList[j];
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j];
currentLevelNode.SetUpRoomLinkWithRoomData(currentLevelData);
if (currentLevelNode.isUse == false)
{
currentLevelNode.gameObject.SetActive(false);
}
else
{
currentLevelNode.LineShow();
}
//设置进度标识
if (currentLevelNode.isPassBy == true)
{
currentLevelNode.passByMark.SetActive(true);
}
currentLevelNode.JudgeCanEnter();
}
}
//判断能否进入
int line = LevelDevelopManager.Instance.levelDevelopData.levelStep;
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[line].levelColumn.Count; j++)
{
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[j];
currentLevelNode.JudgeRoadCanEnter();
}
}
//设置房间怪物组和地图
public void SetRoomEnemyPoolAndMap()
{
ReadEnemyPoolInforCsv(enemyPoolFileName);
//权重概率表
Dictionary<int, int> weakProbabilityDic = new Dictionary<int, int>();
int weakTotalWight = 0;
foreach (var pool in probabilityDictionaryWeak.Keys.ToList())
{
weakTotalWight += int.Parse(probabilityDictionaryWeak[pool][2]);
weakProbabilityDic.Add(weakTotalWight, pool);
}
List<int> strongProbabilityList = probabilityDictionaryStrong.Keys.ToList();
List<int> eliteProbabilityList = probabilityDictionaryElite.Keys.ToList();
List<int> bossProbabilityList = probabilityDictionaryBoss.Keys.ToList();
//设置怪物池
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++)
{
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j];
switch (currentLevelNode.roomType)
{
case RoomType.monster:
if (i < 5)
{
currentLevelNode.fightEenemyPool = Name.EnemyPool.Weak;
//根据怪物池随机怪物组和地图
int mark1 = Random.Range(0, weakTotalWight);
List<int> weakProbabilityList = weakProbabilityDic.Keys.ToList();
for (int a = 0; a < weakProbabilityList.Count; a++)
{
if (mark1 < weakProbabilityList[a])
{
string[] enemys = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
break;
}
}
}
else
{
currentLevelNode.fightEenemyPool = Name.EnemyPool.Strong;
//根据怪物池随机怪物组和地图
int mark2 = Random.Range(0, 100);
for (int a = 0; a < strongProbabilityList.Count; a++)
{
if (mark2 < strongProbabilityList[a])
{
string[] enemys = probabilityDictionaryStrong[strongProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryStrong[strongProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
}
break;
case RoomType.boss:
currentLevelNode.fightEenemyPool = Name.EnemyPool.Boss;
//根据怪物池随机怪物组和地图
int mark3 = Random.Range(0, 100);
for (int a = 0; a < bossProbabilityList.Count; a++)
{
if (mark3 < bossProbabilityList[a])
{
string[] enemys = probabilityDictionaryBoss[bossProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryBoss[bossProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
break;
case RoomType.eliteMonster:
currentLevelNode.fightEenemyPool = Name.EnemyPool.Elite;
//根据怪物池随机怪物组和地图
int mark4 = Random.Range(0, 100);
for (int a = 0; a < eliteProbabilityList.Count; a++)
{
if (mark4 < eliteProbabilityList[a])
{
string[] enemys = probabilityDictionaryElite[eliteProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryElite[eliteProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
break;
}
}
}
}
public void ReadEnemyPoolInforCsv(string fileName)
{
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader reader = new StreamReader(fs))
{
bool isFirstLine = true;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (isFirstLine)
{
isFirstLine = false;
continue; // 跳过标题行
}
// 用逗号分隔每行数据
string[] values = line.Split(',');
switch (values[1])
{
case Name.EnemyPool.Weak:
probabilityDictionaryWeak.Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Strong:
probabilityDictionaryStrong.Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Elite:
probabilityDictionaryElite.Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Boss:
probabilityDictionaryBoss.Add(int.Parse(values[0]), values.ToList());
break;
}
}
}
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LeveGeneraterNew.cs.meta

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

17
ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelDevelopManager.cs

@ -21,21 +21,34 @@ public class LevelDevelopManager : Singleton<LevelDevelopManager>
[Header ("·¿¼äͼ±ê")]
public Sprite monsterIcon;
public Sprite eliteMonsterIcon;
public Sprite eliteAndMonsterIcon;
public Sprite bossIcon;
public Sprite shopIcon;
public Sprite campfireIcon;
public Sprite incidentIcon;
public Sprite treasureIcon;
public Sprite forgingIcon;
public Sprite deleteCardIcon;
public Sprite addCardIcon;
public Sprite resourceIcon;
public Sprite potionIcon;
public Sprite startIcon;
public enum RoomType
{
monster,
eliteMonster,
eliteAndMonster,
boss,
shop,
campfire,
incident,
treasure
treasure,
forging,//¶ÍÔì
deleteCard,
addCard,
resource,
potion,
start
}
}

139
ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelGenerator.cs

@ -1,8 +1,7 @@
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using static LevelDevelopManager;
public class LevelGenerator : Singleton<LevelGenerator>
@ -53,6 +52,12 @@ public class LevelGenerator : Singleton<LevelGenerator>
public List<GameObject> levelPrefabList = new List<GameObject>();
public List<GameObject> BossLevelPrefabList = new List<GameObject>();
[Header("怪物池地图概率字典")]
public string enemyPoolFileName;
Dictionary<int, List<string>> probabilityDictionaryWeak = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryStrong = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryElite = new Dictionary<int, List<string>>();
Dictionary<int, List<string>> probabilityDictionaryBoss = new Dictionary<int, List<string>>();
private void Start()
{
originalPoint= generatorPoint.transform.position;
@ -78,6 +83,7 @@ public class LevelGenerator : Singleton<LevelGenerator>
CheckEliteMonster();
SetRoomBig();
ShowMap();
SetRoomEnemyPoolAndMap();
}
//Éú³ÉÍø¸ñ
public void GenerateGridMap( int generatorLine,int generatorColumn)
@ -715,5 +721,134 @@ public class LevelGenerator : Singleton<LevelGenerator>
}
}
//设置房间怪物组和地图
public void SetRoomEnemyPoolAndMap()
{
ReadEnemyPoolInforCsv(enemyPoolFileName);
//权重概率表
Dictionary<int ,int> weakProbabilityDic = new Dictionary<int, int>();
int weakTotalWight = 0;
foreach (var pool in probabilityDictionaryWeak.Keys.ToList())
{
weakTotalWight += int.Parse(probabilityDictionaryWeak[pool][2]);
weakProbabilityDic.Add(weakTotalWight,pool);
}
List <int> strongProbabilityList = probabilityDictionaryStrong.Keys.ToList();
List<int> eliteProbabilityList = probabilityDictionaryElite.Keys.ToList();
List <int> bossProbabilityList = probabilityDictionaryBoss.Keys.ToList();
//设置怪物池
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++)
{
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++)
{
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j];
switch (currentLevelNode.roomType)
{
case RoomType.monster:
if (i < 5)
{
currentLevelNode.fightEenemyPool = Name.EnemyPool.Weak;
//根据怪物池随机怪物组和地图
int mark1 = Random.Range(0, weakTotalWight);
List <int> weakProbabilityList = weakProbabilityDic .Keys .ToList();
for (int a = 0; a < weakProbabilityList.Count; a++)
{
if (mark1 < weakProbabilityList[a])
{
string[] enemys = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
break;
}
}
}
else
{
currentLevelNode.fightEenemyPool = Name.EnemyPool.Strong;
//根据怪物池随机怪物组和地图
int mark2 = Random.Range(0, 100);
for (int a = 0; a < strongProbabilityList.Count; a++)
{
if (mark2 < strongProbabilityList[a])
{
string[] enemys = probabilityDictionaryStrong[strongProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryStrong[strongProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
}
break;
case RoomType.boss:
currentLevelNode.fightEenemyPool = Name.EnemyPool.Boss;
//根据怪物池随机怪物组和地图
int mark3 = Random.Range(0, 100);
for (int a = 0; a < bossProbabilityList.Count; a++)
{
if (mark3 < bossProbabilityList[a])
{
string[] enemys = probabilityDictionaryBoss[bossProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryBoss[bossProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
break;
case RoomType.eliteMonster:
currentLevelNode.fightEenemyPool = Name.EnemyPool.Elite;
//根据怪物池随机怪物组和地图
int mark4 = Random.Range(0, 100);
for (int a = 0; a < eliteProbabilityList.Count; a++)
{
if (mark4 < eliteProbabilityList[a])
{
string[] enemys = probabilityDictionaryElite[eliteProbabilityList[a]][3].Split(';');
currentLevelNode.enemyList = enemys.ToList();
string[] maps = probabilityDictionaryElite[eliteProbabilityList[a]][4].Split(';');
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())];
}
}
break;
}
}
}
}
public void ReadEnemyPoolInforCsv(string fileName)
{
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader reader = new StreamReader(fs))
{
bool isFirstLine = true;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (isFirstLine)
{
isFirstLine = false;
continue; // 跳过标题行
}
// 用逗号分隔每行数据
string[] values = line.Split(',');
switch (values[1])
{
case Name.EnemyPool.Weak:
probabilityDictionaryWeak.Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Strong:
probabilityDictionaryStrong .Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Elite:
probabilityDictionaryElite.Add(int.Parse(values[0]), values.ToList());
break;
case Name.EnemyPool.Boss:
probabilityDictionaryBoss.Add(int.Parse(values[0]), values.ToList());
break;
}
}
}
}
}

52
ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelNode.cs

@ -31,7 +31,13 @@ public class LevelNode : MonoBehaviour
public Text roomText;
[Header("路过房间标识")]
public GameObject passByMark;
//怪物地图生成参数
[Header("当前战斗怪物池强度")]
public string fightEenemyPool;
[Header("当前战斗怪物列表")]
public List<string> enemyList = new List<string>();
[Header("当前战斗地图")]
public string mapIndex;
private void OnEnable()
{
roomIcon = this.transform.GetChild(1).GetComponent<Image>();
@ -118,11 +124,11 @@ public class LevelNode : MonoBehaviour
LevelDevelopManager.Instance.levelDevelopData.levelStep += 1;
//计算敌人强度
if (roomType == LevelDevelopManager.RoomType.monster || roomType == LevelDevelopManager.RoomType.eliteMonster || roomType == LevelDevelopManager.RoomType.boss)
/* if (roomType == LevelDevelopManager.RoomType.monster || roomType == LevelDevelopManager.RoomType.eliteMonster || roomType == LevelDevelopManager.RoomType.boss)
{
PlayerStatsManager.Instance.CalculateEnemyStrength(roomType);
}
}*/
ScenceLoadManager.Instance.LoadTargetLevel(roomDestinationIndex);
@ -168,6 +174,13 @@ public class LevelNode : MonoBehaviour
{
levelData.nextLevelNodes.Add(new Vector2(child.line, child.column));
}
levelData.fightEenemyPool = fightEenemyPool;
foreach (var enemy in enemyList)
{
levelData.enemyList.Add(enemy);
}
levelData .mapIndex = mapIndex;
return levelData;
}
@ -176,6 +189,9 @@ public class LevelNode : MonoBehaviour
isUse = levelData.isUse;
isPassBy = levelData.passBy;
roomType = levelData.roomType;
fightEenemyPool = levelData.fightEenemyPool;
enemyList = levelData.enemyList;
mapIndex = levelData.mapIndex;
SetUpRoom(roomType);
// LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(this);
}
@ -206,6 +222,10 @@ public class LevelNode : MonoBehaviour
roomText.text = "精英怪";
roomIcon.sprite = LevelDevelopManager.Instance.eliteMonsterIcon;
break;
case LevelDevelopManager.RoomType.eliteAndMonster:
roomText.text = "选择战斗";
roomIcon.sprite = LevelDevelopManager.Instance.eliteAndMonsterIcon;
break;
case LevelDevelopManager.RoomType.boss:
roomText.text = "Boss";
roomIcon.sprite = LevelDevelopManager.Instance.bossIcon;
@ -226,6 +246,30 @@ public class LevelNode : MonoBehaviour
roomText.text = "宝箱";
roomIcon.sprite = LevelDevelopManager.Instance.treasureIcon;
break;
case LevelDevelopManager.RoomType.forging:
roomText.text = "锻造";
roomIcon.sprite = LevelDevelopManager.Instance.forgingIcon;
break;
case LevelDevelopManager.RoomType.deleteCard:
roomText.text = "删卡";
roomIcon.sprite = LevelDevelopManager.Instance.deleteCardIcon;
break;
case LevelDevelopManager.RoomType.addCard:
roomText.text = "新卡";
roomIcon.sprite = LevelDevelopManager.Instance.addCardIcon;
break;
case LevelDevelopManager.RoomType.resource:
roomText.text = "资源";
roomIcon.sprite = LevelDevelopManager.Instance.resourceIcon;
break;
case LevelDevelopManager.RoomType.potion:
roomText.text = "药水";
roomIcon.sprite = LevelDevelopManager.Instance.potionIcon;
break;
case LevelDevelopManager.RoomType.start:
roomText.text = "开始";
roomIcon.sprite = LevelDevelopManager.Instance.startIcon;
break;
}
}

163
ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs

@ -1,9 +1,11 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering.VirtualTexturing;
using UnityEngine.UI;
using static GameManager;
using static UnityEngine.Rendering.DebugUI;
public class MapManager : Singleton<MapManager>
{
@ -49,6 +51,9 @@ public class MapManager : Singleton<MapManager>
public GameObject paper;
[Header("白色太阳")]
public Image whiteColorNode;
[Header("生成物品")]
public string itemPrefabPath;
void Start()
{
StartCoroutine (starttest());
@ -125,11 +130,7 @@ public class MapManager : Singleton<MapManager>
enemyList = EnemyPool.GetRandomEnemyPool(EnemyPool.bossEnemyPool);
break;
}
foreach (string a in enemyList)
{
Debug.Log("怪物是" + a);
}
List<GameObject> enemyListTest =new List<GameObject> ();
HashSet<MapUnity> mapSet = new HashSet<MapUnity> ();
List<MapUnity> mapList = new List<MapUnity> ();
@ -184,8 +185,8 @@ public class MapManager : Singleton<MapManager>
bookAnim.GetComponent<Animator>().SetTrigger("move");
//书缝愈合
//bookUpAnim.SetActive(true);
StartCoroutine(GenerateProcessTest());
enemyBurn(PlayerStatsManager.Instance.levelDevelopData.fightEenemyPool);
StartCoroutine(GenerateProcessTest());
// enemyBurn(PlayerStatsManager.Instance.levelDevelopData.fightEenemyPool);
}
//总动画控制进程
public void ContinueProgress()
@ -202,6 +203,7 @@ public class MapManager : Singleton<MapManager>
yield return StartCoroutine(SetUpMapUnityForCube());
yield return StartCoroutine(UPMoveMapUnity());
yield return new WaitForSeconds(2);
yield return StartCoroutine(GenerateItem());
yield return StartCoroutine(EnemyGenerate());
yield return StartCoroutine(CompleteGenerate());
}
@ -357,6 +359,28 @@ public class MapManager : Singleton<MapManager>
enemynode.positionY = enemy.locationY;
enemynode.StartPosition();
}
LevelDevelopData_SO levelData_SO = PlayerStatsManager.Instance.levelDevelopData;
LevelDevelopData_SO.levelData currentLevelData = levelData_SO.levelSaveMap[(int)levelData_SO.currentPoint.x].levelDataList[(int)levelData_SO.currentPoint.y];
List<string> enemyList = new List<string>();
foreach (var enemyID in currentLevelData.enemyList)
{
enemyList.Add(EnemyPool.enemyIndexToString(int.Parse(enemyID)));
}
List <GameObject > enemyPrefabList = EnemyPool.getEnemyPrefab(enemyList);
HashSet<MapUnity> allCanUseNode = getNodeTools.getAllCanUseNode();
foreach (var enemyPrefab in enemyPrefabList)
{
MapUnity currentMapUnity = allCanUseNode.ElementAt(Random.Range(0, allCanUseNode.Count));
var currentEnemy = Instantiate(enemyPrefab, currentMapUnity.transform.position,enemyPrefab.transform.rotation);
EnemyNode enemynode = currentEnemy.GetComponent<EnemyNode>();
enemynode.positionX = currentMapUnity.locationX;
enemynode.positionY = currentMapUnity.locationY;
enemynode.StartPosition();
allCanUseNode.Remove(currentMapUnity);
yield return null;
}
yield return null;
}
IEnumerator SetUpMapUnity()
@ -653,6 +677,131 @@ public class MapManager : Singleton<MapManager>
}
}
//生成初始物品
IEnumerator GenerateItem()
{
//提前占用玩家初始节点,根据玩家入场方式修改应该会被删除
GameManager.Instance .X [GameManager .Instance .player .startPositionX ].Y[GameManager.Instance.player.startPositionY].blocked = true;
LevelDevelopData_SO levelData_SO = PlayerStatsManager.Instance.levelDevelopData;
LevelDevelopData_SO.levelData currentLevelData = levelData_SO.levelSaveMap[(int)levelData_SO.currentPoint.x].levelDataList[(int)levelData_SO.currentPoint.y];
List<string> itemList = PlayerStatsManager.Instance.itemInforDic[int.Parse(currentLevelData.mapIndex)];
HashSet<MapUnity> allNode = getNodeTools.getAllCanUseNode();
//获取物品上限
List<string> totalInfor = PlayerStatsManager.Instance.itemLimitDic[30001];
string limitInfor=null ;
switch (currentLevelData.fightEenemyPool)
{
case Name.EnemyPool.Weak:
limitInfor = totalInfor[levelData_SO.mapLevel];
break;
case Name.EnemyPool.Strong:
limitInfor = totalInfor[levelData_SO.mapLevel + 3];
break;
case Name.EnemyPool.Elite:
limitInfor = totalInfor[levelData_SO.mapLevel + 6];
break;
case Name.EnemyPool.Boss:
limitInfor = totalInfor[levelData_SO.mapLevel + 9];
break;
}
string[] limitValue = limitInfor.Split(';');
Debug.Log("随机数量限制" + limitInfor);
//地形区间
int lowerLandformLimit = int.Parse(limitValue[0]);
int maxLandformLimit = int.Parse(limitValue[1]);
//地块区间
int lowerLandblockLimit = int.Parse(limitValue[2]);
int maxLandblockLimit = int.Parse(limitValue[3]);
//物品区间
int lowerObjectItemLimit = int.Parse(limitValue[4]);
int maxObjectItemLimit = int.Parse(limitValue[5]);
//切分物品数据
List <string[]> itemInforStringList = new List <string[]>();
for (int i = 0; i < itemList.Count; i++)
{
string[] values = itemList[i].Split(';');
itemInforStringList.Add(values);
}
//随机物品数量并限制上限
int count = 0;
List <int> itemCountList = new List <int>();
while (count <100)
{
count++;
int landformCount = 0;
int blockCount = 0;
int objectCount = 0;
itemCountList.Clear();
for (int i = 0; i < itemInforStringList.Count; i++)
{
int itemCount = Random.Range(int.Parse(itemInforStringList[i][2]), int.Parse(itemInforStringList[i][3])+1);
Debug.Log("随机" + itemInforStringList[i][1] + itemCount);
switch (int.Parse ( itemInforStringList[i][0]))
{
case 1:
landformCount+=itemCount;
break;
case 2:
blockCount+=itemCount;
break;
case 3:
objectCount+=itemCount;
break;
}
itemCountList.Add(itemCount);
}
if(Scope0fJudgment(lowerLandformLimit , maxLandformLimit , landformCount )&& Scope0fJudgment(lowerLandblockLimit, maxLandblockLimit, blockCount) && Scope0fJudgment(lowerObjectItemLimit, maxObjectItemLimit,objectCount))
{
Debug.Log("成功");
break;
}
}
//根据随机出的数量表生成物品
for (int i=0;i< itemInforStringList.Count;i++)
{
GameObject item = Resources.Load<GameObject>(itemPrefabPath + itemInforStringList[i][1]);
int itemCount = itemCountList[i];
for(int j=0;j<itemCount;j++)
{
int c = 0;
while (c<=20)
{
c++;
MapUnity currentNode = allNode.ElementAt(Random.Range(0, allNode.Count));
HashSet<MapUnity> takeOverNode = item.GetComponent<ItemTakerOverNode>().TakeOverCalculation(currentNode);
if(takeOverNode !=null )
{
if (takeOverNode.IsSubsetOf(allNode))
{
item.GetComponent<ItemTakerOverNode>().GenerateBlockItem(currentNode, item);
allNode.ExceptWith(takeOverNode);
break;
}
}
}
}
yield return null;
}
yield return null;
}
public bool Scope0fJudgment(int min,int max,int value )
{
Debug.Log("随机判断" + "min:" + min + "max:" + max);
if(value >=min &&value <=max )
{
return true;
}
return false;
}
[System .Serializable ]
public class EnemyGenerateData
{

29
ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs

@ -97,6 +97,10 @@ public class MapUnity : MonoBehaviour
public LayerMask touchLayerMask;
[Header("ÁÙ½Ó³ØÉäÏ߯ðʼµã")]
public Transform touchRayStartPoint;
[Header("敌人受到哪种颜色攻击")]
public int colorUnderAttack;
public void StartRegiste()
{
if (compalte == false)
@ -211,38 +215,23 @@ public class MapUnity : MonoBehaviour
{
case 1:
playerMark.meshRenderer.material = redPre;
if(enemyNode !=null )
{
enemyNode.colorUnderAttack = 1;
}
colorUnderAttack = newColor;
break;
case 2:
playerMark.meshRenderer.material = whitePre;
if (enemyNode != null)
{
enemyNode.colorUnderAttack = 2;
}
colorUnderAttack = newColor;
break;
case 3:
playerMark.meshRenderer.material = bluePre;
if (enemyNode != null)
{
enemyNode.colorUnderAttack = 3;
}
colorUnderAttack = newColor;
break;
case 4:
playerMark.meshRenderer.material = greenPre;
if (enemyNode != null)
{
enemyNode.colorUnderAttack = 4;
}
colorUnderAttack = newColor;
break;
case 5:
playerMark.meshRenderer.material = blackPre;
if (enemyNode != null)
{
enemyNode.colorUnderAttack = 5;
}
colorUnderAttack = newColor;
break;
}
}

69
ColorlessWorld-2024-4-2/Assets/Scripts/PlayerManager/PlayerStatsManager.cs

@ -1,9 +1,11 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using static Name;
public class PlayerStatsManager : Singleton <PlayerStatsManager>
{
@ -26,12 +28,21 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
public bool isPass;
[Header("是否经是宝箱")]
public bool isTreasure;
[Header("房间物品字典")]
public string itemCsvFilePath;
public Dictionary<int, List<string>> itemInforDic = new Dictionary<int, List<string>>();
[Header("房间物品上限字典")]
public string itemLimitCsvFilePath;
public Dictionary<int, List<string>> itemLimitDic = new Dictionary<int, List<string>>();
private void Start()
{
DontDestroyOnLoad(this.gameObject);
ReadItemInforCsv(itemCsvFilePath);
ReadItemLimitCsv(itemLimitCsvFilePath);
}
//选项效果==加一个同步UI的订阅系统
@ -141,30 +152,52 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
return cardPrefab;
}
//¼ÆËã¹ÖÎïÇ¿¶È
public void CalculateEnemyStrength(LevelDevelopManager .RoomType currentRoomType )
//读取房间生成物品字典
public void ReadItemInforCsv(string fileName)
{
if(levelDevelopData.levelStep == levelDevelopData.levelSaveMap .Count -1)
{
levelDevelopData.fightEenemyPool = Name.EnemyPool.Boss;
return;
}
if (levelDevelopData.levelStep<5)
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader reader = new StreamReader(fs))
{
if(currentRoomType != LevelDevelopManager.RoomType.eliteMonster )
bool isFirstLine = true;
while (!reader.EndOfStream)
{
levelDevelopData.fightEenemyPool = Name.EnemyPool.Weak;
string line = reader.ReadLine();
if (isFirstLine)
{
isFirstLine = false;
continue; // 跳过标题行
}
// 用逗号分隔每行数据
string[] values = line.Split(',');
List<string> itemInfor = values.ToList();
itemInfor.RemoveAt(0);
itemInforDic.Add(int.Parse(values[0]), itemInfor);
}
}
else
}
//读取房间生成物品上限
public void ReadItemLimitCsv(string fileName)
{
string filePath = Path.Combine(Application.streamingAssetsPath, fileName);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (StreamReader reader = new StreamReader(fs))
{
if (currentRoomType != LevelDevelopManager.RoomType.eliteMonster)
{
levelDevelopData.fightEenemyPool = Name.EnemyPool.Strong;
}
else
bool isFirstLine = true;
while (!reader.EndOfStream)
{
levelDevelopData.fightEenemyPool = Name.EnemyPool.Elite;
string line = reader.ReadLine();
if (isFirstLine)
{
isFirstLine = false;
continue; // 跳过标题行
}
// 用逗号分隔每行数据
string[] values = line.Split(',');
List<string> itemInfor = values.ToList();
itemInfor.RemoveAt(0);
itemLimitDic.Add(int.Parse(values[0]), itemInfor);
}
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Data_SO/LevelDevelopData_SO.cs

@ -7,12 +7,10 @@ using UnityEngine;
public class LevelDevelopData_SO : ScriptableObject
{
public int levelStep;//关卡前进步数
public int mapLevel;//大关层数
public Vector2 currentPoint;//当前选择关卡,用来判断下一步那些可以走
public List<LevelDataList> levelSaveMap = new List<LevelDataList>();//关卡保存数据列表
[Header("µ±Ç°²ãÕ½¶·¹ÖÎï³Ø")]
public string fightEenemyPool;
[System.Serializable]
public class LevelDataList
{
@ -30,5 +28,12 @@ public class LevelDevelopData_SO : ScriptableObject
public List<Vector2> fatherLevelNodes = new List<Vector2>();
public List<Vector2> nextLevelNodes = new List<Vector2>();
//当前层战斗怪物池强度
public string fightEenemyPool;
//当前层战斗怪物列表
public List<string> enemyList = new List<string>();
//当前层战斗地图
public string mapIndex;
}
}

2
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/Data_SO/PlayerState_SO.cs

@ -29,6 +29,8 @@ public class PlayerState_SO : ScriptableObject
public int cardRewardNumToGget;//实际可以选择卡牌奖励的数量
public int canColorCount;//玩家可以初始染色多少地块
public int castRange;
[Header("资源系统")]

8
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 06f37aca6b480fd4fa7567b746117fb7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

18
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI/MouseSetActiveUI.cs

@ -0,0 +1,18 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class MouseSetActiveUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public GameObject gameObject;
public void OnPointerEnter(PointerEventData eventData)
{
gameObject.SetActive(true);
}
public void OnPointerExit(PointerEventData eventData)
{
gameObject .SetActive (false);
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/UI/MouseSetActiveUI.cs.meta

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

18
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/getNodeTools.cs

@ -780,4 +780,22 @@ public class getNodeTools
return influencePreviewPool;
}
//Äõ½È«Í¼¿ÉÓýڵã
public static HashSet<MapUnity> getAllCanUseNode()
{
HashSet <MapUnity > mapUnities = new HashSet<MapUnity>();
for (int i=0;i<GameManager .Instance .X .Count;i++ )
{
for (int j = 0; j < GameManager.Instance.X[i].Y .Count; j++)
{
MapUnity mapUnity = GameManager.Instance.X[i].Y[j];
if (mapUnity .blocked ==false && mapUnity .gameObject .activeInHierarchy ==true )
{
mapUnities .Add( mapUnity );
}
}
}
return mapUnities;
}
}

19
ColorlessWorld-2024-4-2/Assets/Scripts/UI/CardActiveSort/CardActiveSort.cs

@ -18,8 +18,8 @@ public class CardActiveSort : Singleton <CardActiveSort>
public List<GameObject> prepareHandCard = new List<GameObject>();//正在飞还没到手里的卡牌
public List<Vector3> newPointList = new List<Vector3>();//预先计算好的新位置
public float drawMoveSpeed=10f;
public bool canDrawCard;
// public bool canDrawCard;
List<RectTransform> cardEntitieList = new List<RectTransform>();//所有手牌的列表
private void Start()
{
targrtPoint = transform.localPosition - new Vector3(0, radius, 0);
@ -91,11 +91,10 @@ public class CardActiveSort : Singleton <CardActiveSort>
cardOnMouseEnte.oringinIndex = cardOnMouseEnte.transform.GetSiblingIndex();
}
}
public IEnumerator ReflashCardPointWithDrawCards()
public IEnumerator SortOldCardPointWithDrawCards()
{
prepareHandCard.Clear();
canDrawCard = false;
List<RectTransform> cardEntitieList = new List<RectTransform>();
cardEntitieList.Clear();
//将已有的手牌加入列表
for (int i = 0; i < transform.childCount; i++)
{
@ -109,7 +108,7 @@ public class CardActiveSort : Singleton <CardActiveSort>
foreach (var card in cardEntitieList)
{
CardOnMouseEnter cardOnMouseEnte = card.GetComponent<CardOnMouseEnter>();
cardOnMouseEnte.StopAllCoroutines();
cardOnMouseEnte.StopAllCoroutines();
}
Debug.Log("抽卡排序");
@ -128,7 +127,7 @@ public class CardActiveSort : Singleton <CardActiveSort>
for (int i = 0; i < cardCount; i++)
{
currentangle += angleIncrement;
newPointList .Add ( new Vector3(targrtPoint.x - radius * Mathf.Cos(currentangle * Mathf.Deg2Rad), targrtPoint.y + radius * Mathf.Sin(currentangle * Mathf.Deg2Rad), 0));
newPointList.Add(new Vector3(targrtPoint.x - radius * Mathf.Cos(currentangle * Mathf.Deg2Rad), targrtPoint.y + radius * Mathf.Sin(currentangle * Mathf.Deg2Rad), 0));
}
//移动已有卡牌到新位置
for (int i = 0; i < cardEntitieList.Count; i++)
@ -137,7 +136,10 @@ public class CardActiveSort : Singleton <CardActiveSort>
yield return new WaitForSeconds(0.1f);
}
Debug.Log("抽卡点3");
canDrawCard = true;//标识已经移动完成,让抽卡方法生成新卡牌
// canDrawCard = true;//标识已经移动完成,让抽卡方法生成新卡牌
}
public IEnumerator ReflashCardPointWithDrawCards()
{
yield return new WaitUntil(() => prepareHandCard.Count == drawCardCount);//等待新抽的卡牌移动到位
Debug.Log("抽卡点4"+drawCardCount );
//将新加进来的卡牌加入列表
@ -157,6 +159,7 @@ public class CardActiveSort : Singleton <CardActiveSort>
cardOnMouseEnte.oringinIndex = cardOnMouseEnte.transform.GetSiblingIndex();
}
GameManager.Instance.onDraw = false;
yield return null;
}
IEnumerator MoveCard(List <RectTransform > cardEntitieList,int i)
{

64
ColorlessWorld-2024-4-2/Assets/Scripts/manager/ObjectItemSettleManager.cs

@ -0,0 +1,64 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectItemSettleManager : Singleton<ObjectItemSettleManager>
{
public List<EnemyNode> readyToActivateEffects = new List<EnemyNode>();
private void Start()
{
GameManager.Instance.usedCardEvent += StartSettleAllBlocks;
}
public void StartSettleAllBlocks()
{
StartCoroutine(SettleAllBlocks(readyToActivateEffects));
}
public IEnumerator SettleAllBlocks(List<EnemyNode> blockNodes)
{
yield return new WaitForSeconds(0.5f);//开始先等待确认伤害已经打出,或者更改伤害打出的携程确保伤害输出后再开启结算
List<EnemyNode> blockNodesNew = new List<EnemyNode>();
for (int i = 0; i < blockNodes.Count; i++)
{
Debug.Log("范围地块血量" + blockNodes[i].EnemyState.currentNumberOfHits);
if (blockNodes[i].EnemyState.currentNumberOfHits <= 0)
{
List<MapUnity> mapUnities = blockNodes[i].PreviewColorRange();
if (mapUnities != null)
{
foreach (var node in mapUnities)
{
if (node.enemyNode != null && blockNodesNew.Contains(node.enemyNode) == false&&node .enemyNode != blockNodes[i])
{
blockNodesNew.Add(node.enemyNode);
}
}
}
yield return StartCoroutine(blockNodes[i].ActiveEffect());
if (mapUnities != null)
{
Debug.Log("范围" + mapUnities.Count);
}
else
{
Debug.Log("范围空");
}
}
}
if(blockNodesNew .Count >0)
{
StartCoroutine(SettleAllBlocks(blockNodesNew));
}
}
public void ActivateEffects(EnemyNode enemyNode)
{
//enemyNode .
}
}

11
ColorlessWorld-2024-4-2/Assets/Scripts/manager/ObjectItemSettleManager.cs.meta

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

77
ColorlessWorld-2024-4-2/Assets/Scripts/manager/SettlementManager.cs

@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
@ -9,8 +10,8 @@ public class SettlementManager : Singleton<SettlementManager>
{
public static int settleTurn;
//地块预览计数时,预览方法返回的,所有被影响的地块
public HashSet <MapUnity > mapUnityColorPreviewCountPool = new HashSet<MapUnity>();
public void abnormalConditionWork(string condition, int stackVak, List<MapUnity> influencePreviewPool)
{
for (int i = 0; i < influencePreviewPool.Count; i++)
@ -82,13 +83,11 @@ public class SettlementManager : Singleton<SettlementManager>
}
}
//预计地块计数
public List <int> PreviewColorMapUnity(CardOriginalData cardOriginalData, MapUnity targetNode)
{
List<int> mapColorCount = new List<int>() { 0, 0, 0, 0, 0, 0, 0 };//1red,2white,3blue,4green,5black,6matel
if (cardOriginalData.CardType != Name.CardType.dyeing)
{
return mapColorCount;
}
public void PreviewColorMapUnity(CardOriginalData cardOriginalData, MapUnity targetNode)
{
List<EnemyNode> blockNodes = new List<EnemyNode>();//顺序结算被打爆地块的效果
mapUnityColorPreviewCountPool.Clear();
Vector3 face = targetNode.transform.position - GameManager.Instance.playerOn.transform.position;
float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180;
List<(int, int, int)> cubeList = new List<(int, int, int)>();
@ -126,14 +125,65 @@ public class SettlementManager : Singleton<SettlementManager>
// endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i]));
if (endNode.whoColour != Name.stringColorToint(cardOriginalData.nodesColor[i]) && endNode.whoColour != 6)
{
mapColorCount[Name.stringColorToint(cardOriginalData.nodesColor[i])] += 1;
mapColorCount[endNode.whoColour] -= 1;
//先不结算数值 ,等所有影响池计算完之后再统计数据
//mapColorCount[Name.stringColorToint(cardOriginalData.nodesColor[i])] += 1;
// mapColorCount[endNode.whoColour] -= 1;
mapUnityColorPreviewCountPool.Add(endNode);
// endNode.colorUnderAttack = Name.stringColorToint(cardOriginalData.nodesColor[i]);
}
endNode.switchPreColor(Name.stringColorToint(cardOriginalData.nodesColor[i]));//切换预览材质,并且改变预接受色
if (endNode .enemyNode != null )
{
blockNodes.Add(endNode.enemyNode);
}
ObjectItemSettleManager.Instance.readyToActivateEffects = blockNodes;
}
}
// SettleAllBlocks(blockNodes);
}
public List<int> GetNodeCountStats()
{
List<int> mapColorCount = new List<int>() { 0, 0, 0, 0, 0, 0, 0 };//1red,2white,3blue,4green,5black,6matel
foreach (var node in mapUnityColorPreviewCountPool)
{
if (node.whoColour != node.colorUnderAttack && node.whoColour != 6)
{
mapColorCount[node.whoColour] -= 1;
mapColorCount[node.colorUnderAttack] += 1;
}
}
return mapColorCount;
}
public void SettleAllBlocks(List<EnemyNode> blockNodes)
{
List<EnemyNode> blockNodesNew = new List<EnemyNode>();
for (int i = 0; i < blockNodes.Count; i++)
{
List<MapUnity> mapUnities = blockNodes[i].PreviewColorRange();
if(mapUnities !=null )
{
foreach (var node in mapUnities)
{
mapUnityColorPreviewCountPool.Add(node);
if (node.enemyNode != null && blockNodes.Contains(node.enemyNode) == false)
{
blockNodesNew.Add(node.enemyNode);
}
}
}
}
if(blockNodesNew .Count >0)
{
SettleAllBlocks(blockNodesNew);
}
}
//预览涂色颜色
public void PreviewSwitchColor(CardOriginalData cardOriginalData, MapUnity targetNode)
{
@ -699,7 +749,8 @@ public class SettlementManager : Singleton<SettlementManager>
EnemyManager.Instance.enemyRefreshEnemyBuffIcon(0);
//广播释放完一张卡牌的接口
GameManager.Instance.BroadCastPlayerUsedCard();
GameManager.Instance.BroadUsedCardEvent();
GameManager.Instance.BroadCastWhirlpoolEffectSycn();
}
public void spreadColorToAround(int roundNum,MapUnity target)

5
ColorlessWorld-2024-4-2/Assets/StreamingAssets/EnemyPoolToLevel.csv

@ -0,0 +1,5 @@
怪物组编号,强度,权重,怪物表,地图表
101,weak,25,2001,100001
102,weak,25,2002;2002,100001;100002
103,weak,25,2003;2001;2002,100001;100002;100003
104,weak,25,2004;2005;2003;2003,100001;100002;100004
1 怪物组编号 强度 权重 怪物表 地图表
2 101 weak 25 2001 100001
3 102 weak 25 2002;2002 100001;100002
4 103 weak 25 2003;2001;2002 100001;100002;100003
5 104 weak 25 2004;2005;2003;2003 100001;100002;100004

7
ColorlessWorld-2024-4-2/Assets/StreamingAssets/EnemyPoolToLevel.csv.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 31773780d374d484fb94e91b58d0b06c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

5
ColorlessWorld-2024-4-2/Assets/StreamingAssets/LevelMapToItem.csv

@ -0,0 +1,5 @@
地图编号,物品数据,,,
100001,3;tree;5;10,3;boom;4;6,1;Whirlpool;0;2,2;Vacancy;0;5
100002,3;tree;0;1,3;boom;5;10,1;Whirlpool;0;2,2;Vacancy;0;4
100003,3;tree;0;1,3;boom;0;1,1;Whirlpool;0;2,2;Vacancy;1;5
100004,3;tree;0;1,3;boom;0;1,1;Whirlpool;0;2,2;Vacancy;2;8
Can't render this file because it has a wrong number of fields in line 2.

7
ColorlessWorld-2024-4-2/Assets/StreamingAssets/LevelMapToItem.csv.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 062c61522f413ce46946030ab2715b92
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

2
ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv

@ -0,0 +1,2 @@
地图编号,弱怪,,,强怪,,,精英,,,boss,,
30001,0;1;0;1;0;15,0;1;0;1;0;1,1;2;1;1;1;1,0;2;0;1;0;1,1;2;1;2;1;2,2;3;2;3;2;3,1;2;1;2;1;2,2;2;2;2;2;2,3;3;3;3;3;3,1;2;1;2;1;2,2;3;2;3;2;3,3;4;3;4;3;4
Can't render this file because it has a wrong number of fields in line 2.

7
ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv.meta

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 311d278fd665683429f28cbfdd56a0b6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
Loading…
Cancel
Save