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}
locationX: 0
locationY: 0
cubeQ: 0
cubeS: 0
cubeR: 0
compalte: 0
influenced: 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: []
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: 02691098c39ccd6458dd3771b3004071, type: 3}
deleteCardIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3}
addCardIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3}
resourceIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, type: 3}
potionIcon: {fileID: 21300000, guid: 02691098c39ccd6458dd3771b3004071, 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:
@ -16105,11 +16107,11 @@ MonoBehaviour:
pathAmount: 3
treasureFloor: 5
forgingFloor: 11
randomFightFloor:
normalFightFloor:
singleFightFloor: 01000000060000000a000000
multipleFightFloor: 0300000008000000
rewardNodeFloor: 0200000007000000
randomRoomTypeWeightBase: 050000000700000008000000090000000a0000000b000000
randomRoomTypeWeightAttach: 05000000050000000700000008000000090000000a0000000b000000
randomRoomTypeWeightBase: 0c00000008000000090000000a0000000b00000006000000
randomRoomTypeWeightAttach: 06000000060000000c00000008000000090000000a0000000b000000
levelPrefab: {fileID: 980190143975240430, guid: c8c223db4c0d17645bca03489a39b721,
type: 3}
levelBossPrefab: {fileID: 980190143975240430, guid: e252a7011ae30f84da117f7e07d56996,

7
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
@ -10568,7 +10566,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!114 &490441551
@ -10622,7 +10619,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!4 &490441552
@ -39331,6 +39327,7 @@ MonoBehaviour:
isPass: 0
isTreasure: 0
itemCsvFilePath: LevelMapToItem.csv
itemLimitCsvFilePath: MapItemCount.csv
--- !u!4 &1690695890
Transform:
m_ObjectHideFlags: 0
@ -49042,7 +49039,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !u!4 &1624752141151469405
@ -49878,7 +49874,6 @@ MonoBehaviour:
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
colorUnderAttack: 0
canMove: 0
planAction: 0
--- !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);
//更新涂色预览材质
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);
//更新效果作用范围内怪物虚血
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)

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

@ -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))

41
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
{
@ -195,7 +194,7 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
blockUIBar.SyncHp(EnemyState.currentNumberOfHits);
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>();
@ -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;
}
@ -835,7 +850,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);

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.enemyNode = enemyNode;
}
public override void OnDeath()
{
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()
{
//¼ÆËã½Ç¶È
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY];
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>();
@ -74,7 +122,7 @@ public class Boom : BlockNode
// 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);
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()
{
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 )
{
node.switchColor(colorUnderAttack);
node.switchColor(mapUnity . colorUnderAttack);
}
}
GameManager.Instance.X[positionX].Y[positionY].blocked = false;
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null;
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;
}
}

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

@ -18,10 +18,11 @@ public class Tree : BlockNode
IEnumerator DrawCardAndDestory()
{
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY);
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;
mapUnity.blocked = false;
mapUnity.enemyNode = null;
Destroy(this.gameObject);
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
{
common,
whirlpool
whirlpool,
vacancy
}
public BlockType blockType;
@ -58,6 +59,16 @@ public class ItemTakerOverNode : MonoBehaviour
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;
}
}

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

@ -25,7 +25,7 @@ public class Whirlpool : MonoBehaviour
}
holdPool.Add(currentNode);
holdeText .text =holdColorCount .ToString();
GameManager.Instance.playerUsedCard += WhirlpoolHold;
GameManager.Instance.whirlpoolEffectSycn += 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)
{
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);
}
//魔法

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

@ -312,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)
@ -329,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)
@ -653,15 +654,17 @@ public class GameManager : Singleton<GameManager>
whiteMapUnities.RemoveAt(index);
yield return null;
}
BroadCastWhirlpoolEffectSycn();
}
//玩家释放完一张卡牌
public event Action playerUsedCard;
public void BroadCastPlayerUsedCard()
//触发漩涡同步颜色
public event Action whirlpoolEffectSycn;
public void BroadCastWhirlpoolEffectSycn()
{
if (playerUsedCard != null)
playerUsedCard();
if (whirlpoolEffectSycn != null)
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 forgingFloor;
//随机战
public List<int> randomFightFloor;
//普通战
public List<int> normalFightFloor;
//单节点战斗
public List<int> singleFightFloor;
//三节点战斗
public List<int> multipleFightFloor;
//随机奖励节点
public List<int> rewardNodeFloor;
public List <RoomType> randomRoomTypeWeightBase;
@ -391,6 +391,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
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房
@ -402,7 +410,7 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
}
//阶段a的随机奖励生成
//阶段的随机奖励生成
List<List<LevelNode>> levelNodes = new List<List<LevelNode>>();
List <LevelNode > aNode_1 = 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[shopA_l][shopA_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;
LevelNode currentNode = levelNodes[i][j];
while (isGo)
{
int line = Random.Range(0, levelNodes.Count);
int cloum = Random.Range(0, levelNodes[line].Count);
LevelNode currentNode = levelNodes[line][cloum];
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 (line)
switch (i)
{
case 0:
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
@ -454,8 +477,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
@ -463,8 +492,14 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
}
else
{
randomRoomTypeWeightAttach.Remove(roomType);
}
isGo = false;
}
break;
@ -472,70 +507,54 @@ public class LeveGeneraterNew : Singleton<LeveGeneraterNew>
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
if (randomRoomTypeWeightBase.Count > 0)
{
randomRoomTypeWeightBase.Remove(roomType);
isGo = false;
}
break;
}
}
}
}
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)
else
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
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;
}
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;
}
break;
case 3:
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType)
}
}
}
//生成随机怪物
for(int i=0;i<multipleFightFloor .Count;i++ )
{
currentNode.SetUpRoom(roomType);
levelNodes[line][cloum] = null;
randomRoomTypeWeightAttach.Remove(roomType);
isGo = false;
for (int j = 0; j < 3; j++)
{
levelMap[multipleFightFloor[i]].levelColumn[j].SetUpRoom(RoomType.monster);
}
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 ("·¿¼äͼ±ê")]
public Sprite monsterIcon;
public Sprite eliteMonsterIcon;
public Sprite eliteAndMonsterIcon;
public Sprite bossIcon;
public Sprite shopIcon;
public Sprite campfireIcon;
@ -36,6 +37,7 @@ public class LevelDevelopManager : Singleton<LevelDevelopManager>
{
monster,
eliteMonster,
eliteAndMonster,
boss,
shop,
campfire,

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

@ -189,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);
}
@ -219,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;

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

@ -612,19 +612,76 @@ 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> 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++)
{
string[] values = itemList[i].Split(';');
GameObject item = Resources.Load<GameObject>(itemPrefabPath + values[0]);
int itemCount = Random.Range(int.Parse(values[1]), int.Parse(values[2]));
itemInforStringList.Add(values);
}
//随机物品数量并限制上限
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++)
{
int c = 0;
while (c<=50)
while (c<=20)
{
c++;
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;
[Header("ÁÙ½Ó³ØÉäÏ߯ðʼµã")]
public Transform touchRayStartPoint;
[Header("敌人受到哪种颜色攻击")]
public int colorUnderAttack;
public void StartRegiste()
{
if (compalte == false)
@ -202,38 +206,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;
}
}

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

@ -32,6 +32,9 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
[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()
{
@ -39,6 +42,7 @@ public class PlayerStatsManager : Singleton <PlayerStatsManager>
DontDestroyOnLoad(this.gameObject);
ReadItemInforCsv(itemCsvFilePath);
ReadItemLimitCsv(itemLimitCsvFilePath);
}
//选项效果==加一个同步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.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,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;
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]));
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;
}
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)
{
@ -685,7 +737,7 @@ public class SettlementManager : Singleton<SettlementManager>
GameManager.Instance.SyncColourCountUI();
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
100002,tree;2;5,boom;2;5,Whirlpool;2;4
100003,tree;2;6,boom;2;6,Whirlpool;2;4
100004,tree;2;7,boom;2;7,Whirlpool;2;4
地图编号,物品数据,,,
100001,tree;0;2,boom;0;2,Whirlpool;0;2,Vacancy;0;5
100002,tree;0;2,boom;1;2,Whirlpool;0;2,Vacancy;0;4
100003,tree;0;2,boom;0;2,Whirlpool;0;2,Vacancy;1;5
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