Browse Source

染色嵌套

pull/76/head
45 1 year ago
parent
commit
8c0da88f6e
  1. 716
      ColorlessWorld-2024-4-2/Assets/GameDate/LevelDate/LevelState_1.asset
  2. 3
      ColorlessWorld-2024-4-2/Assets/Prefab/MapNodePrefab/MapUnity _2.prefab
  3. 189
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab
  4. 7
      ColorlessWorld-2024-4-2/Assets/Resources/ItemPrefab/Vacancy.prefab.meta
  5. 20
      ColorlessWorld-2024-4-2/Assets/Scenes/Map.unity
  6. 7
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  7. 8
      ColorlessWorld-2024-4-2/Assets/Scripts/Card/CardDrag.cs
  8. 4
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/BlackSheep.cs
  9. 41
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs
  10. 1
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/BlockNode.cs
  11. 52
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Boom.cs
  12. 24
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/TNTBucket.cs
  13. 5
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Tree.cs
  14. 25
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs
  15. 11
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/BlockNode/Vacancy.cs.meta
  16. 13
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/TakerOverNode/ItemTakerOverNode.cs
  17. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Item/Whirlpool.cs
  18. 10
      ColorlessWorld-2024-4-2/Assets/Scripts/EnemyPlanFunction/EnemyAction.cs
  19. 15
      ColorlessWorld-2024-4-2/Assets/Scripts/GameManager.cs
  20. 139
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LeveGeneraterNew.cs
  21. 2
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelDevelopManager.cs
  22. 7
      ColorlessWorld-2024-4-2/Assets/Scripts/LeveProcess/LevelNode.cs
  23. 63
      ColorlessWorld-2024-4-2/Assets/Scripts/MapManager.cs
  24. 29
      ColorlessWorld-2024-4-2/Assets/Scripts/MapUnity.cs
  25. 28
      ColorlessWorld-2024-4-2/Assets/Scripts/PlayerManager/PlayerStatsManager.cs
  26. 66
      ColorlessWorld-2024-4-2/Assets/Scripts/manager/SettlementManager.cs
  27. 10
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/LevelMapToItem.csv
  28. 5
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv
  29. 7
      ColorlessWorld-2024-4-2/Assets/StreamingAssets/MapItemCount.csv.meta
  30. 0
      ColorlessWorld-2024-4-2/Temp/FSTimeGet-da61fd9dc8019424dae9d7d7348fdaa8
  31. BIN
      ColorlessWorld-2024-4-2/Temp/FSTimeGet-e0bcc83011a3a2d45880755fdd98fcce
  32. 0
      ColorlessWorld-2024-4-2/Temp/UnityLockfile
  33. BIN
      ColorlessWorld-2024-4-2/Temp/__Backupscenes/0.backup
  34. BIN
      ColorlessWorld-2024-4-2/Temp/workerlic

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

File diff suppressed because it is too large

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

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

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

@ -0,0 +1,189 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1496019408761085200
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5563030652977735299}
m_Layer: 0
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5563030652977735299
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1496019408761085200}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 1.17, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 6047049870113643063}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !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: 6425500129360686181}
- component: {fileID: 327044631283834333}
m_Layer: 0
m_Name: Vacancy
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.13052616, z: 0, w: 0.9914449}
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: 5563030652977735299}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 15, 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 &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
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:

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

@ -3836,16 +3836,18 @@ MonoBehaviour:
- levelColumn: [] - levelColumn: []
monsterIcon: {fileID: 1709634788, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3} monsterIcon: {fileID: 1709634788, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
eliteMonsterIcon: {fileID: 929432110, 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} bossIcon: {fileID: 865203525, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
shopIcon: {fileID: 865446097, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3} shopIcon: {fileID: 865446097, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
campfireIcon: {fileID: -1693594073, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3} campfireIcon: {fileID: -1693594073, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
incidentIcon: {fileID: -687936468, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3} incidentIcon: {fileID: -687936468, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
treasureIcon: {fileID: 558621461, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3} treasureIcon: {fileID: 558621461, guid: ee9d3d2936bac1148abcec2385b98ec3, type: 3}
forgingIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} forgingIcon: {fileID: 21300000, guid: 8ef49f8fd07fb3c4a9605ea6310de0bf, type: 3}
deleteCardIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} deleteCardIcon: {fileID: 21300000, guid: 2b6cbc9fb953ffc4eb02968e26d8f0cb, type: 3}
addCardIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} addCardIcon: {fileID: 21300000, guid: a8b50b2b4dd2d3b429b213be2a984e0b, type: 3}
resourceIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} resourceIcon: {fileID: 21300000, guid: 00234b60ba12993428c782adbed08140, type: 3}
potionIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} potionIcon: {fileID: 21300000, guid: 99d6cfcd8d628454989abc09534f0b64, type: 3}
startIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3} startIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3}
--- !u!1 &324633910 --- !u!1 &324633910
GameObject: GameObject:
@ -16105,11 +16107,11 @@ MonoBehaviour:
pathAmount: 3 pathAmount: 3
treasureFloor: 5 treasureFloor: 5
forgingFloor: 11 forgingFloor: 11
randomFightFloor: singleFightFloor: 01000000060000000a000000
normalFightFloor: multipleFightFloor: 0300000008000000
rewardNodeFloor: 0200000007000000 rewardNodeFloor: 0200000007000000
randomRoomTypeWeightBase: 050000000700000008000000090000000a0000000b000000 randomRoomTypeWeightBase: 0c00000008000000090000000a0000000b00000006000000
randomRoomTypeWeightAttach: 05000000050000000700000008000000090000000a0000000b000000 randomRoomTypeWeightAttach: 06000000060000000c00000008000000090000000a0000000b000000
levelPrefab: {fileID: 980190143975240430, guid: c8c223db4c0d17645bca03489a39b721, levelPrefab: {fileID: 980190143975240430, guid: c8c223db4c0d17645bca03489a39b721,
type: 3} type: 3}
levelBossPrefab: {fileID: 980190143975240430, guid: e252a7011ae30f84da117f7e07d56996, levelBossPrefab: {fileID: 980190143975240430, guid: e252a7011ae30f84da117f7e07d56996,

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

@ -3259,7 +3259,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!4 &173840243 --- !u!4 &173840243
@ -3329,7 +3328,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!135 &173840245 --- !u!135 &173840245
@ -10568,7 +10566,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!114 &490441551 --- !u!114 &490441551
@ -10622,7 +10619,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!4 &490441552 --- !u!4 &490441552
@ -39331,6 +39327,7 @@ MonoBehaviour:
isPass: 0 isPass: 0
isTreasure: 0 isTreasure: 0
itemCsvFilePath: LevelMapToItem.csv itemCsvFilePath: LevelMapToItem.csv
itemLimitCsvFilePath: MapItemCount.csv
--- !u!4 &1690695890 --- !u!4 &1690695890
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -49042,7 +49039,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!4 &1624752141151469405 --- !u!4 &1624752141151469405
@ -49878,7 +49874,6 @@ MonoBehaviour:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0 canMove: 0
planAction: 0 planAction: 0
--- !u!1 &7228810535441088300 --- !u!1 &7228810535441088300

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

@ -462,7 +462,9 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
//influencePreviewPool.Add(currentNode); //influencePreviewPool.Add(currentNode);
//更新涂色预览材质 //更新涂色预览材质
SettlementManager.Instance.PreviewSwitchColor(cardEntity.cardOriginalData, currentNode); // SettlementManager.Instance.PreviewSwitchColor(cardEntity.cardOriginalData, currentNode);
//更新地块计数
SettlementManager.Instance.PreviewColorMapUnity(cardEntity.cardOriginalData, currentNode);
} }
//更新效果作用范围内怪物虚血 //更新效果作用范围内怪物虚血
@ -511,8 +513,8 @@ public class CardDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDrag
getNodeTools.setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, 30.0f, currentNode, cardEntity); getNodeTools.setEffectRangePreview(cardEntity.cardOriginalData.EffectRange, 30.0f, currentNode, cardEntity);
//更新效果作用范围内怪物虚血 //更新效果作用范围内怪物虚血
EnemyManager.Instance.ShowExpHp_Observer(cardEntity.influencePreviewPool); 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) public void OnDrag(PointerEventData eventData)

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

@ -171,7 +171,7 @@ public class BlackSheep : MonoBehaviour
IEnumerator ShieldAction() IEnumerator ShieldAction()
{ {
enemyNode.EnemyState.shieldValue += 4; 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 (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{ {
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm)) if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))
@ -185,7 +185,7 @@ public class BlackSheep : MonoBehaviour
{ {
yield return StartCoroutine(moveTowardsPlayer()); yield return StartCoroutine(moveTowardsPlayer());
yield return new WaitForSeconds(1); 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 (getNodeTools.canRemoteAttack(currentNode, enemyNode.EnemyState.attackRange))
{ {
if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm)) if (!enemyNode.EnemyState.abnormalCondition.ContainsKey(AbnormalCondition.disarm))

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

@ -8,6 +8,7 @@ using UnityEngine;
using UnityEngine.Assertions; using UnityEngine.Assertions;
using UnityEngine.UI; using UnityEngine.UI;
using static Name; using static Name;
using static UnityEditor.FilePathAttribute;
using static UnityEngine.Rendering.DebugUI; using static UnityEngine.Rendering.DebugUI;
public class EnemyNode : MonoBehaviour,IEnemyObserver public class EnemyNode : MonoBehaviour,IEnemyObserver
@ -68,8 +69,6 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
[Header("µÐÈ˽üÕ½¹¥»÷¶¯»­ËÙ¶È")] [Header("µÐÈ˽üÕ½¹¥»÷¶¯»­ËÙ¶È")]
public float meleeAttackSpeed; public float meleeAttackSpeed;
public AnimationCurve meleeAttackSpeedCurve; public AnimationCurve meleeAttackSpeedCurve;
[Header("µÐÈËÊܵ½ÄÄÖÖÑÕÉ«¹¥»÷")]
public int colorUnderAttack;
public enum EnemyType public enum EnemyType
{ {
@ -195,7 +194,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
blockUIBar.SyncHp(EnemyState.currentNumberOfHits); 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(); OnDeath();
} }
} }
@ -212,7 +211,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
{ {
enemyUIBar.sheildFlash.enabled = true; enemyUIBar.sheildFlash.enabled = true;
} }
if (mapUnities.Contains(GameManager.Instance.X[positionX].Y[positionY])) if (mapUnities.Contains(getNodeTools .LocationToGetNode (positionX ,positionY)))
{ {
enemyUIBar.isSync = false; enemyUIBar.isSync = false;
float remainDamage = EnemyState.shieldValue - Usermanager.Instance.expectDamage; float remainDamage = EnemyState.shieldValue - Usermanager.Instance.expectDamage;
@ -264,11 +263,13 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void StartPosition() public void StartPosition()
{ {
//this.transform.position = GameManager.Instance.X[positionX].Y[positionY].transform.position; //this.transform.position = GameManager.Instance.X[positionX].Y[positionY].transform.position;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = this; MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
transform.SetParent(GameManager.Instance.X[positionX].Y[positionY].CylinderFloor.transform); mapUnity.enemyNode = this;
//GameManager.Instance.X[positionX].Y[positionY].enemyNode = this;
transform.SetParent(mapUnity.CylinderFloor.transform);
if (enemyType ==EnemyType.block) 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); int result=(int)(trueStepRange * stepMultiplie);
return result; 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() public void EnemyTurn()
{ {
switch (enemyScript) switch (enemyScript)
@ -495,7 +510,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
} }
public void AppearAimLine() 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); EnemyManager.Instance.AttackRangeInfluencedNode(currentMapUnity, EnemyState.attackRange + getStepRange(),rangePool);
switch (planAction) switch (planAction)
@ -567,7 +582,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
private MapUnity getEndNodeTowardsPlayer() 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> shootAbleMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> reachAbleMapUnity = new HashSet<MapUnity>(); HashSet<MapUnity> reachAbleMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>(); HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>();
@ -625,7 +640,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
private MapUnity getEndNodeAwayFromPlayer() 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> nearestMapUnity = new HashSet<MapUnity>();
HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>(); HashSet<MapUnity> endNodeMapUnityList = new HashSet<MapUnity>();
Dictionary<MapUnity, int> endNodeMapUnityMap = new Dictionary<MapUnity, int>(); Dictionary<MapUnity, int> endNodeMapUnityMap = new Dictionary<MapUnity, int>();
@ -782,7 +797,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
EnemyNode newEnemyNode = currentenemy.GetComponent<EnemyNode>(); EnemyNode newEnemyNode = currentenemy.GetComponent<EnemyNode>();
newEnemyNode.positionX = positionX; newEnemyNode.positionX = positionX;
newEnemyNode.positionY = positionY; newEnemyNode.positionY = positionY;
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY]; MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
currentNode.enemyNode = newEnemyNode; currentNode.enemyNode = newEnemyNode;
} }
@ -835,7 +850,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
public void boomAndPolluteCal() public void boomAndPolluteCal()
{ {
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY]; MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY);
HashSet<MapUnity> targetSet=new HashSet<MapUnity>(); HashSet<MapUnity> targetSet=new HashSet<MapUnity>();
targetSet.Add(currentNode); targetSet.Add(currentNode);
getNodeTools.getCircleNodeForBoom(targetSet, 1); getNodeTools.getCircleNodeForBoom(targetSet, 1);

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

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

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

@ -20,14 +20,62 @@ public class Boom : BlockNode
IEnumerator DrawCardAndDestory() IEnumerator DrawCardAndDestory()
{ {
//¼ÆËã½Ç¶È //¼ÆËã½Ç¶È
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY]; MapUnity currentNode = getNodeTools.LocationToGetNode(positionX,positionY);
CAngle(currentNode); CAngle(currentNode);
currentNode.blocked = false; currentNode.blocked = false;
currentNode.enemyNode = null; currentNode.enemyNode = null;
Destroy(this.gameObject); Destroy(this.gameObject);
yield break; 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) public void CAngle(MapUnity currentNode)
{ {
List<MapUnity> effectRangePreviewPool = new List<MapUnity>(); List<MapUnity> effectRangePreviewPool = new List<MapUnity>();
@ -74,7 +122,7 @@ public class Boom : BlockNode
// pos.y = particlePoint.position.y; // pos.y = particlePoint.position.y;
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation); // var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
// bluePartical.transform.SetParent(currentNode.transform); // bluePartical.transform.SetParent(currentNode.transform);
mapNode.switchColor(colorUnderAttack); mapNode.switchColor(currentNode. colorUnderAttack);
} }
} }
} }

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

@ -11,16 +11,32 @@ public class TNTBucket : BlockNode
IEnumerator DrawCardAndDestory() IEnumerator DrawCardAndDestory()
{ {
foreach (var node in GameManager.Instance.X[positionX].Y[positionY].unitPool ) MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
foreach (var node in mapUnity.unitPool )
{ {
if(node != null ) if(node != null )
{ {
node.switchColor(colorUnderAttack); node.switchColor(mapUnity . colorUnderAttack);
} }
} }
GameManager.Instance.X[positionX].Y[positionY].blocked = false; mapUnity.blocked = false;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null; mapUnity.enemyNode = null;
Destroy(this.gameObject); Destroy(this.gameObject);
yield break; 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;
}
} }

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

@ -18,10 +18,11 @@ public class Tree : BlockNode
IEnumerator DrawCardAndDestory() IEnumerator DrawCardAndDestory()
{ {
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount)); TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount));
yield return StartCoroutine(TurnMaster.Instance.MoveCards()); yield return StartCoroutine(TurnMaster.Instance.MoveCards());
GameManager.Instance.X[positionX].Y[positionY].blocked = false; mapUnity.blocked = false;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null; mapUnity.enemyNode = null;
Destroy(this.gameObject); Destroy(this.gameObject);
yield break; yield break;
} }

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:

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

@ -13,7 +13,8 @@ public class ItemTakerOverNode : MonoBehaviour
public enum BlockType public enum BlockType
{ {
common, common,
whirlpool whirlpool,
vacancy
} }
public BlockType blockType; public BlockType blockType;
@ -58,6 +59,16 @@ public class ItemTakerOverNode : MonoBehaviour
whirlpoolS.posX = currentMapUnity.locationX; whirlpoolS.posX = currentMapUnity.locationX;
whirlpoolS.posY = currentMapUnity.locationY; whirlpoolS.posY = currentMapUnity.locationY;
break; 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;
} }
} }

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

@ -25,7 +25,7 @@ public class Whirlpool : MonoBehaviour
} }
holdPool.Add(currentNode); holdPool.Add(currentNode);
holdeText .text =holdColorCount .ToString(); holdeText .text =holdColorCount .ToString();
GameManager.Instance.playerUsedCard += WhirlpoolHold; GameManager.Instance.whirlpoolEffectSycn += WhirlpoolHold;
} }
public void WhirlpoolHold() public void WhirlpoolHold()
{ {

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

@ -76,28 +76,28 @@ public class EnemyAction
//通用普攻 //通用普攻
public virtual void GeneralAttackRange(EnemyNode enemyNode) 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) 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) public virtual void ShootAttackRange(EnemyNode enemyNode)
{ {
Debug.Log("shoot"); 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) public virtual void AoeAttackRange(EnemyNode enemyNode)
{ {
Debug.Log("aoe"); Debug.Log("aoe");
//几-几 //几-几
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);
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.aoeRange, enemyNode.aoeRangePool);
ShowAttackRangeAoe(enemyNode); ShowAttackRangeAoe(enemyNode);
} }
//魔法 //魔法

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

@ -312,6 +312,7 @@ public class GameManager : Singleton<GameManager>
White.fillAmount = Metal.fillAmount + whiteNodeCountLatest / totoalNode; White.fillAmount = Metal.fillAmount + whiteNodeCountLatest / totoalNode;
// Black.fillAmount = Bule.fillAmount + blackNodeCountLatest / totoalNode; // Black.fillAmount = Bule.fillAmount + blackNodeCountLatest / totoalNode;
//Ô¤ÀÀͿɫ //Ô¤ÀÀͿɫ
if (onDrag && currentCardEntity != null ) if (onDrag && currentCardEntity != null )
{ {
if(currentCardEntity.cardOriginalData.CastingRange != 0) if(currentCardEntity.cardOriginalData.CastingRange != 0)
@ -329,7 +330,7 @@ public class GameManager : Singleton<GameManager>
{ {
currentMapNode = playerOn; 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++) for (int i = 0; i < ints.Count; i++)
{ {
switch (i) switch (i)
@ -653,15 +654,17 @@ public class GameManager : Singleton<GameManager>
whiteMapUnities.RemoveAt(index); whiteMapUnities.RemoveAt(index);
yield return null; yield return null;
} }
BroadCastWhirlpoolEffectSycn();
} }
//玩家释放完一张卡牌 //触发漩涡同步颜色
public event Action playerUsedCard; public event Action whirlpoolEffectSycn;
public void BroadCastPlayerUsedCard() public void BroadCastWhirlpoolEffectSycn()
{ {
if (playerUsedCard != null) if (whirlpoolEffectSycn != null)
playerUsedCard(); whirlpoolEffectSycn();
} }
} }

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

@ -28,10 +28,10 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
public int treasureFloor; public int treasureFloor;
//锻造 //锻造
public int forgingFloor; public int forgingFloor;
//随机战 //单节点战斗
public List<int> randomFightFloor; public List<int> singleFightFloor;
//普通战 //三节点战斗
public List<int> normalFightFloor; public List<int> multipleFightFloor;
//随机奖励节点 //随机奖励节点
public List<int> rewardNodeFloor; public List<int> rewardNodeFloor;
public List <RoomType> randomRoomTypeWeightBase; public List <RoomType> randomRoomTypeWeightBase;
@ -391,6 +391,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
room.SetUpRoom(RoomType.campfire); 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) else if (i == generatorLine - 1)
{ {
//最后一层boss房 //最后一层boss房
@ -402,7 +410,7 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
} }
//阶段a的随机奖励生成 //阶段的随机奖励生成
List<List<LevelNode>> levelNodes = new List<List<LevelNode>>(); List<List<LevelNode>> levelNodes = new List<List<LevelNode>>();
List <LevelNode > aNode_1 = new List <LevelNode>(); List <LevelNode > aNode_1 = new List <LevelNode>();
List<LevelNode> aNode_2 = new List<LevelNode>(); List<LevelNode> aNode_2 = new List<LevelNode>();
@ -428,25 +436,40 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
levelNodes[shopB_l][shopB_C].SetUpRoom(RoomType.shop); levelNodes[shopB_l][shopB_C].SetUpRoom(RoomType.shop);
levelNodes[shopA_l][shopA_C] = null; levelNodes[shopA_l][shopA_C] = null;
levelNodes[shopB_l][shopB_C] = null; levelNodes[shopB_l][shopB_C] = null;
for (int i = 0; i <randomRoomTypeWeightBase.Count ; i++) 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++)
{ {
RoomType roomType = randomRoomTypeWeightBase[ Random.Range(0, randomRoomTypeWeightBase.Count)];
bool isGo = true; bool isGo = true;
LevelNode currentNode = levelNodes[i][j];
while (isGo) while (isGo)
{ {
int line = Random.Range(0, levelNodes.Count);
int cloum = Random.Range(0, levelNodes[line].Count); RoomType roomType;
LevelNode currentNode = levelNodes[line][cloum]; if (randomRoomTypeWeightBase.Count>0)
{ roomType = randomRoomTypeWeightBase[Random.Range(0, randomRoomTypeWeightBase.Count)]; }
else
{
roomType = randomRoomTypeWeightAttach[Random.Range(0, randomRoomTypeWeightAttach.Count)];
}
if (currentNode != null) if (currentNode != null)
{ {
switch (line) switch (i)
{ {
case 0: case 0:
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType) if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{ {
currentNode.SetUpRoom(roomType); currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null; if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType); randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false; isGo = false;
} }
break; break;
@ -454,8 +477,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType) if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{ {
currentNode.SetUpRoom(roomType); currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null; if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType); randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false; isGo = false;
} }
break; break;
@ -463,8 +492,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType) if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{ {
currentNode.SetUpRoom(roomType); currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null; if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType); randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false; isGo = false;
} }
break; break;
@ -472,70 +507,54 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType) if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{ {
currentNode.SetUpRoom(roomType); currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null; if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType); randomRoomTypeWeightBase.Remove(roomType);
isGo = false;
} }
break; else
}
}
}
}
for (int i = 0; i < 4; i++)
{
RoomType roomType = randomRoomTypeWeightAttach[Random.Range(0, randomRoomTypeWeightAttach.Count)];
bool isGo = true;
while (isGo)
{
int line = Random.Range(0, levelNodes.Count);
int cloum = Random.Range(0, levelNodes[line].Count);
LevelNode currentNode = levelNodes[line][cloum];
if (currentNode != null)
{
switch (line)
{
case 0:
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{ {
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
randomRoomTypeWeightAttach.Remove(roomType); randomRoomTypeWeightAttach.Remove(roomType);
isGo = false;
} }
break;
case 1:
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
randomRoomTypeWeightAttach.Remove(roomType);
isGo = false; isGo = false;
} }
break; break;
case 2: }
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType) }
else
{ {
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
randomRoomTypeWeightAttach.Remove(roomType);
isGo = false; isGo = false;
} }
break; }
case 3: }
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType) }
//生成随机怪物
for(int i=0;i<multipleFightFloor .Count;i++ )
{ {
currentNode.SetUpRoom(roomType); for (int j = 0; j < 3; j++)
levelNodes[line][cloum] = null; {
randomRoomTypeWeightAttach.Remove(roomType); levelMap[multipleFightFloor[i]].levelColumn[j].SetUpRoom(RoomType.monster);
isGo = false;
} }
break;
} }
int randomLine = Random.Range(0, multipleFightFloor.Count);
while (multipleFightFloor [ randomLine] <4)
{
randomLine = Random.Range(0, multipleFightFloor.Count);//保证精英不会刷在四层以下
} }
int randomColumn = Random.Range(0, 3);
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);
} }
//判断下一个房间的所有子集是否有重复 //判断下一个房间的所有子集是否有重复

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

@ -21,6 +21,7 @@ public class LevelDevelopManager : Singleton<LevelDevelopManager>
[Header ("·¿¼äͼ±ê")] [Header ("·¿¼äͼ±ê")]
public Sprite monsterIcon; public Sprite monsterIcon;
public Sprite eliteMonsterIcon; public Sprite eliteMonsterIcon;
public Sprite eliteAndMonsterIcon;
public Sprite bossIcon; public Sprite bossIcon;
public Sprite shopIcon; public Sprite shopIcon;
public Sprite campfireIcon; public Sprite campfireIcon;
@ -36,6 +37,7 @@ public class LevelDevelopManager : Singleton<LevelDevelopManager>
{ {
monster, monster,
eliteMonster, eliteMonster,
eliteAndMonster,
boss, boss,
shop, shop,
campfire, campfire,

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

@ -189,6 +189,9 @@ public class LevelNode : MonoBehaviour
isUse = levelData.isUse; isUse = levelData.isUse;
isPassBy = levelData.passBy; isPassBy = levelData.passBy;
roomType = levelData.roomType; roomType = levelData.roomType;
fightEenemyPool = levelData.fightEenemyPool;
enemyList = levelData.enemyList;
mapIndex = levelData.mapIndex;
SetUpRoom(roomType); SetUpRoom(roomType);
// LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(this); // LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(this);
} }
@ -219,6 +222,10 @@ public class LevelNode : MonoBehaviour
roomText.text = "¾«Ó¢¹Ö"; roomText.text = "¾«Ó¢¹Ö";
roomIcon.sprite = LevelDevelopManager.Instance.eliteMonsterIcon; roomIcon.sprite = LevelDevelopManager.Instance.eliteMonsterIcon;
break; break;
case LevelDevelopManager.RoomType.eliteAndMonster:
roomText.text = "Ñ¡ÔñÕ½¶·";
roomIcon.sprite = LevelDevelopManager.Instance.eliteAndMonsterIcon;
break;
case LevelDevelopManager.RoomType.boss: case LevelDevelopManager.RoomType.boss:
roomText.text = "Boss"; roomText.text = "Boss";
roomIcon.sprite = LevelDevelopManager.Instance.bossIcon; roomIcon.sprite = LevelDevelopManager.Instance.bossIcon;

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

@ -612,19 +612,76 @@ public class MapManager : Singleton<MapManager>
//Éú³É³õʼÎïÆ· //Éú³É³õʼÎïÆ·
IEnumerator GenerateItem() 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_SO = PlayerStatsManager.Instance.levelDevelopData;
LevelDevelopData_SO.levelData currentLevelData = levelData_SO.levelSaveMap[(int)levelData_SO.currentPoint.x].levelDataList[(int)levelData_SO.currentPoint.y]; 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)]; List<string> itemList = PlayerStatsManager.Instance.itemInforDic[int.Parse(currentLevelData.mapIndex)];
HashSet<MapUnity> allNode = getNodeTools.getAllCanUseNode(); HashSet<MapUnity> allNode = getNodeTools.getAllCanUseNode();
//获取物品上限
List<string> itemLimitList = PlayerStatsManager.Instance.itemLimitDic[int.Parse(currentLevelData.mapIndex)];
string limitInfor=null ;
switch (currentLevelData.fightEenemyPool)
{
case Name.EnemyPool.Weak:
limitInfor =itemLimitList[0];
break;
case Name.EnemyPool.Strong:
limitInfor = itemLimitList[1];
break;
case Name.EnemyPool.Elite:
limitInfor = itemLimitList[2];
break;
case Name.EnemyPool.Boss:
limitInfor = itemLimitList[3];
break;
}
string[] limitValue = limitInfor.Split(';');
int lowerLimit = int.Parse(limitValue[(levelData_SO.mapLevel - 1) * 2]);
int maxLimit = int.Parse(limitValue[(levelData_SO.mapLevel - 1) * 2 + 1]);
//切分物品数据
List <string[]> itemInforStringList = new List <string[]>();
for (int i = 0; i < itemList.Count; i++) for (int i = 0; i < itemList.Count; i++)
{ {
string[] values = itemList[i].Split(';'); string[] values = itemList[i].Split(';');
GameObject item = Resources.Load<GameObject>(itemPrefabPath + values[0]); itemInforStringList.Add(values);
int itemCount = Random.Range(int.Parse(values[1]), int.Parse(values[2])); }
//随机物品数量并限制上限
int count = 0;
List <int> itemCountList = new List <int>();
while (count <100)
{
count++;
int totalCount = 0;
itemCountList.Clear();
for (int i = 0; i < itemInforStringList.Count; i++)
{
int itemCount = Random.Range(int.Parse(itemInforStringList[i][1]), int.Parse(itemInforStringList[i][2]));
Debug.Log("随机" + itemInforStringList[i][0] + itemCount);
if(itemInforStringList[i][0] != "Vacancy")
{
totalCount += itemCount;
}
itemCountList.Add(itemCount);
}
if(totalCount >=lowerLimit &&totalCount <=maxLimit )
{
Debug.Log("成功");
break;
}
}
//根据随机出的数量表生成物品
for (int i=0;i< itemInforStringList.Count;i++)
{
GameObject item = Resources.Load<GameObject>(itemPrefabPath + itemInforStringList[i][0]);
int itemCount = itemCountList[i];
for(int j=0;j<itemCount;j++) for(int j=0;j<itemCount;j++)
{ {
int c = 0; int c = 0;
while (c<=50) while (c<=20)
{ {
c++; c++;
MapUnity currentNode = allNode.ElementAt(Random.Range(0, allNode.Count)); MapUnity currentNode = allNode.ElementAt(Random.Range(0, allNode.Count));

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

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

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

@ -32,6 +32,9 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
[Header("房间物品字典")] [Header("房间物品字典")]
public string itemCsvFilePath; public string itemCsvFilePath;
public Dictionary<int, List<string>> itemInforDic = new Dictionary<int, List<string>>(); 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() private void Start()
{ {
@ -39,6 +42,7 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
DontDestroyOnLoad(this.gameObject); DontDestroyOnLoad(this.gameObject);
ReadItemInforCsv(itemCsvFilePath); ReadItemInforCsv(itemCsvFilePath);
ReadItemLimitCsv(itemLimitCsvFilePath);
} }
//选项效果==加一个同步UI的订阅系统 //选项效果==加一个同步UI的订阅系统
@ -173,4 +177,28 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
} }
} }
} }
//读取房间生成物品上限
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))
{
bool isFirstLine = true;
while (!reader.EndOfStream)
{
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);
}
}
}
} }

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

@ -2,6 +2,7 @@ using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Unity.VisualScripting; using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
using UnityEngine; using UnityEngine;
@ -9,8 +10,8 @@ public class SettlementManager : Singleton<SettlementManager>
{ {
public static int settleTurn; public static int settleTurn;
//地块预览计数时,预览方法返回的,所有被影响的地块
public HashSet <MapUnity > mapUnityColorPreviewCountPool = new HashSet<MapUnity>();
public void abnormalConditionWork(string condition, int stackVak, List<MapUnity> influencePreviewPool) public void abnormalConditionWork(string condition, int stackVak, List<MapUnity> influencePreviewPool)
{ {
for (int i = 0; i < influencePreviewPool.Count; i++) for (int i = 0; i < influencePreviewPool.Count; i++)
@ -82,9 +83,10 @@ public class SettlementManager : Singleton<SettlementManager>
} }
} }
//预计地块计数 //预计地块计数
public List <int> PreviewColorMapUnity(CardOriginalData cardOriginalData, MapUnity targetNode) public void PreviewColorMapUnity(CardOriginalData cardOriginalData, MapUnity targetNode)
{ {
List<int> mapColorCount = new List<int>() { 0, 0, 0, 0, 0, 0, 0 };//1red,2white,3blue,4green,5black,6matel List<EnemyNode> blockNodes = new List<EnemyNode>();//顺序结算被打爆地块的效果
mapUnityColorPreviewCountPool.Clear();
Vector3 face = targetNode.transform.position - GameManager.Instance.playerOn.transform.position; 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; float euler = Vector3.SignedAngle(-GameManager.Instance.playerOn.transform.forward, face, GameManager.Instance.playerOn.transform.up) + 180;
@ -123,14 +125,64 @@ public class SettlementManager : Singleton<SettlementManager>
// endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i])); // endNode.switchColor(Name.stringColorToint(cardOriginalData.nodesColor[i]));
if (endNode.whoColour != Name.stringColorToint(cardOriginalData.nodesColor[i]) && endNode.whoColour != 6) 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.colorUnderAttack = Name.stringColorToint(cardOriginalData.nodesColor[i]);
}
endNode.switchPreColor(Name.stringColorToint(cardOriginalData.nodesColor[i]));//切换预览材质
if (endNode .enemyNode != null )
{
blockNodes.Add(endNode.enemyNode);
} }
} }
} }
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; 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) public void PreviewSwitchColor(CardOriginalData cardOriginalData, MapUnity targetNode)
{ {
@ -685,7 +737,7 @@ public class SettlementManager : Singleton<SettlementManager>
GameManager.Instance.SyncColourCountUI(); GameManager.Instance.SyncColourCountUI();
EnemyManager.Instance.enemyRefreshEnemyBuffIcon(0); EnemyManager.Instance.enemyRefreshEnemyBuffIcon(0);
//广播释放完一张卡牌的接口 //广播释放完一张卡牌的接口
GameManager.Instance.BroadCastPlayerUsedCard(); GameManager.Instance.BroadCastWhirlpoolEffectSycn();
} }
//预期伤害 //预期伤害

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

@ -1,5 +1,5 @@
地图编号,物品数据,, 地图编号,物品数据,,,
100001,tree;2;4,boom;2;4,Whirlpool;2;4 100001,tree;0;2,boom;0;2,Whirlpool;0;2,Vacancy;0;5
100002,tree;2;5,boom;2;5,Whirlpool;2;4 100002,tree;0;2,boom;1;2,Whirlpool;0;2,Vacancy;0;4
100003,tree;2;6,boom;2;6,Whirlpool;2;4 100003,tree;0;2,boom;0;2,Whirlpool;0;2,Vacancy;1;5
100004,tree;2;7,boom;2;7,Whirlpool;2;4 100004,tree;0;2,boom;0;2,Whirlpool;0;2,Vacancy;2;8

Can't render this file because it has a wrong number of fields in line 2.

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

@ -0,0 +1,5 @@
地图编号,弱怪,强怪,精英,boss
100001,0;1;0;1;1;2,0;2;1;2;2;3,1;2;2;2;3;3,1;2;2;3;3;4
100002,0;2;0;1;1;1,0;1;1;2;2;3,1;2;2;2;3;3,1;2;2;3;3;4
100003,0;1;0;1;1;1,0;1;1;2;2;3,1;2;2;2;3;3,1;2;2;3;3;4
100004,0;1;0;1;1;1,0;1;1;2;2;3,1;2;2;2;3;3,1;2;2;3;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:

0
ColorlessWorld-2024-4-2/Temp/FSTimeGet-da61fd9dc8019424dae9d7d7348fdaa8

BIN
ColorlessWorld-2024-4-2/Temp/FSTimeGet-e0bcc83011a3a2d45880755fdd98fcce

Binary file not shown.

0
ColorlessWorld-2024-4-2/Temp/UnityLockfile

BIN
ColorlessWorld-2024-4-2/Temp/__Backupscenes/0.backup

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Temp/workerlic

Binary file not shown.
Loading…
Cancel
Save