76 changed files with 5230 additions and 7554 deletions
@ -1,5 +1,5 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 8530888d5a27b2741a53af50312ea8fe |
|||
guid: d568482e910ee3943abf3fad34ef25ae |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
@ -0,0 +1,7 @@ |
|||
fileFormatVersion: 2 |
|||
guid: eb59db3658eedc84dab235921d1ab4f6 |
|||
PrefabImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,377 @@ |
|||
%YAML 1.1 |
|||
%TAG !u! tag:unity3d.com,2011: |
|||
--- !u!1 &791787655015542540 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 3507841565684247920} |
|||
- component: {fileID: 9192163590229144868} |
|||
- component: {fileID: 780701334481676733} |
|||
- component: {fileID: 4869295605941821901} |
|||
m_Layer: 0 |
|||
m_Name: Canvas |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!224 &3507841565684247920 |
|||
RectTransform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 791787655015542540} |
|||
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} |
|||
m_ConstrainProportionsScale: 1 |
|||
m_Children: |
|||
- {fileID: 5757482445103523294} |
|||
m_Father: {fileID: 6047049870113643063} |
|||
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} |
|||
m_AnchorMin: {x: 0, y: 0} |
|||
m_AnchorMax: {x: 0, y: 0} |
|||
m_AnchoredPosition: {x: 0, y: 0.33} |
|||
m_SizeDelta: {x: 1, y: 1} |
|||
m_Pivot: {x: 0.5, y: 0.5} |
|||
--- !u!223 &9192163590229144868 |
|||
Canvas: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 791787655015542540} |
|||
m_Enabled: 1 |
|||
serializedVersion: 3 |
|||
m_RenderMode: 2 |
|||
m_Camera: {fileID: 0} |
|||
m_PlaneDistance: 100 |
|||
m_PixelPerfect: 0 |
|||
m_ReceivesEvents: 1 |
|||
m_OverrideSorting: 0 |
|||
m_OverridePixelPerfect: 0 |
|||
m_SortingBucketNormalizedSize: 0 |
|||
m_VertexColorAlwaysGammaSpace: 0 |
|||
m_AdditionalShaderChannelsFlag: 0 |
|||
m_UpdateRectTransformForStandalone: 0 |
|||
m_SortingLayerID: 801241541 |
|||
m_SortingOrder: 0 |
|||
m_TargetDisplay: 0 |
|||
--- !u!114 &780701334481676733 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 791787655015542540} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_UiScaleMode: 0 |
|||
m_ReferencePixelsPerUnit: 100 |
|||
m_ScaleFactor: 1 |
|||
m_ReferenceResolution: {x: 800, y: 600} |
|||
m_ScreenMatchMode: 0 |
|||
m_MatchWidthOrHeight: 0 |
|||
m_PhysicalUnit: 3 |
|||
m_FallbackScreenDPI: 96 |
|||
m_DefaultSpriteDPI: 96 |
|||
m_DynamicPixelsPerUnit: 1 |
|||
m_PresetInfoIsWorld: 1 |
|||
--- !u!114 &4869295605941821901 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 791787655015542540} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_IgnoreReversedGraphics: 1 |
|||
m_BlockingObjects: 0 |
|||
m_BlockingMask: |
|||
serializedVersion: 2 |
|||
m_Bits: 4294967295 |
|||
--- !u!1 &2458175114420723768 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 6047049870113643063} |
|||
- component: {fileID: 4354208083307919355} |
|||
- component: {fileID: 3998761273940534422} |
|||
- component: {fileID: 8508715456860937413} |
|||
m_Layer: 0 |
|||
m_Name: Whirlpool |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!4 &6047049870113643063 |
|||
Transform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2458175114420723768} |
|||
serializedVersion: 2 |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 3.592, y: 1, z: -1.2736247} |
|||
m_LocalScale: {x: 0.9, y: 0.9, z: 0.9} |
|||
m_ConstrainProportionsScale: 1 |
|||
m_Children: |
|||
- {fileID: 3507841565684247920} |
|||
m_Father: {fileID: 0} |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
--- !u!212 &4354208083307919355 |
|||
SpriteRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2458175114420723768} |
|||
m_Enabled: 1 |
|||
m_CastShadows: 0 |
|||
m_ReceiveShadows: 0 |
|||
m_DynamicOccludee: 1 |
|||
m_StaticShadowCaster: 0 |
|||
m_MotionVectors: 1 |
|||
m_LightProbeUsage: 1 |
|||
m_ReflectionProbeUsage: 1 |
|||
m_RayTracingMode: 0 |
|||
m_RayTraceProcedural: 0 |
|||
m_RenderingLayerMask: 1 |
|||
m_RendererPriority: 0 |
|||
m_Materials: |
|||
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_StaticBatchInfo: |
|||
firstSubMesh: 0 |
|||
subMeshCount: 0 |
|||
m_StaticBatchRoot: {fileID: 0} |
|||
m_ProbeAnchor: {fileID: 0} |
|||
m_LightProbeVolumeOverride: {fileID: 0} |
|||
m_ScaleInLightmap: 1 |
|||
m_ReceiveGI: 1 |
|||
m_PreserveUVs: 0 |
|||
m_IgnoreNormalsForChartDetection: 0 |
|||
m_ImportantGI: 0 |
|||
m_StitchLightmapSeams: 1 |
|||
m_SelectedEditorRenderState: 0 |
|||
m_MinimumChartSize: 4 |
|||
m_AutoUVMaxDistance: 0.5 |
|||
m_AutoUVMaxAngle: 89 |
|||
m_LightmapParameters: {fileID: 0} |
|||
m_SortingLayerID: 0 |
|||
m_SortingLayer: 0 |
|||
m_SortingOrder: 2 |
|||
m_Sprite: {fileID: 21300000, guid: f9ca4d2a420a8f14b8ff292551fc0001, type: 3} |
|||
m_Color: {r: 1, g: 1, b: 1, a: 0} |
|||
m_FlipX: 0 |
|||
m_FlipY: 0 |
|||
m_DrawMode: 0 |
|||
m_Size: {x: 1.923, y: 1.879} |
|||
m_AdaptiveModeThreshold: 0.5 |
|||
m_SpriteTileMode: 0 |
|||
m_WasSpriteAssigned: 1 |
|||
m_MaskInteraction: 0 |
|||
m_SpriteSortPoint: 0 |
|||
--- !u!114 &3998761273940534422 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2458175114420723768} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 8e1d4d1a606d36b43ae3dd2b9a98896f, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
posX: 0 |
|||
posY: 0 |
|||
holdColorCount: 7 |
|||
holdeText: {fileID: 1137274421971972761} |
|||
holdPool: [] |
|||
--- !u!114 &8508715456860937413 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2458175114420723768} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: d99a212ab38d69947b365e3770680781, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
takeOverType: 0 |
|||
blockType: 1 |
|||
--- !u!1 &2956698644888883949 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 666127146751557209} |
|||
- component: {fileID: 4527207791058968114} |
|||
- component: {fileID: 1137274421971972761} |
|||
m_Layer: 0 |
|||
m_Name: Text (Legacy) |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!224 &666127146751557209 |
|||
RectTransform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2956698644888883949} |
|||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_ConstrainProportionsScale: 0 |
|||
m_Children: [] |
|||
m_Father: {fileID: 5757482445103523294} |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
m_AnchorMin: {x: 0, y: 0} |
|||
m_AnchorMax: {x: 1, y: 1} |
|||
m_AnchoredPosition: {x: 0, y: 0} |
|||
m_SizeDelta: {x: 0, y: 0} |
|||
m_Pivot: {x: 0.5, y: 0.5} |
|||
--- !u!222 &4527207791058968114 |
|||
CanvasRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2956698644888883949} |
|||
m_CullTransparentMesh: 1 |
|||
--- !u!114 &1137274421971972761 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 2956698644888883949} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_Material: {fileID: 0} |
|||
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} |
|||
m_RaycastTarget: 1 |
|||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
|||
m_Maskable: 1 |
|||
m_OnCullStateChanged: |
|||
m_PersistentCalls: |
|||
m_Calls: [] |
|||
m_FontData: |
|||
m_Font: {fileID: 12800000, guid: 846d2bc064c8faa4a858510d85bd7140, type: 3} |
|||
m_FontSize: 45 |
|||
m_FontStyle: 0 |
|||
m_BestFit: 0 |
|||
m_MinSize: 3 |
|||
m_MaxSize: 45 |
|||
m_Alignment: 4 |
|||
m_AlignByGeometry: 0 |
|||
m_RichText: 1 |
|||
m_HorizontalOverflow: 0 |
|||
m_VerticalOverflow: 0 |
|||
m_LineSpacing: 1 |
|||
m_Text: 7 |
|||
--- !u!1 &8745365788768358793 |
|||
GameObject: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
serializedVersion: 6 |
|||
m_Component: |
|||
- component: {fileID: 5757482445103523294} |
|||
- component: {fileID: 1406558591327533686} |
|||
- component: {fileID: 6754258001192525857} |
|||
m_Layer: 0 |
|||
m_Name: Panel |
|||
m_TagString: Untagged |
|||
m_Icon: {fileID: 0} |
|||
m_NavMeshLayer: 0 |
|||
m_StaticEditorFlags: 0 |
|||
m_IsActive: 1 |
|||
--- !u!224 &5757482445103523294 |
|||
RectTransform: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 8745365788768358793} |
|||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} |
|||
m_LocalPosition: {x: 0, y: 0, z: 0} |
|||
m_LocalScale: {x: 1, y: 1, z: 1} |
|||
m_ConstrainProportionsScale: 0 |
|||
m_Children: |
|||
- {fileID: 666127146751557209} |
|||
m_Father: {fileID: 3507841565684247920} |
|||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |
|||
m_AnchorMin: {x: 0, y: 0} |
|||
m_AnchorMax: {x: 1, y: 1} |
|||
m_AnchoredPosition: {x: 0, y: 0} |
|||
m_SizeDelta: {x: 99, y: 99} |
|||
m_Pivot: {x: 0.5, y: 0.5} |
|||
--- !u!222 &1406558591327533686 |
|||
CanvasRenderer: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 8745365788768358793} |
|||
m_CullTransparentMesh: 1 |
|||
--- !u!114 &6754258001192525857 |
|||
MonoBehaviour: |
|||
m_ObjectHideFlags: 0 |
|||
m_CorrespondingSourceObject: {fileID: 0} |
|||
m_PrefabInstance: {fileID: 0} |
|||
m_PrefabAsset: {fileID: 0} |
|||
m_GameObject: {fileID: 8745365788768358793} |
|||
m_Enabled: 1 |
|||
m_EditorHideFlags: 0 |
|||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} |
|||
m_Name: |
|||
m_EditorClassIdentifier: |
|||
m_Material: {fileID: 0} |
|||
m_Color: {r: 1, g: 1, b: 1, a: 0.392} |
|||
m_RaycastTarget: 1 |
|||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} |
|||
m_Maskable: 1 |
|||
m_OnCullStateChanged: |
|||
m_PersistentCalls: |
|||
m_Calls: [] |
|||
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} |
|||
m_Type: 1 |
|||
m_PreserveAspect: 0 |
|||
m_FillCenter: 1 |
|||
m_FillMethod: 4 |
|||
m_FillAmount: 1 |
|||
m_FillClockwise: 1 |
|||
m_FillOrigin: 0 |
|||
m_UseSpriteMesh: 0 |
|||
m_PixelsPerUnitMultiplier: 1 |
|||
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -1,80 +0,0 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Unity.VisualScripting; |
|||
using UnityEditor.Experimental.GraphView; |
|||
using UnityEngine; |
|||
using UnityEngine.InputSystem; |
|||
using UnityEngine.UIElements; |
|||
|
|||
public class BoomNode : BlockNode |
|||
{ |
|||
public int damage = 4; |
|||
public GameObject damageParticle; |
|||
public Transform particlePoint; |
|||
public override void OnDeath() |
|||
{ |
|||
StartCoroutine(DrawCardAndDestory()); |
|||
} |
|||
|
|||
IEnumerator DrawCardAndDestory() |
|||
{ |
|||
//¼ÆËã½Ç¶È
|
|||
MapUnity currentNode = GameManager.Instance.X[positionX].Y[positionY]; |
|||
CAngle(currentNode); |
|||
currentNode.blocked = false; |
|||
currentNode.enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
|
|||
public void CAngle(MapUnity currentNode) |
|||
{ |
|||
List<MapUnity> effectRangePreviewPool = new List<MapUnity>(); |
|||
|
|||
Vector3 direction = transform.position- GameManager.Instance.player.transform.position ; |
|||
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up); |
|||
|
|||
if (angle1 < 0) |
|||
{ |
|||
angle1 += 360f; |
|||
} |
|||
if (angle1 >= 300f) |
|||
{ |
|||
angle1 = 330f; |
|||
} |
|||
else if (angle1 >= 240f) |
|||
{ |
|||
angle1 = 270f; |
|||
} |
|||
else if (angle1 >= 180f) |
|||
{ |
|||
angle1 = 210f; |
|||
} |
|||
else if (angle1 >= 120f) |
|||
{ |
|||
angle1 = 150f; |
|||
} |
|||
else if (angle1 >= 60f) |
|||
{ |
|||
angle1 = 90f; |
|||
} |
|||
else if (angle1 >= 0f) |
|||
{ |
|||
angle1 = 30f; |
|||
} |
|||
|
|||
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList (); |
|||
|
|||
// SettlementManager.Instance.damageWork(damage, effectRangePreviewPool, -1);
|
|||
|
|||
foreach (var mapNode in effectRangePreviewPool ) |
|||
{ |
|||
// Vector3 pos = mapNode.transform.position;
|
|||
// pos.y = particlePoint.position.y;
|
|||
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
|
|||
// bluePartical.transform.SetParent(currentNode.transform);
|
|||
mapNode.switchColor(colorUnderAttack); |
|||
} |
|||
} |
|||
} |
|||
@ -1,26 +0,0 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class TNTBucketNode : BlockNode |
|||
{ |
|||
public override void OnDeath() |
|||
{ |
|||
StartCoroutine(DrawCardAndDestory()); |
|||
} |
|||
|
|||
IEnumerator DrawCardAndDestory() |
|||
{ |
|||
foreach (var node in GameManager.Instance.X[positionX].Y[positionY].unitPool ) |
|||
{ |
|||
if(node != null ) |
|||
{ |
|||
node.switchColor(colorUnderAttack); |
|||
} |
|||
} |
|||
GameManager.Instance.X[positionX].Y[positionY].blocked = false; |
|||
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
} |
|||
@ -1,28 +0,0 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class TreeNode : BlockNode |
|||
{ |
|||
public int drawCardCount=2; |
|||
public override void OnDeath() |
|||
{ |
|||
if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.banDrawCard)) |
|||
{ |
|||
} |
|||
else |
|||
{ |
|||
StartCoroutine(DrawCardAndDestory()); |
|||
} |
|||
} |
|||
|
|||
IEnumerator DrawCardAndDestory() |
|||
{ |
|||
TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount)); |
|||
yield return StartCoroutine(TurnMaster.Instance.MoveCards()); |
|||
GameManager.Instance.X[positionX].Y[positionY].blocked = false; |
|||
GameManager.Instance.X[positionX].Y[positionY].enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
} |
|||
@ -0,0 +1,136 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Unity.VisualScripting; |
|||
using UnityEditor.Experimental.GraphView; |
|||
using UnityEngine; |
|||
using UnityEngine.InputSystem; |
|||
using UnityEngine.UIElements; |
|||
|
|||
public class Boom : BlockNode |
|||
{ |
|||
public int damage = 4; |
|||
public GameObject damageParticle; |
|||
public Transform particlePoint; |
|||
public override void OnDeath() |
|||
{ |
|||
// StartCoroutine(BoomdAndDestory());
|
|||
} |
|||
public override IEnumerator ActiveEffect() |
|||
{ |
|||
yield return StartCoroutine(BoomdAndDestory()); |
|||
} |
|||
IEnumerator BoomdAndDestory() |
|||
{ |
|||
//¼ÆËã½Ç¶È
|
|||
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX,positionY); |
|||
CAngle(currentNode); |
|||
currentNode.blocked = false; |
|||
currentNode.enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
public override List<MapUnity> PreviewColorRange() |
|||
{ |
|||
MapUnity currentNode = getNodeTools.LocationToGetNode(positionX, positionY); |
|||
List<MapUnity> effectRangePreviewPool = new List<MapUnity>(); |
|||
|
|||
Vector3 direction = transform.position - GameManager.Instance.player.transform.position; |
|||
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up); |
|||
|
|||
if (angle1 < 0) |
|||
{ |
|||
angle1 += 360f; |
|||
} |
|||
if (angle1 >= 300f) |
|||
{ |
|||
angle1 = 330f; |
|||
} |
|||
else if (angle1 >= 240f) |
|||
{ |
|||
angle1 = 270f; |
|||
} |
|||
else if (angle1 >= 180f) |
|||
{ |
|||
angle1 = 210f; |
|||
} |
|||
else if (angle1 >= 120f) |
|||
{ |
|||
angle1 = 150f; |
|||
} |
|||
else if (angle1 >= 60f) |
|||
{ |
|||
angle1 = 90f; |
|||
} |
|||
else if (angle1 >= 0f) |
|||
{ |
|||
angle1 = 30f; |
|||
} |
|||
|
|||
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList(); |
|||
|
|||
foreach (var mapNode in effectRangePreviewPool) |
|||
{ |
|||
// Vector3 pos = mapNode.transform.position;
|
|||
// pos.y = particlePoint.position.y;
|
|||
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
|
|||
// bluePartical.transform.SetParent(currentNode.transform);
|
|||
mapNode.switchPreColor(currentNode.colorUnderAttack); |
|||
} |
|||
return effectRangePreviewPool; |
|||
} |
|||
public void CAngle(MapUnity currentNode) |
|||
{ |
|||
List<MapUnity> effectRangePreviewPool = new List<MapUnity>(); |
|||
|
|||
Vector3 direction = transform.position- GameManager.Instance.player.transform.position ; |
|||
float angle1 = Vector3.SignedAngle(transform.forward, direction, transform.up); |
|||
|
|||
if (angle1 < 0) |
|||
{ |
|||
angle1 += 360f; |
|||
} |
|||
if (angle1 >= 300f) |
|||
{ |
|||
angle1 = 330f; |
|||
} |
|||
else if (angle1 >= 240f) |
|||
{ |
|||
angle1 = 270f; |
|||
} |
|||
else if (angle1 >= 180f) |
|||
{ |
|||
angle1 = 210f; |
|||
} |
|||
else if (angle1 >= 120f) |
|||
{ |
|||
angle1 = 150f; |
|||
} |
|||
else if (angle1 >= 60f) |
|||
{ |
|||
angle1 = 90f; |
|||
} |
|||
else if (angle1 >= 0f) |
|||
{ |
|||
angle1 = 30f; |
|||
} |
|||
|
|||
effectRangePreviewPool = getNodeTools.setEffectRangePreviewNoCard("4_1", angle1, currentNode).ToList (); |
|||
|
|||
// SettlementManager.Instance.damageWork(damage, effectRangePreviewPool, -1);
|
|||
|
|||
foreach (var mapNode in effectRangePreviewPool ) |
|||
{ |
|||
// Vector3 pos = mapNode.transform.position;
|
|||
// pos.y = particlePoint.position.y;
|
|||
// var bluePartical = Instantiate(ParticalManager.Instance.redParticleEffect,pos, ParticalManager.Instance.redParticleEffect.transform.rotation);
|
|||
// bluePartical.transform.SetParent(currentNode.transform);
|
|||
mapNode.switchColor(currentNode. colorUnderAttack); |
|||
if(mapNode .enemyNode != null ) |
|||
{ |
|||
mapNode.enemyNode.EnemyState.currentHP -= 4; |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,45 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class TNTBucket : BlockNode |
|||
{ |
|||
public override void OnDeath() |
|||
{ |
|||
//StartCoroutine(DrawCardAndDestory());
|
|||
} |
|||
public override IEnumerator ActiveEffect() |
|||
{ |
|||
yield return StartCoroutine(DrawCardAndDestory()); |
|||
} |
|||
IEnumerator DrawCardAndDestory() |
|||
{ |
|||
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY); |
|||
foreach (var node in mapUnity.unitPool ) |
|||
{ |
|||
if(node != null ) |
|||
{ |
|||
node.switchColor(mapUnity . colorUnderAttack); |
|||
} |
|||
} |
|||
mapUnity.blocked = false; |
|||
mapUnity.enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
|
|||
public override List<MapUnity> PreviewColorRange() |
|||
{ |
|||
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY); |
|||
List<MapUnity> effectRangePreviewPool = new List<MapUnity>(); |
|||
foreach (var node in mapUnity.unitPool) |
|||
{ |
|||
if (node != null) |
|||
{ |
|||
effectRangePreviewPool.Add(node); |
|||
node.switchPreColor(mapUnity.colorUnderAttack); |
|||
} |
|||
} |
|||
return effectRangePreviewPool; |
|||
} |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class Tree : BlockNode |
|||
{ |
|||
public int drawCardCount=2; |
|||
public override void OnDeath() |
|||
{ |
|||
/*if (Usermanager.playerAbnormalCondition.ContainsKey(AbnormalCondition.banDrawCard)) |
|||
{ |
|||
} |
|||
else |
|||
{ |
|||
StartCoroutine(DrawCardAndDestory()); |
|||
}*/ |
|||
} |
|||
public override IEnumerator ActiveEffect() |
|||
{ |
|||
yield return StartCoroutine(DrawCardAndDestory()); |
|||
} |
|||
IEnumerator DrawCardAndDestory() |
|||
{ |
|||
MapUnity mapUnity = getNodeTools.LocationToGetNode(positionX, positionY); |
|||
yield return TurnMaster.Instance.StartCoroutine(TurnMaster.Instance.drawCards(drawCardCount)); |
|||
mapUnity.blocked = false; |
|||
mapUnity.enemyNode = null; |
|||
Destroy(this.gameObject); |
|||
yield break; |
|||
} |
|||
} |
|||
@ -0,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() |
|||
{ |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: bc7c825b2060cb44ab9a88f267adf20d |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -1,5 +1,5 @@ |
|||
fileFormatVersion: 2 |
|||
guid: ab7664ff672480f459fb5c68b41dcc23 |
|||
guid: 158addf8acf787245a6bc01d0b3fd919 |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
@ -0,0 +1,75 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class ItemTakerOverNode : MonoBehaviour |
|||
{ |
|||
public enum TakeOverType |
|||
{ |
|||
oneCenter, |
|||
oneCircle |
|||
} |
|||
public TakeOverType takeOverType; |
|||
public enum BlockType |
|||
{ |
|||
common, |
|||
whirlpool, |
|||
vacancy |
|||
} |
|||
public BlockType blockType; |
|||
|
|||
public HashSet<MapUnity> TakeOverCalculation(MapUnity currentMapUnity) |
|||
{ |
|||
HashSet <MapUnity > mapUnities = new HashSet <MapUnity >(); |
|||
switch (takeOverType) |
|||
{ |
|||
case TakeOverType.oneCenter: |
|||
if(currentMapUnity !=null && currentMapUnity .blocked ==false &¤tMapUnity .gameObject .activeInHierarchy ==true ) |
|||
{ |
|||
mapUnities .Add(currentMapUnity ); |
|||
} |
|||
else |
|||
{ |
|||
return null; |
|||
} |
|||
break; |
|||
} |
|||
|
|||
return mapUnities; |
|||
} |
|||
|
|||
public void GenerateBlockItem(MapUnity currentMapUnity,GameObject prefab) |
|||
{ |
|||
switch (blockType) |
|||
{ |
|||
case BlockType.common: |
|||
Vector3 pos = currentMapUnity.transform.position; |
|||
pos.y = 1; |
|||
var block = Instantiate(prefab, pos, Quaternion.identity); |
|||
currentMapUnity.enemyNode = block.GetComponent<EnemyNode>(); |
|||
currentMapUnity.enemyNode.positionX = currentMapUnity.locationX; |
|||
currentMapUnity.enemyNode.positionY = currentMapUnity.locationY; |
|||
currentMapUnity.blocked = true; |
|||
break; |
|||
case BlockType.whirlpool: |
|||
Vector3 pos2 = currentMapUnity.transform.position; |
|||
pos.y = 1; |
|||
var whirlpool = Instantiate(prefab, pos2, Quaternion.identity); |
|||
Whirlpool whirlpoolS = whirlpool.GetComponent<Whirlpool>(); |
|||
whirlpoolS.posX = currentMapUnity.locationX; |
|||
whirlpoolS.posY = currentMapUnity.locationY; |
|||
break; |
|||
case BlockType.vacancy: |
|||
Vector3 pos3 = currentMapUnity.transform.position; |
|||
pos.y = 1; |
|||
var vacancy = Instantiate(prefab, pos3, Quaternion.identity); |
|||
currentMapUnity.enemyNode = vacancy.GetComponent<EnemyNode>(); |
|||
currentMapUnity.enemyNode.positionX = currentMapUnity.locationX; |
|||
currentMapUnity.enemyNode.positionY = currentMapUnity.locationY; |
|||
currentMapUnity.blocked = true; |
|||
currentMapUnity .CylinderFloor .SetActive(false); |
|||
break; |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: d99a212ab38d69947b365e3770680781 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,886 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using UnityEngine; |
|||
using static LevelDevelopManager; |
|||
|
|||
public class LeveGeneraterNew : Singleton<LeveGeneraterNew> |
|||
{ |
|||
public GameObject generatorPoint;//初始位置
|
|||
public Vector3 originalPoint; |
|||
|
|||
[Header("节点生成行(横)")] |
|||
public int generatorLine; |
|||
[Header("节点生成列(竖)")] |
|||
public int generatorColumn; |
|||
|
|||
[Header("节点生成列(竖)间距")] |
|||
public float lineOffset; |
|||
[Header("节点生成行(横)间距")] |
|||
public float columnOffset; |
|||
|
|||
[Header("生成路线数量")] |
|||
public int pathAmount; |
|||
|
|||
[Header("特定房间生成层数")] |
|||
//宝箱
|
|||
public int treasureFloor; |
|||
//锻造
|
|||
public int forgingFloor; |
|||
//单节点战斗
|
|||
public List<int> singleFightFloor; |
|||
//三节点战斗
|
|||
public List<int> multipleFightFloor; |
|||
//随机奖励节点
|
|||
public List<int> rewardNodeFloor; |
|||
public List <RoomType> randomRoomTypeWeightBase; |
|||
public List<RoomType> randomRoomTypeWeightAttach; |
|||
|
|||
|
|||
[Header("节点生成资源")] |
|||
public GameObject levelPrefab; |
|||
public GameObject levelBossPrefab; |
|||
|
|||
[Header("怪物池地图概率字典")] |
|||
public string enemyPoolFileName; |
|||
Dictionary<int, List<string>> probabilityDictionaryWeak = new Dictionary<int, List<string>>(); |
|||
Dictionary<int, List<string>> probabilityDictionaryStrong = new Dictionary<int, List<string>>(); |
|||
Dictionary<int, List<string>> probabilityDictionaryElite = new Dictionary<int, List<string>>(); |
|||
Dictionary<int, List<string>> probabilityDictionaryBoss = new Dictionary<int, List<string>>(); |
|||
private void Start() |
|||
{ |
|||
originalPoint = generatorPoint.transform.position; |
|||
if (LevelDevelopManager.Instance.levelDevelopData.levelStep == 0) |
|||
{ |
|||
GenerateLevelMap(generatorLine, generatorColumn); |
|||
//存储保存数据
|
|||
SaveDataLoader(); |
|||
} |
|||
else |
|||
{ |
|||
GeneratorLevelMapFormSave(); |
|||
} |
|||
|
|||
} |
|||
public void GenerateLevelMap(int generatorLine, int generatorColumn) |
|||
{ |
|||
GenerateGridMap(generatorLine, generatorColumn); |
|||
GeneratePath(); |
|||
RandomSetUpRoom(); |
|||
// CheckNodeRule();
|
|||
ShowMap(); |
|||
SetRoomEnemyPoolAndMap(); |
|||
} |
|||
//生成网格
|
|||
public void GenerateGridMap(int generatorLine, int generatorColumn) |
|||
{ |
|||
|
|||
for (int i = 0; i < generatorLine; i++) |
|||
{ |
|||
if (i == generatorLine - 1) |
|||
{ |
|||
|
|||
for (int j = 0; j < generatorColumn; j++) |
|||
{ |
|||
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x, generatorPoint.transform.position.y, generatorPoint.transform.position.z + lineOffset); |
|||
|
|||
var level = Instantiate(levelBossPrefab, generatorPoint.transform.position, levelPrefab.transform.rotation); |
|||
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform); |
|||
level.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f); |
|||
level.transform.localPosition += new Vector3(0, 5f, 0); |
|||
LevelNode bossLevelNode = level.GetComponent<LevelNode>(); |
|||
bossLevelNode.line = i; |
|||
bossLevelNode.column = j; |
|||
LevelDevelopManager.Instance.levelMap[i].levelColumn.Add(bossLevelNode); |
|||
} |
|||
|
|||
} |
|||
else |
|||
{ |
|||
for (int j = 0; j < generatorColumn; j++) |
|||
{ |
|||
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x, generatorPoint.transform.position.y, generatorPoint.transform.position.z + lineOffset); |
|||
|
|||
GenerateLevelNode(i, j, generatorPoint.transform.position); |
|||
} |
|||
} |
|||
|
|||
generatorPoint.transform.position = new Vector3(generatorPoint.transform.position.x + columnOffset, generatorPoint.transform.position.y, originalPoint.z); |
|||
} |
|||
} |
|||
|
|||
//生成路线
|
|||
public void GeneratePath() |
|||
{ |
|||
List<LevelList> levelMap = LevelDevelopManager.Instance.levelMap; |
|||
for (int i=0;i<generatorLine;i++) |
|||
{ |
|||
if (i < 2) |
|||
{ |
|||
levelMap[i].levelColumn[0].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[2].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[1].isUse = true; |
|||
|
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
if (i==1) |
|||
{ |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]); |
|||
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
} |
|||
} |
|||
else if (i < 5) |
|||
{ |
|||
levelMap[i].levelColumn[0].isUse = true; |
|||
levelMap[i].levelColumn[2].isUse = true; |
|||
levelMap[i].levelColumn[1].isUse = true; |
|||
|
|||
if(i!=4) |
|||
{ |
|||
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]); |
|||
if (i != 2) |
|||
{ |
|||
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[0]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[2]); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[0]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[2]); |
|||
} |
|||
} |
|||
else if (i < 7) |
|||
{ |
|||
levelMap[i].levelColumn[0].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[2].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[1].isUse = true; |
|||
|
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
if (i == 6) |
|||
{ |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]); |
|||
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
} |
|||
} |
|||
else if(i<10) |
|||
{ |
|||
levelMap[i].levelColumn[0].isUse = true; |
|||
levelMap[i].levelColumn[2].isUse = true; |
|||
levelMap[i].levelColumn[1].isUse = true; |
|||
|
|||
if (i != 9) |
|||
{ |
|||
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[0]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[2]); |
|||
if (i != 7) |
|||
{ |
|||
levelMap[i + 1].levelColumn[0].fatherLevelNodes.Add(levelMap[i].levelColumn[0]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[2].fatherLevelNodes.Add(levelMap[i].levelColumn[2]); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
levelMap[i].levelColumn[0].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i].levelColumn[2].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[0]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[1]); |
|||
levelMap[i + 1].levelColumn[1].fatherLevelNodes.Add(levelMap[i].levelColumn[2]); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
levelMap[i].levelColumn[0].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[2].gameObject.SetActive(false); |
|||
levelMap[i].levelColumn[1].isUse = true; |
|||
|
|||
if(i!= generatorLine-1) |
|||
{ |
|||
levelMap[i].levelColumn[1].nextLevelNodes.Add(levelMap[i + 1].levelColumn[1]); |
|||
} |
|||
if(i!=10) |
|||
{ |
|||
levelMap[i].levelColumn[1].fatherLevelNodes.Add(levelMap[i - 1].levelColumn[1]); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
/* int currentColum = column; |
|||
LevelDevelopManager.Instance.levelMap[0].levelColumn[currentColum].isUse = true; |
|||
|
|||
//生成路线表
|
|||
List<int> path = new List<int>(); |
|||
path.Add(LevelDevelopManager.Instance.levelMap[0].levelColumn[currentColum].column);//加入起点
|
|||
|
|||
|
|||
LevelNode LevelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[currentColum]; |
|||
LevelNode nextLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[generatorColumn / 2]; |
|||
LevelNode.nextLevelNodes.Add(nextLevelNode); |
|||
nextLevelNode.fatherLevelNodes.Add(LevelNode); |
|||
nextLevelNode.isUse = true; |
|||
|
|||
int pathOffset = Random.Range(-1, 2); |
|||
if (CheckChoosePath(line, currentColum, pathOffset)) |
|||
{ |
|||
LevelNode LevelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[currentColum]; |
|||
currentColum += pathOffset; |
|||
LevelNode nextLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[currentColum]; |
|||
|
|||
if (!LevelNode.nextLevelNodes.Contains(nextLevelNode)) |
|||
LevelNode.nextLevelNodes.Add(nextLevelNode); |
|||
if (!nextLevelNode.fatherLevelNodes.Contains(LevelNode)) |
|||
nextLevelNode.fatherLevelNodes.Add(LevelNode); |
|||
nextLevelNode.isUse = true; |
|||
|
|||
//加入路线表
|
|||
path.Add(nextLevelNode.column); |
|||
break; |
|||
}*/ |
|||
|
|||
|
|||
} |
|||
|
|||
//检查路线选择是否合理
|
|||
public bool CheckChoosePath(int line, int column, int pathOffset) |
|||
{ |
|||
int nextcolumn = (column + pathOffset); |
|||
if (nextcolumn < 0 || nextcolumn > generatorColumn - 1) |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
if (pathOffset == -1) |
|||
{ |
|||
LevelNode levelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[column - 1]; |
|||
if (levelNode.isUse == true) |
|||
{ |
|||
foreach (var node in levelNode.nextLevelNodes) |
|||
{ |
|||
if (node.column > nextcolumn) |
|||
{ |
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
if (pathOffset == 1) |
|||
{ |
|||
LevelNode levelNode = LevelDevelopManager.Instance.levelMap[line - 1].levelColumn[column + 1]; |
|||
if (levelNode.isUse == true) |
|||
{ |
|||
foreach (var node in levelNode.nextLevelNodes) |
|||
{ |
|||
if (node.column < nextcolumn) |
|||
{ |
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
//检查节点是否合理(分支目的地不同,保底精英)
|
|||
public void CheckNodeRule() |
|||
{ |
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++) |
|||
{ |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++) |
|||
{ |
|||
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j]; |
|||
if (currentLevelNode.isUse) |
|||
{ |
|||
if (currentLevelNode.nextLevelNodes.Count > 1 && i != treasureFloor - 1 && i != generatorLine - 3 && i != generatorLine - 2) |
|||
{ |
|||
Debug.Log(i); |
|||
List<LevelDevelopManager.RoomType> roomTypes = new List<LevelDevelopManager.RoomType>(); |
|||
foreach (var room in currentLevelNode.nextLevelNodes) |
|||
{ |
|||
if (!roomTypes.Contains(room.roomType)) |
|||
{ |
|||
Debug.Log(currentLevelNode.line + ";" + currentLevelNode.column + "过"); |
|||
roomTypes.Add(room.roomType); |
|||
} |
|||
else |
|||
{ |
|||
Debug.Log(currentLevelNode.line + ";" + currentLevelNode.column + "否"); |
|||
RandomGetOneRoom(currentLevelNode.nextLevelNodes, i, j); |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
//生成房间
|
|||
public LevelNode GenerateLevelNode(int line, int column, Vector3 pos) |
|||
{ |
|||
var level = Instantiate(levelPrefab, pos, levelPrefab.transform.rotation); |
|||
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform); |
|||
level.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f); |
|||
LevelNode levelNode = level.GetComponent<LevelNode>(); |
|||
levelNode.line = line; |
|||
levelNode.column = column; |
|||
LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(levelNode); |
|||
|
|||
return levelNode; |
|||
} |
|||
//生成Boss房间
|
|||
public LevelNode GenerateLevelBossNode(int line, int column, Vector3 pos) |
|||
{ |
|||
var level = Instantiate(levelBossPrefab, pos, levelPrefab.transform.rotation); |
|||
level.transform.SetParent(LevelDevelopManager.Instance.levelFather.transform); |
|||
level.transform.localScale = new Vector3(0.04f, 0.04f, 0.04f); |
|||
LevelNode levelNode = level.GetComponent<LevelNode>(); |
|||
levelNode.line = line; |
|||
levelNode.column = column; |
|||
LevelDevelopManager.Instance.levelMap[line].levelColumn.Add(levelNode); |
|||
|
|||
return levelNode; |
|||
} |
|||
//按规则随机设定房间
|
|||
public void RandomSetUpRoom() |
|||
{ |
|||
List<LevelList> levelMap = LevelDevelopManager.Instance.levelMap; |
|||
for (int i = 0; i < generatorLine; i++) |
|||
{ |
|||
if (i == 0) |
|||
{ |
|||
//第一层是初始点
|
|||
foreach (var room in levelMap[i].levelColumn) |
|||
{ |
|||
room.SetUpRoom(RoomType.start); |
|||
} |
|||
} |
|||
else if (i == treasureFloor) |
|||
{ |
|||
//指定宝箱层
|
|||
foreach (var room in levelMap[i].levelColumn) |
|||
{ |
|||
room.SetUpRoom(RoomType.treasure); |
|||
} |
|||
} |
|||
else if (i == generatorLine - 2) |
|||
{ |
|||
//倒数第二层全是篝火
|
|||
foreach (var room in levelMap[i].levelColumn) |
|||
{ |
|||
room.SetUpRoom(RoomType.campfire); |
|||
} |
|||
} |
|||
else if (i == generatorLine - 3) |
|||
{ |
|||
//倒数第三层全是铸造
|
|||
foreach (var room in levelMap[i].levelColumn) |
|||
{ |
|||
room.SetUpRoom(RoomType.forging); |
|||
} |
|||
} |
|||
else if (i == generatorLine - 1) |
|||
{ |
|||
//最后一层boss房
|
|||
foreach (var room in levelMap[i].levelColumn) |
|||
{ |
|||
room.SetUpRoom(RoomType.boss); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
//阶段的随机奖励生成
|
|||
List<List<LevelNode>> levelNodes = new List<List<LevelNode>>(); |
|||
List <LevelNode > aNode_1 = new List <LevelNode>(); |
|||
List<LevelNode> aNode_2 = new List<LevelNode>(); |
|||
List<LevelNode> bNode_1 = new List<LevelNode>(); |
|||
List<LevelNode> bNode_2 = new List<LevelNode>(); |
|||
for (int i = 0; i < 3; i++) |
|||
{ |
|||
aNode_1.Add(levelMap[rewardNodeFloor[0]].levelColumn[i]); |
|||
aNode_2.Add(levelMap[rewardNodeFloor[0]+2].levelColumn[i]); |
|||
|
|||
bNode_1.Add(levelMap[rewardNodeFloor[1]].levelColumn[i]); |
|||
bNode_2.Add(levelMap[rewardNodeFloor[1] + 2].levelColumn[i]); |
|||
} |
|||
levelNodes .Add(aNode_1); |
|||
levelNodes .Add(aNode_2); |
|||
levelNodes.Add(bNode_1); |
|||
levelNodes.Add(bNode_2); |
|||
int shopA_l = Random.Range(0, 2); |
|||
int shopA_C = Random.Range(0, levelNodes[shopA_l].Count); |
|||
int shopB_l = Random.Range(2, 4); |
|||
int shopB_C = Random.Range(0, levelNodes[shopB_l].Count); |
|||
levelNodes[shopA_l][shopA_C ].SetUpRoom(RoomType.shop); |
|||
levelNodes[shopB_l][shopB_C].SetUpRoom(RoomType.shop); |
|||
levelNodes[shopA_l][shopA_C] = null; |
|||
levelNodes[shopB_l][shopB_C] = null; |
|||
List <int > order = new List<int>() {0,2,1,3}; |
|||
for (int a = 0; a < order.Count; a++) |
|||
{ |
|||
int i = order [a]; |
|||
for (int j = 0; j < 3; j++) |
|||
{ |
|||
bool isGo = true; |
|||
LevelNode currentNode = levelNodes[i][j]; |
|||
while (isGo) |
|||
{ |
|||
|
|||
RoomType roomType; |
|||
if (randomRoomTypeWeightBase.Count>0) |
|||
{ roomType = randomRoomTypeWeightBase[Random.Range(0, randomRoomTypeWeightBase.Count)]; } |
|||
else |
|||
{ |
|||
roomType = randomRoomTypeWeightAttach[Random.Range(0, randomRoomTypeWeightAttach.Count)]; |
|||
} |
|||
if (currentNode != null) |
|||
{ |
|||
switch (i) |
|||
{ |
|||
case 0: |
|||
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType) |
|||
{ |
|||
currentNode.SetUpRoom(roomType); |
|||
if (randomRoomTypeWeightBase.Count > 0) |
|||
{ |
|||
randomRoomTypeWeightBase.Remove(roomType); |
|||
} |
|||
else |
|||
{ |
|||
randomRoomTypeWeightAttach.Remove(roomType); |
|||
} |
|||
isGo = false; |
|||
} |
|||
break; |
|||
case 1: |
|||
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType) |
|||
{ |
|||
currentNode.SetUpRoom(roomType); |
|||
if (randomRoomTypeWeightBase.Count > 0) |
|||
{ |
|||
randomRoomTypeWeightBase.Remove(roomType); |
|||
} |
|||
else |
|||
{ |
|||
randomRoomTypeWeightAttach.Remove(roomType); |
|||
} |
|||
isGo = false; |
|||
} |
|||
break; |
|||
case 2: |
|||
if (levelMap[currentNode.line + 2].levelColumn[currentNode.column].roomType != roomType) |
|||
{ |
|||
currentNode.SetUpRoom(roomType); |
|||
if (randomRoomTypeWeightBase.Count > 0) |
|||
{ |
|||
randomRoomTypeWeightBase.Remove(roomType); |
|||
} |
|||
else |
|||
{ |
|||
randomRoomTypeWeightAttach.Remove(roomType); |
|||
} |
|||
isGo = false; |
|||
} |
|||
break; |
|||
case 3: |
|||
if (levelMap[currentNode.line - 2].levelColumn[currentNode.column].roomType != roomType) |
|||
{ |
|||
currentNode.SetUpRoom(roomType); |
|||
if (randomRoomTypeWeightBase.Count > 0) |
|||
{ |
|||
randomRoomTypeWeightBase.Remove(roomType); |
|||
} |
|||
else |
|||
{ |
|||
randomRoomTypeWeightAttach.Remove(roomType); |
|||
} |
|||
isGo = false; |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
isGo = false; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//生成随机怪物
|
|||
for(int i=0;i<multipleFightFloor .Count;i++ ) |
|||
{ |
|||
for (int j = 0; j < 3; j++) |
|||
{ |
|||
levelMap[multipleFightFloor[i]].levelColumn[j].SetUpRoom(RoomType.monster); |
|||
} |
|||
} |
|||
|
|||
int randomLine = Random.Range(0, multipleFightFloor.Count); |
|||
while (multipleFightFloor [ randomLine] <4) |
|||
{ |
|||
randomLine = Random.Range(0, multipleFightFloor.Count);//保证精英不会刷在四层以下
|
|||
} |
|||
int randomColumn = Random.Range(0, 3); |
|||
|
|||
if (singleFightFloor.Contains(multipleFightFloor[randomLine])) |
|||
{ |
|||
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteAndMonster); |
|||
} |
|||
else |
|||
{ |
|||
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteMonster); |
|||
} |
|||
|
|||
multipleFightFloor.RemoveAt(randomLine); |
|||
|
|||
randomLine = Random.Range(0, multipleFightFloor.Count); |
|||
while (multipleFightFloor[randomLine] < 4) |
|||
{ |
|||
randomLine = Random.Range(0, multipleFightFloor.Count);//保证精英不会刷在四层以下
|
|||
} |
|||
randomColumn = Random.Range(0, 3); |
|||
if (singleFightFloor .Contains (multipleFightFloor[randomLine])) |
|||
{ |
|||
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteAndMonster ); |
|||
} |
|||
else |
|||
{ |
|||
levelMap[multipleFightFloor[randomLine]].levelColumn[randomColumn].SetUpRoom(RoomType.eliteMonster); |
|||
} |
|||
|
|||
|
|||
/* for (int i = 0; i < singleFightFloor.Count; i++) |
|||
{ |
|||
levelMap[singleFightFloor [i]].levelColumn[1].SetUpRoom(RoomType.monster); |
|||
} |
|||
int randomLine_s = Random.Range(0, singleFightFloor.Count); |
|||
while (singleFightFloor[randomLine_s] < 4) |
|||
{ |
|||
randomLine_s = Random.Range(0,singleFightFloor.Count);//保证精英不会刷在四层以下
|
|||
} |
|||
levelMap[singleFightFloor[randomLine_s]].levelColumn[1].SetUpRoom(RoomType.eliteAndMonster);*/ |
|||
} |
|||
|
|||
//判断下一个房间的所有子集是否有重复
|
|||
public void RandomGetOneRoom(List<LevelNode> nextLevelNodes, int line, int column) |
|||
{ |
|||
HashSet<LevelDevelopManager.RoomType> candidateRoomTypeList = new HashSet<LevelDevelopManager.RoomType>(); |
|||
|
|||
while (true) |
|||
{ |
|||
candidateRoomTypeList.Clear(); |
|||
|
|||
for (int i = 0; i < nextLevelNodes.Count; i++) |
|||
{ |
|||
bool contravenes = true; |
|||
LevelDevelopManager.RoomType candidateRoomType = LevelDevelopManager.RoomType.monster; |
|||
while (contravenes) |
|||
{ |
|||
contravenes = false; |
|||
|
|||
//candidateRoomType = GetRoomTypeByWeight();//获取后选房间类型
|
|||
LevelNode currentLevelNode = nextLevelNodes[i]; |
|||
|
|||
switch (candidateRoomType) |
|||
{ |
|||
case LevelDevelopManager.RoomType.monster: |
|||
|
|||
break; |
|||
case LevelDevelopManager.RoomType.eliteMonster: |
|||
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes) |
|||
{ |
|||
if (fatherRoom.roomType == LevelDevelopManager.RoomType.eliteMonster || line < 5) |
|||
{ |
|||
contravenes = true; |
|||
} |
|||
} |
|||
break; |
|||
case LevelDevelopManager.RoomType.incident: |
|||
|
|||
break; |
|||
case LevelDevelopManager.RoomType.campfire: |
|||
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes) |
|||
{ |
|||
if (fatherRoom.roomType == LevelDevelopManager.RoomType.campfire || line == generatorLine - 3 || line < 5) |
|||
{ |
|||
contravenes = true; |
|||
} |
|||
} |
|||
break; |
|||
case LevelDevelopManager.RoomType.shop: |
|||
foreach (var fatherRoom in currentLevelNode.fatherLevelNodes) |
|||
{ |
|||
if (fatherRoom.roomType == LevelDevelopManager.RoomType.shop) |
|||
{ |
|||
contravenes = true; |
|||
} |
|||
} |
|||
break; |
|||
} |
|||
|
|||
} |
|||
candidateRoomTypeList.Add(candidateRoomType); |
|||
} |
|||
|
|||
if (candidateRoomTypeList.Count == nextLevelNodes.Count) |
|||
{ |
|||
|
|||
List<LevelDevelopManager.RoomType> roomTypes = candidateRoomTypeList.ToList(); |
|||
for (int k = 0; k < nextLevelNodes.Count; k++) |
|||
{ |
|||
Debug.Log(roomTypes[k]); |
|||
nextLevelNodes[k].SetUpRoom(roomTypes[k]); |
|||
} |
|||
|
|||
break; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
//显示连线,设置能否进入
|
|||
public void ShowMap() |
|||
{ |
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++) |
|||
{ |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++) |
|||
{ |
|||
if (LevelDevelopManager.Instance.levelMap[i].levelColumn[j].isUse == false) |
|||
{ |
|||
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].gameObject.SetActive(false); |
|||
} |
|||
else |
|||
{ |
|||
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].GetComponent<LevelNode>().LineShow(); |
|||
} |
|||
LevelDevelopManager.Instance.levelMap[i].levelColumn[j].GetComponent<LevelNode>().JudgeCanEnter(); |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
//载入保存数据
|
|||
public void SaveDataLoader() |
|||
{ |
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++) |
|||
{ |
|||
LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Clear(); |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++) |
|||
{ |
|||
LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Add(LevelDevelopManager.Instance.levelMap[i].levelColumn[j].ReturnSaveData()); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
//根据保存的信息生成地图
|
|||
public void GeneratorLevelMapFormSave() |
|||
{ |
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap.Count; i++) |
|||
{ |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Count; j++) |
|||
{ |
|||
LevelDevelopData_SO.levelData currentLevelData = LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList[j]; |
|||
|
|||
if (i == generatorLine - 1) |
|||
{ |
|||
LevelNode currentNode = GenerateLevelBossNode(i, j, currentLevelData.nodePos); |
|||
currentNode.SetUpRoomWithRoomData(currentLevelData); |
|||
|
|||
} |
|||
else |
|||
{ |
|||
LevelNode currentNode = GenerateLevelNode(i, j, currentLevelData.nodePos); |
|||
currentNode.SetUpRoomWithRoomData(currentLevelData); |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap.Count; i++) |
|||
{ |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList.Count; j++) |
|||
{ |
|||
LevelDevelopData_SO.levelData currentLevelData = LevelDevelopManager.Instance.levelDevelopData.levelSaveMap[i].levelDataList[j]; |
|||
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j]; |
|||
currentLevelNode.SetUpRoomLinkWithRoomData(currentLevelData); |
|||
|
|||
if (currentLevelNode.isUse == false) |
|||
{ |
|||
currentLevelNode.gameObject.SetActive(false); |
|||
} |
|||
else |
|||
{ |
|||
currentLevelNode.LineShow(); |
|||
} |
|||
//设置进度标识
|
|||
if (currentLevelNode.isPassBy == true) |
|||
{ |
|||
currentLevelNode.passByMark.SetActive(true); |
|||
} |
|||
currentLevelNode.JudgeCanEnter(); |
|||
} |
|||
|
|||
} |
|||
//判断能否进入
|
|||
int line = LevelDevelopManager.Instance.levelDevelopData.levelStep; |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[line].levelColumn.Count; j++) |
|||
{ |
|||
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[line].levelColumn[j]; |
|||
currentLevelNode.JudgeRoadCanEnter(); |
|||
} |
|||
|
|||
} |
|||
//设置房间怪物组和地图
|
|||
public void SetRoomEnemyPoolAndMap() |
|||
{ |
|||
ReadEnemyPoolInforCsv(enemyPoolFileName); |
|||
//权重概率表
|
|||
Dictionary<int, int> weakProbabilityDic = new Dictionary<int, int>(); |
|||
int weakTotalWight = 0; |
|||
foreach (var pool in probabilityDictionaryWeak.Keys.ToList()) |
|||
{ |
|||
weakTotalWight += int.Parse(probabilityDictionaryWeak[pool][2]); |
|||
weakProbabilityDic.Add(weakTotalWight, pool); |
|||
} |
|||
List<int> strongProbabilityList = probabilityDictionaryStrong.Keys.ToList(); |
|||
List<int> eliteProbabilityList = probabilityDictionaryElite.Keys.ToList(); |
|||
List<int> bossProbabilityList = probabilityDictionaryBoss.Keys.ToList(); |
|||
//设置怪物池
|
|||
for (int i = 0; i < LevelDevelopManager.Instance.levelMap.Count; i++) |
|||
{ |
|||
for (int j = 0; j < LevelDevelopManager.Instance.levelMap[i].levelColumn.Count; j++) |
|||
{ |
|||
LevelNode currentLevelNode = LevelDevelopManager.Instance.levelMap[i].levelColumn[j]; |
|||
switch (currentLevelNode.roomType) |
|||
{ |
|||
case RoomType.monster: |
|||
if (i < 5) |
|||
{ |
|||
currentLevelNode.fightEenemyPool = Name.EnemyPool.Weak; |
|||
//根据怪物池随机怪物组和地图
|
|||
int mark1 = Random.Range(0, weakTotalWight); |
|||
List<int> weakProbabilityList = weakProbabilityDic.Keys.ToList(); |
|||
for (int a = 0; a < weakProbabilityList.Count; a++) |
|||
{ |
|||
if (mark1 < weakProbabilityList[a]) |
|||
{ |
|||
string[] enemys = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][3].Split(';'); |
|||
currentLevelNode.enemyList = enemys.ToList(); |
|||
string[] maps = probabilityDictionaryWeak[weakProbabilityDic[weakProbabilityList[a]]][4].Split(';'); |
|||
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())]; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
currentLevelNode.fightEenemyPool = Name.EnemyPool.Strong; |
|||
//根据怪物池随机怪物组和地图
|
|||
int mark2 = Random.Range(0, 100); |
|||
for (int a = 0; a < strongProbabilityList.Count; a++) |
|||
{ |
|||
if (mark2 < strongProbabilityList[a]) |
|||
{ |
|||
string[] enemys = probabilityDictionaryStrong[strongProbabilityList[a]][3].Split(';'); |
|||
currentLevelNode.enemyList = enemys.ToList(); |
|||
string[] maps = probabilityDictionaryStrong[strongProbabilityList[a]][4].Split(';'); |
|||
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())]; |
|||
} |
|||
} |
|||
} |
|||
break; |
|||
case RoomType.boss: |
|||
currentLevelNode.fightEenemyPool = Name.EnemyPool.Boss; |
|||
//根据怪物池随机怪物组和地图
|
|||
int mark3 = Random.Range(0, 100); |
|||
for (int a = 0; a < bossProbabilityList.Count; a++) |
|||
{ |
|||
if (mark3 < bossProbabilityList[a]) |
|||
{ |
|||
string[] enemys = probabilityDictionaryBoss[bossProbabilityList[a]][3].Split(';'); |
|||
currentLevelNode.enemyList = enemys.ToList(); |
|||
string[] maps = probabilityDictionaryBoss[bossProbabilityList[a]][4].Split(';'); |
|||
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())]; |
|||
} |
|||
} |
|||
break; |
|||
case RoomType.eliteMonster: |
|||
currentLevelNode.fightEenemyPool = Name.EnemyPool.Elite; |
|||
//根据怪物池随机怪物组和地图
|
|||
int mark4 = Random.Range(0, 100); |
|||
for (int a = 0; a < eliteProbabilityList.Count; a++) |
|||
{ |
|||
if (mark4 < eliteProbabilityList[a]) |
|||
{ |
|||
string[] enemys = probabilityDictionaryElite[eliteProbabilityList[a]][3].Split(';'); |
|||
currentLevelNode.enemyList = enemys.ToList(); |
|||
string[] maps = probabilityDictionaryElite[eliteProbabilityList[a]][4].Split(';'); |
|||
currentLevelNode.mapIndex = maps[Random.Range(0, maps.Count())]; |
|||
} |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
public void ReadEnemyPoolInforCsv(string fileName) |
|||
{ |
|||
string filePath = Path.Combine(Application.streamingAssetsPath, fileName); |
|||
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) |
|||
using (StreamReader reader = new StreamReader(fs)) |
|||
{ |
|||
bool isFirstLine = true; |
|||
while (!reader.EndOfStream) |
|||
{ |
|||
string line = reader.ReadLine(); |
|||
if (isFirstLine) |
|||
{ |
|||
isFirstLine = false; |
|||
continue; // 跳过标题行
|
|||
} |
|||
// 用逗号分隔每行数据
|
|||
string[] values = line.Split(','); |
|||
switch (values[1]) |
|||
{ |
|||
case Name.EnemyPool.Weak: |
|||
probabilityDictionaryWeak.Add(int.Parse(values[0]), values.ToList()); |
|||
break; |
|||
case Name.EnemyPool.Strong: |
|||
probabilityDictionaryStrong.Add(int.Parse(values[0]), values.ToList()); |
|||
break; |
|||
case Name.EnemyPool.Elite: |
|||
probabilityDictionaryElite.Add(int.Parse(values[0]), values.ToList()); |
|||
break; |
|||
case Name.EnemyPool.Boss: |
|||
probabilityDictionaryBoss.Add(int.Parse(values[0]), values.ToList()); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 9357c62ffeceff4468da4ccfd5b937a3 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,8 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 06f37aca6b480fd4fa7567b746117fb7 |
|||
folderAsset: yes |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,18 @@ |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
using UnityEngine.EventSystems; |
|||
|
|||
public class MouseSetActiveUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler |
|||
{ |
|||
public GameObject gameObject; |
|||
public void OnPointerEnter(PointerEventData eventData) |
|||
{ |
|||
gameObject.SetActive(true); |
|||
} |
|||
|
|||
public void OnPointerExit(PointerEventData eventData) |
|||
{ |
|||
gameObject .SetActive (false); |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 7fdb8517729ce2b42b8193e7b887c770 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
@ -0,0 +1,64 @@ |
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class ObjectItemSettleManager : Singleton<ObjectItemSettleManager> |
|||
{ |
|||
public List<EnemyNode> readyToActivateEffects = new List<EnemyNode>(); |
|||
|
|||
private void Start() |
|||
{ |
|||
GameManager.Instance.usedCardEvent += StartSettleAllBlocks; |
|||
} |
|||
public void StartSettleAllBlocks() |
|||
{ |
|||
StartCoroutine(SettleAllBlocks(readyToActivateEffects)); |
|||
} |
|||
public IEnumerator SettleAllBlocks(List<EnemyNode> blockNodes) |
|||
{ |
|||
yield return new WaitForSeconds(0.5f);//开始先等待确认伤害已经打出,或者更改伤害打出的携程确保伤害输出后再开启结算
|
|||
|
|||
List<EnemyNode> blockNodesNew = new List<EnemyNode>(); |
|||
for (int i = 0; i < blockNodes.Count; i++) |
|||
{ |
|||
Debug.Log("范围地块血量" + blockNodes[i].EnemyState.currentNumberOfHits); |
|||
if (blockNodes[i].EnemyState.currentNumberOfHits <= 0) |
|||
{ |
|||
List<MapUnity> mapUnities = blockNodes[i].PreviewColorRange(); |
|||
if (mapUnities != null) |
|||
{ |
|||
foreach (var node in mapUnities) |
|||
{ |
|||
if (node.enemyNode != null && blockNodesNew.Contains(node.enemyNode) == false&&node .enemyNode != blockNodes[i]) |
|||
{ |
|||
blockNodesNew.Add(node.enemyNode); |
|||
} |
|||
} |
|||
} |
|||
|
|||
yield return StartCoroutine(blockNodes[i].ActiveEffect()); |
|||
if (mapUnities != null) |
|||
{ |
|||
Debug.Log("范围" + mapUnities.Count); |
|||
} |
|||
else |
|||
{ |
|||
Debug.Log("范围空"); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
if(blockNodesNew .Count >0) |
|||
{ |
|||
StartCoroutine(SettleAllBlocks(blockNodesNew)); |
|||
} |
|||
|
|||
} |
|||
|
|||
public void ActivateEffects(EnemyNode enemyNode) |
|||
{ |
|||
//enemyNode .
|
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 90ef6bc6f4b6bb14287b411057d7c3f3 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
|
@ -0,0 +1,7 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 31773780d374d484fb94e91b58d0b06c |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -0,0 +1,7 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 062c61522f413ce46946030ab2715b92 |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -0,0 +1,7 @@ |
|||
fileFormatVersion: 2 |
|||
guid: 311d278fd665683429f28cbfdd56a0b6 |
|||
DefaultImporter: |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
Loading…
Reference in new issue