From 37f211ffc649a16a65f97c206114f6f50f1e8df3 Mon Sep 17 00:00:00 2001 From: suqin Date: Sat, 6 Dec 2025 17:48:48 +0800 Subject: [PATCH] first commint --- .gitignore | 3 + GeneratedPrefabs/.gitkeep | 0 Level51605.prefab | 2924 +++++++++++++++++++++++++++++++++++ Level90093.prefab | 374 +++++ README.md | 80 + detect_filled_cells.py | 100 ++ generated_levels.cs | 543 +++++++ global.xlsx | Bin 0 -> 209976 bytes inspect_cells.py | 305 ++++ make_prefab.py | 201 +++ read_excel.py | 256 +++ run_pipeline.py | 134 ++ test_detect_filled_cells.py | 53 + write_code.py | 149 ++ 14 files changed, 5122 insertions(+) create mode 100644 .gitignore create mode 100644 GeneratedPrefabs/.gitkeep create mode 100644 Level51605.prefab create mode 100644 Level90093.prefab create mode 100644 README.md create mode 100644 detect_filled_cells.py create mode 100644 generated_levels.cs create mode 100644 global.xlsx create mode 100644 inspect_cells.py create mode 100644 make_prefab.py create mode 100644 read_excel.py create mode 100644 run_pipeline.py create mode 100644 test_detect_filled_cells.py create mode 100644 write_code.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57beea2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +GeneratedPrefabs/*.prefab +found*.xlsx +__pycache__/ diff --git a/GeneratedPrefabs/.gitkeep b/GeneratedPrefabs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Level51605.prefab b/Level51605.prefab new file mode 100644 index 0000000..d563821 --- /dev/null +++ b/Level51605.prefab @@ -0,0 +1,2924 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2259847937022306430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8028822463778547818} + - component: {fileID: 9018693869954649929} + - component: {fileID: 2817994186257587065} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8028822463778547818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2898016089667496094} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1839735485 &9018693869954649929 +Tilemap: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + m_Enabled: 1 + m_Tiles: + - first: {x: -1, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: 0, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 0, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: 2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: 3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 2, y: 7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 3, y: 7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 4, y: 7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + m_AnimatedTiles: {} + m_TileAssetArray: + - m_RefCount: 34 + m_Data: {fileID: 11400000, guid: 9094a20fac3bd42409cbd3099244203d, type: 2} + m_TileSpriteArray: + - m_RefCount: 34 + m_Data: {fileID: 21300000, guid: bd114e2f7df4b42a3b13cd40db799fc8, type: 3} + m_TileMatrixArray: + - m_RefCount: 34 + m_Data: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_TileColorArray: + - m_RefCount: 34 + m_Data: {r: 1, g: 1, b: 1, a: 1} + m_TileObjectToInstantiateArray: [] + m_AnimationFrameRate: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Origin: {x: -1, y: -2, z: 0} + m_Size: {x: 7, y: 10, z: 1} + m_TileAnchor: {x: 0.5, y: 0.5, z: 0} + m_TileOrientation: 0 + m_TileOrientationMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 +--- !u!483693784 &2817994186257587065 +TilemapRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + 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_ChunkSize: {x: 32, y: 32, z: 32} + m_ChunkCullingBounds: {x: 0.0009765625, y: 0.2492969, z: 0} + m_MaxChunkCount: 16 + m_MaxFrameAge: 16 + m_SortOrder: 3 + m_Mode: 1 + m_DetectChunkCullingBounds: 0 + m_MaskInteraction: 0 +--- !u!1 &3331875946433896379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8602795678518186784} + - component: {fileID: 5346098299145066350} + - component: {fileID: 7780568001807741331} + m_Layer: 0 + m_Name: Border + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8602795678518186784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2898016089667496094} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1839735485 &5346098299145066350 +Tilemap: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + m_Enabled: 1 + m_Tiles: + - first: {x: -9, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -21, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -20, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 1, y: -19, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 0, y: -18, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -1, y: -17, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -16, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -3, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -2, y: -15, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -4, y: -14, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -6, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -5, y: -13, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -8, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -7, y: -12, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -9, y: -11, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -10, y: -10, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -12, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -11, y: -9, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -8, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -13, y: -7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -14, y: -6, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -15, y: -5, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -16, y: -4, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -18, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -17, y: -3, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -19, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -21, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -20, y: -1, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: -22, y: 0, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 2 + m_TileSpriteIndex: 2 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + m_AnimatedTiles: {} + m_TileAssetArray: + - m_RefCount: 22 + m_Data: {fileID: 11400000, guid: c4ba7c97e3d29474283a4c87aa927fe3, type: 2} + - m_RefCount: 78 + m_Data: {fileID: 11400000, guid: 9094a20fac3bd42409cbd3099244203d, type: 2} + - m_RefCount: 124 + m_Data: {fileID: 11400000, guid: 7016a7036b066477abe0d150ae55aa83, type: 2} + m_TileSpriteArray: + - m_RefCount: 22 + m_Data: {fileID: 21300000, guid: d3a70cda4c7bc4d60bd25cf11bb9a158, type: 3} + - m_RefCount: 78 + m_Data: {fileID: 21300000, guid: bd114e2f7df4b42a3b13cd40db799fc8, type: 3} + - m_RefCount: 124 + m_Data: {fileID: 21300000, guid: f6c8ef238c4e142aeac514b536a5fc56, type: 3} + m_TileMatrixArray: + - m_RefCount: 224 + m_Data: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_TileColorArray: + - m_RefCount: 224 + m_Data: {r: 1, g: 1, b: 1, a: 1} + m_TileObjectToInstantiateArray: [] + m_AnimationFrameRate: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Origin: {x: -22, y: -22, z: 0} + m_Size: {x: 24, y: 23, z: 1} + m_TileAnchor: {x: 0.5, y: 0.5, z: 0} + m_TileOrientation: 0 + m_TileOrientationMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 +--- !u!483693784 &7780568001807741331 +TilemapRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + 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_ChunkSize: {x: 32, y: 32, z: 32} + m_ChunkCullingBounds: {x: 0.0009765625, y: 0.2574414, z: 0} + m_MaxChunkCount: 16 + m_MaxFrameAge: 16 + m_SortOrder: 3 + m_Mode: 1 + m_DetectChunkCullingBounds: 0 + m_MaskInteraction: 0 +--- !u!1 &6718232195078379098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2898016089667496094} + - component: {fileID: 3111389448725951018} + m_Layer: 0 + m_Name: Level51605 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2898016089667496094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718232195078379098} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8028822463778547818} + - {fileID: 8602795678518186784} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!156049354 &3111389448725951018 +Grid: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718232195078379098} + m_Enabled: 1 + m_CellSize: {x: 1, y: 0.5, z: 1} + m_CellGap: {x: 0, y: 0, z: 0} + m_CellLayout: 3 + m_CellSwizzle: 0 diff --git a/Level90093.prefab b/Level90093.prefab new file mode 100644 index 0000000..47587cd --- /dev/null +++ b/Level90093.prefab @@ -0,0 +1,374 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2259847937022306430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8028822463778547818} + - component: {fileID: 9018693869954649929} + - component: {fileID: 2817994186257587065} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8028822463778547818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2898016089667496094} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1839735485 &9018693869954649929 +Tilemap: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + m_Enabled: 1 + m_Tiles: + - first: {x: -1, y: -2, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + - first: {x: 5, y: 7, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 0 + m_TileSpriteIndex: 0 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + m_AnimatedTiles: {} + m_TileAssetArray: + - m_RefCount: 34 + m_Data: {fileID: 11400000, guid: 9094a20fac3bd42409cbd3099244203d, type: 2} + m_TileSpriteArray: + - m_RefCount: 34 + m_Data: {fileID: 21300000, guid: bd114e2f7df4b42a3b13cd40db799fc8, type: 3} + m_TileMatrixArray: + - m_RefCount: 34 + m_Data: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_TileColorArray: + - m_RefCount: 34 + m_Data: {r: 1, g: 1, b: 1, a: 1} + m_TileObjectToInstantiateArray: [] + m_AnimationFrameRate: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Origin: {x: -1, y: -2, z: 0} + m_Size: {x: 7, y: 10, z: 1} + m_TileAnchor: {x: 0.5, y: 0.5, z: 0} + m_TileOrientation: 0 + m_TileOrientationMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 +--- !u!483693784 &2817994186257587065 +TilemapRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2259847937022306430} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + 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_ChunkSize: {x: 32, y: 32, z: 32} + m_ChunkCullingBounds: {x: 0.0009765625, y: 0.2492969, z: 0} + m_MaxChunkCount: 16 + m_MaxFrameAge: 16 + m_SortOrder: 3 + m_Mode: 1 + m_DetectChunkCullingBounds: 0 + m_MaskInteraction: 0 +--- !u!1 &3331875946433896379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8602795678518186784} + - component: {fileID: 5346098299145066350} + - component: {fileID: 7780568001807741331} + m_Layer: 0 + m_Name: Border + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8602795678518186784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2898016089667496094} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1839735485 &5346098299145066350 +Tilemap: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + m_Enabled: 1 + m_Tiles: + - first: {x: -9, y: -22, z: 0} + second: + serializedVersion: 2 + m_TileIndex: 1 + m_TileSpriteIndex: 1 + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 + m_AnimatedTiles: {} + m_TileAssetArray: + - m_RefCount: 22 + m_Data: {fileID: 11400000, guid: c4ba7c97e3d29474283a4c87aa927fe3, type: 2} + - m_RefCount: 78 + m_Data: {fileID: 11400000, guid: 9094a20fac3bd42409cbd3099244203d, type: 2} + - m_RefCount: 124 + m_Data: {fileID: 11400000, guid: 7016a7036b066477abe0d150ae55aa83, type: 2} + m_TileSpriteArray: + - m_RefCount: 22 + m_Data: {fileID: 21300000, guid: d3a70cda4c7bc4d60bd25cf11bb9a158, type: 3} + - m_RefCount: 78 + m_Data: {fileID: 21300000, guid: bd114e2f7df4b42a3b13cd40db799fc8, type: 3} + - m_RefCount: 124 + m_Data: {fileID: 21300000, guid: f6c8ef238c4e142aeac514b536a5fc56, type: 3} + m_TileMatrixArray: + - m_RefCount: 224 + m_Data: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_TileColorArray: + - m_RefCount: 224 + m_Data: {r: 1, g: 1, b: 1, a: 1} + m_TileObjectToInstantiateArray: [] + m_AnimationFrameRate: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Origin: {x: -22, y: -22, z: 0} + m_Size: {x: 24, y: 23, z: 1} + m_TileAnchor: {x: 0.5, y: 0.5, z: 0} + m_TileOrientation: 0 + m_TileOrientationMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 +--- !u!483693784 &7780568001807741331 +TilemapRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331875946433896379} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + 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_ChunkSize: {x: 32, y: 32, z: 32} + m_ChunkCullingBounds: {x: 0.0009765625, y: 0.2574414, z: 0} + m_MaxChunkCount: 16 + m_MaxFrameAge: 16 + m_SortOrder: 3 + m_Mode: 1 + m_DetectChunkCullingBounds: 0 + m_MaskInteraction: 0 +--- !u!1 &6718232195078379098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2898016089667496094} + - component: {fileID: 3111389448725951018} + m_Layer: 0 + m_Name: Level51605 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2898016089667496094 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718232195078379098} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8028822463778547818} + - {fileID: 8602795678518186784} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!156049354 &3111389448725951018 +Grid: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718232195078379098} + m_Enabled: 1 + m_CellSize: {x: 1, y: 0.5, z: 1} + m_CellGap: {x: 0, y: 0, z: 0} + m_CellLayout: 3 + m_CellSwizzle: 0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..f2ef93d --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +# 关卡生成流水线 + +这个仓库包含一套从 Excel 数据自动生成 Unity Prefab 与 C# 关卡字典的脚本。核心流程由 `run_pipeline.py` 串联完成。 + +## 环境准备 +- Python 3.9 及以上(在 Windows PowerShell 上测试) +- Excel 源文件(默认 `global.xlsx`)并符合既定的表格结构 +- 依赖库:`pandas`、`openpyxl` + +安装依赖: +```powershell +python -m pip install pandas openpyxl +``` + +## 快速上手 +1. 将 Excel 文件(如 `global.xlsx`)与脚本放在同一目录。 +2. 确认模板 Prefab(默认 `Level80317.prefab`)存在。 +3. 在 PowerShell 中运行: +```powershell +python .\run_pipeline.py --excel global.xlsx --sheet Sheet2 --start-i 80316 +``` + 若不传 `--steps`,脚本会依次执行全部三步(抽取数据 → 生成 C# → 生成 Prefab)。 + 可通过 `--steps 1,2` 指定只运行前两步。 + +### 输出文件 +- `found_*.xlsx`:步骤一扫描得到的坐标数据 +- `generated_levels.cs`:步骤二生成的关卡字典代码 +- `GeneratedPrefabs/LevelXXXX.prefab`:步骤三输出的 Prefab 文件 + +## 三个步骤详解 +- **步骤 1(`read_excel.py`)**: + - 自动补齐 Excel 第一列空白的地图号(从 `--start-i` 指定的值起)。 + - 在 B~AA 列扫描“币”、“p”、“v”等标记,提取坐标并输出成 `found_币.xlsx`、`found_p.xlsx`、`found_v.xlsx`。 + - 识别颜色填充的格子,将绿色写入 `found_方块.xlsx`,蓝色/橙色/粉色分别写入 `found_water.xlsx`、`found_wall.xlsx`、`found_jump.xlsx`。 + +- **步骤 2(`write_code.py`)**: + - 读取步骤一输出的多张 Excel,按地图号分组。 + - 生成 `Spawn` 配置,写入 `generated_levels.cs`。可在命令行通过 `--output-levels` 指定输出文件名。 + +- **步骤 3(`make_prefab.py`)**: + - 以模板 Prefab 为基础,逐个地图替换 `Ground`、`Border` 的 `m_Tiles` 块。 + - 若无对应坐标,自动写成 `m_Tiles: {}`。 + - Prefab 输出到 `GeneratedPrefabs/` 目录。 + +## 脚本内可调参数 +- **`read_excel.py`** + - `columns_to_preview`:控制调试输出中预览的列数,必要时减少日志噪音。 + - `GREEN_COLORS` / `BLUE_COLORS` / `ORANGE_COLORS` / `PINK_COLORS`:决定颜色识别的十六进制值,适配其他调色方案时需更新。 + - `find_cells_with_currency_xlsx()` 的 `search_term` 及 `suffixes`:用于识别不同物件符号,扩展至新标记时修改此处。 + - Excel 列段 `grid_columns`(默认 B~AA):若表格布局变化或列数扩展需同步调整。 +- **`write_code.py`** + - `FILE_P` / `FILE_V` / `FILE_COIN`:输入文件名常量,可在命令行前覆盖或直接修改常量。 + - `LEVEL_PATH`:Prefab 在 Unity 项目的目标路径模板,适配其他资源组织结构时更新。 + - `generate_spawn_line()` 内的 `path` 与 `direction_map`:指定生成的 Prefab 引用与方向映射,新角色或朝向枚举需在此扩展。 + - `boundary` 默认值与 `Spawn` 字段列表:若未来关卡数据结构变化,应相应调整模板字符串。 +- **`make_prefab.py`** + - 顶部 `EXCEL_PATH`、`TEMPLATE_PREFAB`、`OUTPUT_DIR`:分别控制输入表格、Prefab 模板和输出目录。 + - `TILE_LINE` 模板中的 `m_TileIndex` / `m_TileSpriteIndex`:当新的 TileAsset/Sprite 索引出现时需同步修改。 + - `replace_tilemap_by_gameobject_name()` 查找的 GameObject 名称(默认 `Ground`、`Border`):若模板结构不同,调整调用处的名称。 + - Border 层 `tile_index` 分配:当前约定 water=2、wall=0、jump=1,结合实际 Tilemap 资源可重新定义。 + +> **适配新任务**:如果未来 Excel 的 sheet 名称、列布局或颜色含义有变化,请同步更新上述常量/映射,必要时扩展 `read_excel.py` 对应的字段重命名逻辑(`df.rename(...)`)。Prefab 模板层级或 Tilemap 名称变更时,也需更新 `make_prefab.py` 中的搜索关键字与 Tile 生成规则。 + +## 常用参数 +- `--excel`: Excel 文件名。 +- `--sheet`: Sheet 名称。 +- `--start-i`: 填补地图号的起始值。 +- `--template`: Prefab 模板路径。 +- `--steps`: 需要执行的步骤序号(例如 `1,3` 或 `all`)。 +- `--output-levels`: 生成的 C# 文件名。 + +## 常见问题 +- **提示缺少某个库**:再次执行依赖安装命令。 +- **没有生成 Prefab**:确认 `found_方块.xlsx` 存在且列名与脚本对应;模板 Prefab 名称无误。 +- **Tile 未正确替换**:检查模板中 `Ground`、`Border` 的 GameObject 名称以及 `m_Tiles` 的结构是否发生变化。 + +更多命令行参数说明可执行: +```powershell +python .\run_pipeline.py --help +``` diff --git a/detect_filled_cells.py b/detect_filled_cells.py new file mode 100644 index 0000000..521b927 --- /dev/null +++ b/detect_filled_cells.py @@ -0,0 +1,100 @@ +import csv +from openpyxl import load_workbook +from openpyxl.styles import PatternFill + + +def resolve_color_hex_from_colorobj(color): + """Try to resolve an openpyxl Color object to ARGB hex string. + Returns None if cannot resolve. + """ + if color is None: + return None + + # direct rgb (may be 'FF00B050' or '00B050') + rgb = getattr(color, "rgb", None) + if rgb: + s = str(rgb) + if len(s) == 6: + s = "FF" + s + return s.upper() + + # try indexed (some workbooks may use indexed colors) + idx = getattr(color, "indexed", None) or getattr(color, "index", None) + if idx is not None: + try: + # openpyxl does not always expose a global list here; fallback to None + return f"INDEXED{int(idx)}" + except Exception: + pass + + theme = getattr(color, "theme", None) + if theme is not None: + try: + return f"THEME{int(theme)}" + except Exception: + return str(theme) + + return None + + +def detect_colored_cells(xlsx_path, sheet_name=None, write_csv=None): + """Detect cells with fills (pattern fills) and return list of dicts: + [{'coordinate':'A1','row':1,'col':1,'value':..., 'color': 'FF00B050', 'fill_type': 'solid'}] + + If write_csv is provided (path), write the results to that CSV. + """ + wb = load_workbook(xlsx_path, data_only=False) + ws = wb[sheet_name] if sheet_name else wb.active + + results = [] + min_row = ws.min_row or 1 + max_row = ws.max_row or 1 + min_col = ws.min_column or 1 + max_col = ws.max_column or 1 + + for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col): + for cell in row: + fill = cell.fill + if fill is None: + continue + # patternType for PatternFill is fill.fill_type or fill.patternType depending on openpyxl version + pattern = getattr(fill, "patternType", None) or getattr(fill, "fill_type", None) + if pattern in (None, 'none'): + continue + + fg = getattr(fill, 'fgColor', None) or getattr(fill, 'start_color', None) or getattr(fill, 'bgColor', None) + color = resolve_color_hex_from_colorobj(fg) + if color is None or color.startswith("FF") is False: + continue + + results.append({ + 'coordinate': cell.coordinate, + 'row': cell.row, + 'col': cell.column, + 'value': cell.value, + 'color': color, + 'fill_type': pattern, + }) + + if write_csv: + keys = ['coordinate', 'row', 'col', 'value', 'color', 'fill_type'] + with open(write_csv, 'w', newline='', encoding='utf-8') as f: + writer = csv.DictWriter(f, fieldnames=keys) + writer.writeheader() + for r in results: + writer.writerow(r) + + return results + + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--xlsx', '-x', required=True, help='Path to xlsx file') + parser.add_argument('--sheet', '-s', default=None, help='Sheet name (optional)') + parser.add_argument('--csv', '-c', default=None, help='Write results to CSV') + args = parser.parse_args() + + res = detect_colored_cells(args.xlsx, sheet_name=args.sheet, write_csv=args.csv) + for r in res: + print(r) diff --git a/generated_levels.cs b/generated_levels.cs new file mode 100644 index 0000000..c05bc6d --- /dev/null +++ b/generated_levels.cs @@ -0,0 +1,543 @@ +using System; +using System.Collections.Generic; +using Platformer.Controller; +using UnityEngine; +using static Platformer.Manager.GameManager; + +namespace Platformer.Core +{ + public class Levels90001 + { + public Dictionary Levels = new Dictionary() + { + + // 关卡 90091 + { 90091,new Level(){LevelID = 90091,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(3,3,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90091 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-4,3,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90091 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,3,z (Map 90091) + new Spawn(){position = new Vector3Int(-3,-6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,-6,z (Map 90091) + new Spawn(){position = new Vector3Int(0,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,-4,z (Map 90091) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90091.prefab"}}, + + // 关卡 90092 + { 90092,new Level(){LevelID = 90092,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,-4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90092 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-1,-3,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.South}, // Map 90092 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-4,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-4,2,z (Map 90092) + new Spawn(){position = new Vector3Int(3,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,6,z (Map 90092) + new Spawn(){position = new Vector3Int(4,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,2,z (Map 90092) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90092.prefab"}}, + + // 关卡 90093 + { 90093,new Level(){LevelID = 90093,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-7,6,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90093 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-7,5,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.North}, // Map 90093 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-7,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-7,-3,z (Map 90093) + new Spawn(){position = new Vector3Int(6,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置6,-3,z (Map 90093) + new Spawn(){position = new Vector3Int(7,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置7,3,z (Map 90093) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90093.prefab"}}, + + // 关卡 90094 + { 90094,new Level(){LevelID = 90094,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,2,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90094 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(3,-7,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90094 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,-4,z (Map 90094) + new Spawn(){position = new Vector3Int(0,-7,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,-7,z (Map 90094) + new Spawn(){position = new Vector3Int(3,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,-4,z (Map 90094) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90094.prefab"}}, + + // 关卡 90095 + { 90095,new Level(){LevelID = 90095,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-3,2,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90095 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-2,2,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90095 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-1,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,6,z (Map 90095) + new Spawn(){position = new Vector3Int(2,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,4,z (Map 90095) + new Spawn(){position = new Vector3Int(2,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,-3,z (Map 90095) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90095.prefab"}}, + + // 关卡 90096 + { 90096,new Level(){LevelID = 90096,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-3,-2,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90096 + + // --- Vehicle Spawns --- + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,3,z (Map 90096) + new Spawn(){position = new Vector3Int(-3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,0,z (Map 90096) + new Spawn(){position = new Vector3Int(0,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,4,z (Map 90096) + new Spawn(){position = new Vector3Int(0,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,3,z (Map 90096) + new Spawn(){position = new Vector3Int(0,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,1,z (Map 90096) + new Spawn(){position = new Vector3Int(0,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,0,z (Map 90096) + new Spawn(){position = new Vector3Int(3,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,4,z (Map 90096) + new Spawn(){position = new Vector3Int(3,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,1,z (Map 90096) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90096.prefab"}}, + + // 关卡 90097 + { 90097,new Level(){LevelID = 90097,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,7,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.East}, // Map 90097 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(1,7,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90097 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-4,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-4,-3,z (Map 90097) + new Spawn(){position = new Vector3Int(0,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,-3,z (Map 90097) + new Spawn(){position = new Vector3Int(4,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,-3,z (Map 90097) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90097.prefab"}}, + + // 关卡 90098 + { 90098,new Level(){LevelID = 90098,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-3,-2,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.East}, // Map 90098 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-3,1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.South}, // Map 90098 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(0,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,6,z (Map 90098) + new Spawn(){position = new Vector3Int(3,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,4,z (Map 90098) + new Spawn(){position = new Vector3Int(3,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,2,z (Map 90098) + new Spawn(){position = new Vector3Int(3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,0,z (Map 90098) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90098.prefab"}}, + + // 关卡 90099 + { 90099,new Level(){LevelID = 90099,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,-4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90099 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-5,3,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.South}, // Map 90099 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,4,z (Map 90099) + new Spawn(){position = new Vector3Int(-1,7,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,7,z (Map 90099) + new Spawn(){position = new Vector3Int(1,7,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,7,z (Map 90099) + new Spawn(){position = new Vector3Int(3,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,4,z (Map 90099) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90099.prefab"}}, + + // 关卡 90100 + { 90100,new Level(){LevelID = 90100,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(3,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.North}, // Map 90100 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(2,2,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.North}, // Map 90100 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,7,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,7,z (Map 90100) + new Spawn(){position = new Vector3Int(-3,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,4,z (Map 90100) + new Spawn(){position = new Vector3Int(2,8,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,8,z (Map 90100) + new Spawn(){position = new Vector3Int(2,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,6,z (Map 90100) + new Spawn(){position = new Vector3Int(2,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,4,z (Map 90100) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90100.prefab"}}, + + // 关卡 90101 + { 90101,new Level(){LevelID = 90101,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(1,-5,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90101 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-1,1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90101 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,3,z (Map 90101) + new Spawn(){position = new Vector3Int(1,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,4,z (Map 90101) + new Spawn(){position = new Vector3Int(1,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,2,z (Map 90101) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90101.prefab"}}, + + // 关卡 90102 + { 90102,new Level(){LevelID = 90102,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90102 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-6,0,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90102 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-6,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-6,1,z (Map 90102) + new Spawn(){position = new Vector3Int(0,-6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,-6,z (Map 90102) + new Spawn(){position = new Vector3Int(6,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置6,1,z (Map 90102) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90102.prefab"}}, + + // 关卡 90103 + { 90103,new Level(){LevelID = 90103,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90103 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-4,8,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90103 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-4,7,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-4,7,z (Map 90103) + new Spawn(){position = new Vector3Int(1,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,2,z (Map 90103) + new Spawn(){position = new Vector3Int(2,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,6,z (Map 90103) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90103.prefab"}}, + + // 关卡 90104 + { 90104,new Level(){LevelID = 90104,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-2,6,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90104 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-1,3,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90104 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-2,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-2,3,z (Map 90104) + new Spawn(){position = new Vector3Int(3,-2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,-2,z (Map 90104) + new Spawn(){position = new Vector3Int(5,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,-4,z (Map 90104) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90104.prefab"}}, + + // 关卡 90105 + { 90105,new Level(){LevelID = 90105,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,6,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90105 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-3,5,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90105 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,1,z (Map 90105) + new Spawn(){position = new Vector3Int(0,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,6,z (Map 90105) + new Spawn(){position = new Vector3Int(0,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,-3,z (Map 90105) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90105.prefab"}}, + + // 关卡 90106 + { 90106,new Level(){LevelID = 90106,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-8,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90106 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-4,1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.South}, // Map 90106 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-5,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-5,1,z (Map 90106) + new Spawn(){position = new Vector3Int(-4,5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-4,5,z (Map 90106) + new Spawn(){position = new Vector3Int(-1,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,1,z (Map 90106) + new Spawn(){position = new Vector3Int(1,5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,5,z (Map 90106) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90106.prefab"}}, + + // 关卡 90107 + { 90107,new Level(){LevelID = 90107,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-2,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90107 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(6,0,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90107 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(1,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,1,z (Map 90107) + new Spawn(){position = new Vector3Int(5,-1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,-1,z (Map 90107) + new Spawn(){position = new Vector3Int(5,-5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,-5,z (Map 90107) + new Spawn(){position = new Vector3Int(6,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置6,1,z (Map 90107) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90107.prefab"}}, + + // 关卡 90108 + { 90108,new Level(){LevelID = 90108,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90108 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(4,-1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90108 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(0,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置0,1,z (Map 90108) + new Spawn(){position = new Vector3Int(2,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,-4,z (Map 90108) + new Spawn(){position = new Vector3Int(3,-6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,-6,z (Map 90108) + new Spawn(){position = new Vector3Int(4,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,0,z (Map 90108) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90108.prefab"}}, + + // 关卡 90109 + { 90109,new Level(){LevelID = 90109,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,-5,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90109 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(3,0,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90109 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-2,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-2,0,z (Map 90109) + new Spawn(){position = new Vector3Int(2,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置2,3,z (Map 90109) + new Spawn(){position = new Vector3Int(4,5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,5,z (Map 90109) + new Spawn(){position = new Vector3Int(4,-5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,-5,z (Map 90109) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90109.prefab"}}, + + // 关卡 90110 + { 90110,new Level(){LevelID = 90110,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(2,-4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.North}, // Map 90110 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(3,1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90110 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,6,z (Map 90110) + new Spawn(){position = new Vector3Int(-3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,0,z (Map 90110) + new Spawn(){position = new Vector3Int(-3,-1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,-1,z (Map 90110) + new Spawn(){position = new Vector3Int(3,6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,6,z (Map 90110) + new Spawn(){position = new Vector3Int(3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,0,z (Map 90110) + new Spawn(){position = new Vector3Int(3,-1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,-1,z (Map 90110) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90110.prefab"}}, + + // 关卡 90111 + { 90111,new Level(){LevelID = 90111,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90111 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-4,-2,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.North}, // Map 90111 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(1,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,2,z (Map 90111) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90111.prefab"}}, + + // 关卡 90112 + { 90112,new Level(){LevelID = 90112,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-3,3,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90112 + + // --- Vehicle Spawns --- + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-1,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,1,z (Map 90112) + new Spawn(){position = new Vector3Int(1,-1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,-1,z (Map 90112) + new Spawn(){position = new Vector3Int(3,-3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,-3,z (Map 90112) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90112.prefab"}}, + + // 关卡 90113 + { 90113,new Level(){LevelID = 90113,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(4,4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.South}, // Map 90113 + + // --- Vehicle Spawns --- + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,-4,z (Map 90113) + new Spawn(){position = new Vector3Int(-1,-2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,-2,z (Map 90113) + new Spawn(){position = new Vector3Int(1,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,1,z (Map 90113) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90113.prefab"}}, + + // 关卡 90114 + { 90114,new Level(){LevelID = 90114,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-6,2,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90114 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-6,3,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.West}, // Map 90114 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-6,-2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-6,-2,z (Map 90114) + new Spawn(){position = new Vector3Int(-2,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-2,3,z (Map 90114) + new Spawn(){position = new Vector3Int(1,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,2,z (Map 90114) + new Spawn(){position = new Vector3Int(3,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,1,z (Map 90114) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90114.prefab"}}, + + // 关卡 90115 + { 90115,new Level(){LevelID = 90115,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-5,0,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90115 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-5,1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.North}, // Map 90115 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,0,z (Map 90115) + new Spawn(){position = new Vector3Int(4,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,0,z (Map 90115) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90115.prefab"}}, + + // 关卡 90116 + { 90116,new Level(){LevelID = 90116,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(6,3,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.West}, // Map 90116 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(6,-7,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90116 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-9,-4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-9,-4,z (Map 90116) + new Spawn(){position = new Vector3Int(-8,-5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-8,-5,z (Map 90116) + new Spawn(){position = new Vector3Int(-7,-6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-7,-6,z (Map 90116) + new Spawn(){position = new Vector3Int(6,-6,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置6,-6,z (Map 90116) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90116.prefab"}}, + + // 关卡 90117 + { 90117,new Level(){LevelID = 90117,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-5,5,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.North}, // Map 90117 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-3,4,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90117 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-3,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-3,2,z (Map 90117) + new Spawn(){position = new Vector3Int(-2,9,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-2,9,z (Map 90117) + new Spawn(){position = new Vector3Int(3,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,2,z (Map 90117) + new Spawn(){position = new Vector3Int(5,9,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,9,z (Map 90117) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90117.prefab"}}, + + // 关卡 90118 + { 90118,new Level(){LevelID = 90118,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(2,0,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.East}, // Map 90118 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(2,-1,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90118 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(1,-9,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,-9,z (Map 90118) + new Spawn(){position = new Vector3Int(3,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,1,z (Map 90118) + new Spawn(){position = new Vector3Int(3,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置3,0,z (Map 90118) + new Spawn(){position = new Vector3Int(4,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,2,z (Map 90118) + new Spawn(){position = new Vector3Int(4,1,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,1,z (Map 90118) + new Spawn(){position = new Vector3Int(5,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,3,z (Map 90118) + new Spawn(){position = new Vector3Int(5,2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置5,2,z (Map 90118) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90118.prefab"}}, + + // 关卡 90119 + { 90119,new Level(){LevelID = 90119,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(-4,4,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.North}, // Map 90119 + + // --- Vehicle Spawns --- + new Spawn(){position = new Vector3Int(-4,5,0),path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = Direction.East}, // Map 90119 + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-1,10,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,10,z (Map 90119) + new Spawn(){position = new Vector3Int(-1,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,4,z (Map 90119) + new Spawn(){position = new Vector3Int(4,10,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,10,z (Map 90119) + new Spawn(){position = new Vector3Int(4,4,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,4,z (Map 90119) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90119.prefab"}}, + + // 关卡 90120 + { 90120,new Level(){LevelID = 90120,spawns = new List(){ + + // --- Player Spawns --- + new Spawn(){position = new Vector3Int(0,-1,0),path = "Assets/Prefabs/Player.prefab", playerDirection = Direction.North}, // Map 90120 + + // --- Vehicle Spawns --- + + // --- Coin Spawns --- + new Spawn(){position = new Vector3Int(-4,-2,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-4,-2,z (Map 90120) + new Spawn(){position = new Vector3Int(-1,3,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置-1,3,z (Map 90120) + new Spawn(){position = new Vector3Int(1,-5,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置1,-5,z (Map 90120) + new Spawn(){position = new Vector3Int(4,0,0),path = "Assets/Prefabs/Prop_star.prefab",},//金币位置4,0,z (Map 90120) + }, + boundary = new Vector3Int(20,20,0), // 边界默认值 + levelPath = "Assets/Prefabs/Level/Level90120.prefab"}}, + }; + }; +} \ No newline at end of file diff --git a/global.xlsx b/global.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..767188b35393528bd502eb77dc301cfbbebfd4d2 GIT binary patch literal 209976 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%0DSl0>(6XP@#I(A~{|=deS+v=^MPa1{J4&eBnrcK# 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 L;H{4h&d>h?_Fdqu literal 0 HcmV?d00001 diff --git a/inspect_cells.py b/inspect_cells.py new file mode 100644 index 0000000..d3258f3 --- /dev/null +++ b/inspect_cells.py @@ -0,0 +1,305 @@ +import openpyxl +import sys +try: + from openpyxl.styles.colors import COLOR_INDEX +except Exception: + COLOR_INDEX = [] + +FILE = 'global.xlsx' +SHEET = 'Sheet1' +CELLS = ['P547', 'X458'] + +try: + wb = openpyxl.load_workbook(FILE, data_only=False) +except Exception as e: + print(f"Failed to open {FILE}: {e}") + sys.exit(1) + +if SHEET in wb.sheetnames: + ws = wb[SHEET] +else: + print(f"Sheet '{SHEET}' not found. Available sheets: {wb.sheetnames}. Using active sheet '{wb.active.title}'.") + ws = wb.active + + +def color_info(c): + if c is None: + return None + info = {} + for attr in ('type','rgb','indexed','index','theme','tint','auto'): + try: + info[attr] = getattr(c, attr, None) + except Exception as e: + info[attr] = f"" + # 归一化尝试:把常见的 tuple/list/int/bytes 等 rgb 表示转换为可读字符串 + info['normalized'], info['original_repr'] = normalize_color_value(c) + try: + kind, value = safe_resolve_color(c) + info['resolved'] = {'kind': kind, 'value': value} + except Exception as e: + info['resolved'] = {'error': str(e)} + return info + + +def normalize_color_value(val): + """ + 尝试把颜色对象或多种表示归一化为一个字符串(优先 ARGB hex),并返回 (normalized_str_or_None, original_repr). + 支持: + - openpyxl Color 对象 (会尝试读取 .rgb/.indexed/.index/.theme/.tint) + - str (如 'FF00B050', '#FF00B050', 'rgb(0,176,80)') + - tuple/list of ints (r,g,b) 或 (r,g,b,a) + - int (如 16711680) + - bytes + 任何不能解析的值将返回 (None, repr(val)). + """ + import logging + logger = logging.getLogger(__name__) + + def as_argb_from_rgb_tuple(tpl): + try: + comps = list(tpl) + if len(comps) == 3: + r, g, b = comps + a = 255 + elif len(comps) >= 4: + r, g, b, a = comps[:4] + else: + return None + return "{0:02X}{1:02X}{2:02X}{3:02X}".format(a, r, g, b) + except Exception as e: + logger.debug(f"as_argb_from_rgb_tuple failed: {e} for {tpl}") + return None + + # If it's an openpyxl Color-like object, try attributes first + try: + # guard: if object has .rgb/.indexed etc, prefer those + if hasattr(val, 'rgb') or hasattr(val, 'indexed') or hasattr(val, 'index') or hasattr(val, 'theme'): + # try .rgb + try: + rgb = getattr(val, 'rgb', None) + if rgb: + s = str(rgb) + # strip leading '#' if present + if s.startswith('#'): + s = s[1:] + if len(s) == 6: + s = 'FF' + s + return (s.upper(), repr(rgb)) + except Exception as e: + logger.debug(f"error reading .rgb: {e}") + + # try indexed/index mapping (best-effort) + try: + idx = getattr(val, 'indexed', None) or getattr(val, 'index', None) + if idx is not None: + try: + idx_int = int(idx) + # map using openpyxl COLOR_INDEX if available + if COLOR_INDEX and 0 <= idx_int < len(COLOR_INDEX): + hexv = COLOR_INDEX[idx_int] + if hexv: + hexs = hexv.upper() + if len(hexs) == 6: + hexs = 'FF' + hexs + return (hexs, repr(idx_int)) + return (f'INDEXED_{idx_int}', repr(idx_int)) + except Exception: + return (f'INDEXED_{idx}', repr(idx)) + except Exception as e: + logger.debug(f"error reading .indexed/index: {e}") + + # theme + try: + theme = getattr(val, 'theme', None) + if theme is not None: + return (f'THEME_{theme}', repr(theme)) + except Exception as e: + logger.debug(f"error reading .theme: {e}") + + except Exception: + # not an object we can introspect + pass + + # Primitive types + # str + try: + if isinstance(val, str): + s = val.strip() + if s.startswith('#'): + s = s[1:] + # If it contains 'rgb(' leave as-is + if s.lower().startswith('rgb('): + return (s, repr(val)) + # if hex-like + hexchars = ''.join(ch for ch in s if ch.isalnum()) + if all(c in '0123456789ABCDEFabcdef' for c in hexchars) and len(hexchars) in (6,8): + if len(hexchars) == 6: + hexchars = 'FF' + hexchars + return (hexchars.upper(), repr(val)) + except Exception as e: + logger.debug(f"error normalizing str val: {e}") + + # tuple/list + try: + if isinstance(val, (tuple, list)): + # might be like (r,g,b) or (r,g,b,a) + normalized = as_argb_from_rgb_tuple(val) + if normalized: + return (normalized, repr(val)) + except Exception as e: + logger.debug(f"error normalizing sequence val: {e}") + + # int (maybe packed RGB) + try: + if isinstance(val, int): + v = val & 0xFFFFFFFF + # If it's 24-bit or 32-bit + if v <= 0xFFFFFF: + # assume RGB + r = (v >> 16) & 0xFF + g = (v >> 8) & 0xFF + b = v & 0xFF + a = 255 + else: + a = (v >> 24) & 0xFF + r = (v >> 16) & 0xFF + g = (v >> 8) & 0xFF + b = v & 0xFF + return ("{0:02X}{1:02X}{2:02X}{3:02X}".format(a, r, g, b), repr(val)) + except Exception as e: + logger.debug(f"error normalizing int val: {e}") + + # bytes + try: + if isinstance(val, (bytes, bytearray)): + hexs = val.hex().upper() + if len(hexs) == 6: + hexs = 'FF' + hexs + return (hexs, repr(val)) + except Exception as e: + logger.debug(f"error normalizing bytes val: {e}") + + # fallback: try to stringify, but filter out known library error messages + try: + r = repr(val) + if 'MUST BE OF TYPE' in r.upper() or 'VALUES MUST' in r.upper(): + return (None, r) + return (r, r) + except Exception: + return (None, '') +from openpyxl.styles import colors as _colors + +def safe_resolve_color(fg): + # 返回 (kind, value): + # - ('argb', 'FF00B050') 或 ('indexed', 35) 或 ('theme', 2) 或 (None, None) + try: + if fg is None: + return (None, None) + except Exception: + return (None, None) + + # 1) rgb 字符串 + try: + rgb = getattr(fg, 'rgb', None) + if rgb: + s = str(rgb) + if s.startswith('#'): + s = s[1:] + if len(s) == 6: + s = 'FF' + s + return ('argb', s.upper()) + except Exception: + # 读取 rgb 可能抛异常,记录并继续回退 + pass + + # 2) indexed / index -> 尝试映射到 hex + try: + idx = getattr(fg, 'indexed', None) or getattr(fg, 'index', None) + if idx is not None: + try: + idx_int = int(idx) + # COLOR_INDEX 是 openpyxl 内置的索引颜色表 + hexv = None + try: + hexv = _colors.COLOR_INDEX[idx_int] # e.g. '00FF00' + except Exception: + hexv = None + if hexv: + hexs = hexv.upper() + if len(hexs) == 6: + hexs = 'FF' + hexs + return ('argb', hexs) + else: + return ('indexed', idx_int) + except Exception: + return ('indexed', idx) + except Exception: + pass + + # 3) theme + try: + theme = getattr(fg, 'theme', None) + if theme is not None: + return ('theme', theme) + except Exception: + pass + + return (None, None) +for coord in CELLS: + print(f"--- {coord} ---") + cell = ws[coord] + print('coordinate:', cell.coordinate) + print('row, column:', cell.row, cell.column) + print('value repr:', repr(cell.value)) + print('data_type:', getattr(cell, 'data_type', None)) + print('is_date:', getattr(cell, 'is_date', None)) + print('number_format:', getattr(cell, 'number_format', None)) + print('font:', cell.font) + try: + font_attrs = { 'name': cell.font.name, 'size': cell.font.sz, 'bold': cell.font.bold, 'italic': cell.font.italic, 'color': getattr(cell.font, 'color', None) } + except Exception as e: + font_attrs = {'error': str(e)} + print('font attributes:', font_attrs) + + fill = getattr(cell, 'fill', None) + print('fill obj:', type(fill)) + if fill is not None: + try: + print(' patternType:', getattr(fill, 'patternType', None)) + except Exception as e: + print(' patternType error:', e) + fg = getattr(fill, 'fgColor', None) + bg = getattr(fill, 'bgColor', None) + print(' fgColor:', color_info(fg)) + print(' bgColor:', color_info(bg)) + fg_kind, fg_value = safe_resolve_color(fg) + bg_kind, bg_value = safe_resolve_color(bg) + print(' fgColor resolved:', {'kind': fg_kind, 'value': fg_value}) + print(' bgColor resolved:', {'kind': bg_kind, 'value': bg_value}) + else: + print(' fill is None') + + print('alignment:', cell.alignment) + print('border:', cell.border) + print('protection:', cell.protection) + try: + comment = cell.comment.text if cell.comment else None + except Exception as e: + comment = f'' + print('comment:', comment) + try: + hyperlink = cell.hyperlink.target if cell.hyperlink else None + except Exception as e: + hyperlink = f'' + print('hyperlink:', hyperlink) + + # raw repr of the cell object's __dict__ if available + try: + d = {k: repr(v) for k,v in cell.__dict__.items()} + print('cell.__dict__ keys:', list(cell.__dict__.keys())) + except Exception: + d = None + # don't print full dict to avoid huge output, but show if present + print() + +print('Done') diff --git a/make_prefab.py b/make_prefab.py new file mode 100644 index 0000000..934078d --- /dev/null +++ b/make_prefab.py @@ -0,0 +1,201 @@ +import pandas as pd +from pathlib import Path + +# ============= 配置 ============= + +# Excel 路径 +EXCEL_PATH = "found_方块.xlsx" # 根据你的实际文件名改 + +# 作为模板的 prefab(就是你贴出来那份,包含 Ground / Border / Grid) +TEMPLATE_PREFAB = "Level90093.prefab" # 根据实际文件名改 +OLD_LEVEL_NAME = "Level51605" # 模板 prefab 中的旧关卡名 + +# 输出目录 +OUTPUT_DIR = Path("GeneratedPrefabs") +OUTPUT_DIR.mkdir(exist_ok=True) + +# ============= Tile 行模板 ============= + +# 使用 Ground 里那种 tile(m_TileIndex = 0, m_TileSpriteIndex = 0) +# 注意:花括号 {{ }} 是为了在 format 之后输出字面上的 { } +TILE_LINE = """ - first: {{x: {x}, y: {y}, z: 0}} + second: + serializedVersion: 2 + m_TileIndex: {tile_index} + m_TileSpriteIndex: {sprite_index} + m_TileMatrixIndex: 0 + m_TileColorIndex: 0 + m_TileObjectToInstantiateIndex: 65535 + dummyAlignment: 0 + m_AllTileFlags: 1073741825 +""" + +# ============= 工具函数 ============= + +def load_template_text() -> str: + """读取整份 prefab 模板文本""" + return Path(TEMPLATE_PREFAB).read_text(encoding="utf-8") + + +def replace_level_name(text: str, map_no) -> str: + """ + 把根节点名字从 Level80317 改为 Level{map_no} + (只替换这一行) + """ + # 注意:只替换一次,避免误伤别的地方 + old = f"m_Name: {OLD_LEVEL_NAME}" + new = f"m_Name: Level{int(map_no)}" + return text.replace(old, new, 1) + + +def generate_tiles_block(coords): + """ + 根据坐标列表生成 m_Tiles: 区块(只包含 m_Tiles 本身,不包括 m_AnimatedTiles 之后的内容) + coords: [(x, y, tile_index, sprite_index), ...] + """ + block = " m_Tiles:\n" + for item in coords: + if len(item) == 2: + x, y = item + tile_index = 0 + sprite_index = 0 + else: + x, y, tile_index, sprite_index = item + block += TILE_LINE.format(x=int(x), y=int(y), tile_index=int(tile_index), sprite_index=int(sprite_index)) + return block + + +def replace_ground_tiles(text: str, coords) -> str: + """ + 只修改 Ground Tilemap 的 m_Tiles: 列表 + Border 的 m_Tiles: {} 不动 + """ + # 找到第一个 m_Tiles:(就是 Ground 的) + # 本函数保持向后兼容性:如果模板中有多个 Tilemap,默认替换第一个 m_Tiles 区块(通常是 Ground) + pos = text.find(" m_Tiles:") + if pos == -1: + raise RuntimeError("在模板 prefab 中找不到 'm_Tiles:'。") + + pos2 = text.find(" m_AnimatedTiles:", pos) + if pos2 == -1: + raise RuntimeError("在模板 prefab 中找不到 'm_AnimatedTiles:' 用来截断。") + + before = text[:pos] + after = text[pos2:] + tiles_block = generate_tiles_block(coords) + return before + tiles_block + after + + +def replace_tilemap_by_gameobject_name(text: str, gameobject_name: str, tiles_coords) -> str: + """ + 根据 GameObject 名称(m_Name)找到紧随其后的第一个 m_Tiles: 块并替换内容。 + tiles_coords: list of (x,y,tile_index,sprite_index) 或 (x,y) + """ + lower_text = text.lower() + target_name = f"m_name: {gameobject_name.lower()}" + name_pos = lower_text.find(target_name) + if name_pos == -1: + raise RuntimeError(f"在 prefab 中找不到 GameObject 名称: {gameobject_name}") + + tiles_pos = lower_text.find(" m_tiles:", name_pos) + if tiles_pos == -1: + raise RuntimeError(f"在 prefab 中找不到 {gameobject_name} 对应的 m_Tiles: 区块") + + animated_pos = lower_text.find(" m_animatedtiles:", tiles_pos) + if animated_pos == -1: + raise RuntimeError("找不到 m_AnimatedTiles 来截断。") + + before = text[:tiles_pos] + after = text[animated_pos:] + + if tiles_coords: + new_tiles_block = generate_tiles_block(tiles_coords) + else: + new_tiles_block = " m_Tiles: {}\n" + + return before + new_tiles_block + after + + +# ============= 主逻辑 ============= + +def main(): + # 读取 Excel + df = pd.read_excel(EXCEL_PATH) + + # 根据你的表头改名(如果不完全一样,请把左边字符串改成实际表头) + df = df.rename(columns={ + "地图号 (Map No)": "map", + "X坐标 (X No)": "x", + "Y坐标 (Y No)": "y", + }) + + template_text = load_template_text() + + # 尝试读取 border 相关的 found 文件(可选) + water_df = None + wall_df = None + jump_df = None + if Path("found_water.xlsx").exists(): + water_df = pd.read_excel("found_water.xlsx") + water_df = water_df.rename(columns={"地图号 (Map No)": "map", "X坐标 (X No)": "x", "Y坐标 (Y No)": "y"}) + if Path("found_wall.xlsx").exists(): + wall_df = pd.read_excel("found_wall.xlsx") + wall_df = wall_df.rename(columns={"地图号 (Map No)": "map", "X坐标 (X No)": "x", "Y坐标 (Y No)": "y"}) + if Path("found_jump.xlsx").exists(): + jump_df = pd.read_excel("found_jump.xlsx") + jump_df = jump_df.rename(columns={"地图号 (Map No)": "map", "X坐标 (X No)": "x", "Y坐标 (Y No)": "y"}) + + # 按地图号分组,一个 Map 生成一个 prefab + for map_no, group in df.groupby("map"): + ground_coords = list(zip(group["x"], group["y"])) + + # 1) 换根节点名字 LevelXXXX + text_with_name = replace_level_name(template_text, map_no) + + new_text = text_with_name + + # 2) 用当前地图的坐标替换 Ground 的 m_Tiles 区块 + # 构建 (x,y,tile_index,sprite_index) 列表,Ground 使用索引 0/0(和原模板一致) + ground_tiles = [(int(x), int(y), 0, 0) for x, y in ground_coords] + if ground_tiles: + try: + new_text = replace_tilemap_by_gameobject_name(new_text, "Ground", ground_tiles) + except Exception as e: + # 回退到旧的替换方式 + new_text = replace_ground_tiles(new_text, ground_coords) + + # 3) 对 Border 图层,合并 water/wall/jump(如果存在)并替换 + border_tiles = [] + # water -> m_TileIndex:2, m_TileSpriteIndex:2 + if water_df is not None: + wg = water_df[water_df['map'] == map_no] + border_tiles += [(int(x), int(y), 2, 2) for x, y in zip(wg['x'], wg['y'])] + # wall -> m_TileIndex:0, m_TileSpriteIndex:0 + if wall_df is not None: + wg = wall_df[wall_df['map'] == map_no] + border_tiles += [(int(x), int(y), 0, 0) for x, y in zip(wg['x'], wg['y'])] + # jump -> m_TileIndex:1, m_TileSpriteIndex:1 + if jump_df is not None: + wg = jump_df[jump_df['map'] == map_no] + border_tiles += [(int(x), int(y), 1, 1) for x, y in zip(wg['x'], wg['y'])] + + if border_tiles: + try: + new_text = replace_tilemap_by_gameobject_name(new_text, "Border", border_tiles) + except Exception as e: + print(f"警告:替换 Border 时出错: {e}") + else: + # 没有 border 坐标,清空 Border 图层 + try: + new_text = replace_tilemap_by_gameobject_name(new_text, "Border", []) + except Exception as e: + print(f"警告:清空 Border 时出错: {e}") + + # 4) 写出新 prefab + out_path = OUTPUT_DIR / f"Level{int(map_no)}.prefab" + out_path.write_text(new_text, encoding="utf-8") + + print(f"生成 {out_path} ,共 Ground {len(ground_tiles)} 个 tile,Border {len(border_tiles)} 个 tile") + +if __name__ == "__main__": + main() diff --git a/read_excel.py b/read_excel.py new file mode 100644 index 0000000..a1b47c4 --- /dev/null +++ b/read_excel.py @@ -0,0 +1,256 @@ +import os +import pandas as pd +from openpyxl import load_workbook + + +def _merge_read_config(config): + defaults = { + "columns_to_preview": 3, + "green_colors": {"FF92D050", "FF00B050"}, + "blue_colors": {"FF00B0F0", "FF0070C0"}, + "orange_colors": {"FFC55B11", "FFC55C10", "FFB45F06"}, + "pink_colors": {"FFEF949F", "FFFF99FF"}, + "log_file": "w.log", + } + if not config: + return defaults + for key, value in config.items(): + if value is not None: + defaults[key] = value + return defaults + + +def _load_map_dataframe(file_path, sheet_name, start_i): + if not os.path.exists(file_path): + print(f"错误:文件未找到,请检查路径。Path: {file_path}") + return None + + try: + df = pd.read_excel(file_path, sheet_name=sheet_name, engine="openpyxl") + except Exception as e: + print(f"读取 XLSX 文件时发生错误: {e}") + if "No module named 'openpyxl'" in str(e): + print("\n请确保您已经安装了 openpyxl 库:pip install openpyxl") + return None + + if len(df.columns) < 2: + print("错误:表格至少需要两列 (地图编号与 Y 坐标)。") + return None + + map_col = df.columns[0] + y_col = df.columns[1] + grid_columns = df.columns[1:27] + + i = start_i + for row in df.itertuples(): + if pd.isna(row[1]): + df.at[row.Index, map_col] = i + else: + i = row[1] + + return df, map_col, y_col, grid_columns + + +def _write_color_output(filename, rows, columns, success_msg, empty_msg): + if os.path.exists(filename): + os.remove(filename) + if rows: + pd.DataFrame(rows, columns=columns).to_excel(filename, index=False) + print(success_msg) + else: + print(empty_msg) + + +def find_cells_with_currency_xlsx(file_path, sheet_name="Sheet1", start_i=90091, search_term="币", config=None): + """ + 读取 XLSX 文件,查找包含指定词语(默认为“币”)的单元格, + 并返回这些单元格的 (地图号, X, Y[, 方向]),结果同时保存为 found_xxx.xlsx。 + """ + print(f"--- 正在处理文件: {os.path.basename(file_path)} ---") + + df_info = _load_map_dataframe(file_path, sheet_name, start_i) + if df_info is None: + return [] + + cfg = _merge_read_config(config) + + df, map_col, y_col, grid_columns = df_info + results = [] + + # 2. 遍历 B~AA 每一列,在地图区域里搜索 币 / p / v + for column in grid_columns: + column_series = df[column].astype(str).fillna("") + + if search_term in ["p", "v"]: + # p/v 支持后缀方向 + suffixes = ["W", "S", "N", "E", "w", "s", "n", "e"] + search_terms = [search_term] + [search_term + s for s in suffixes] + matching_rows = column_series.apply( + lambda x: any(term in x for term in search_terms) + ) + else: + search_terms = [search_term] + matching_rows = column_series.str.contains(search_term, regex=False, na=False) + + matching_indices = df[matching_rows].index.tolist() + + if not matching_indices: + continue + + for idx in matching_indices: + # 地图号和坐标:直接从 A、B 列取值 + map_no = df.at[idx, map_col] # A 列 = 地图编号 + y_no = df.at[idx, y_col] # B 列 = Y 坐标 + x_no = column # 列名本身 = X 坐标(-12 ~ 12) + + # 提取方向(只对 p / v 有意义) + direction = "" + if search_term in ["p", "v"]: + cell_text = str(df.loc[idx, column]) + direction = cell_text[len(search_term):] if len(cell_text) > len(search_term) else "" + + if search_term in ["p", "v"]: + results.append((map_no, x_no, y_no, direction)) + else: + results.append((map_no, x_no, y_no)) + + # 4. 保存币 / p / v 结果到 Excel + output_file = f"found_{search_term}.xlsx" + if search_term in ["p", "v"]: + results_df = pd.DataFrame( + results, + columns=["地图号 (Map No)", "X坐标 (X No)", "Y坐标 (Y No)", "方向 (Direction)"] + ) + else: + results_df = pd.DataFrame( + results, + columns=["地图号 (Map No)", "X坐标 (X No)", "Y坐标 (Y No)"] + ) + + results_df.to_excel(output_file, index=False) + print(f"\n🔖 已将结果保存到文件: {output_file}") + + return results + + +def scan_color_blocks(file_path, sheet_name="Sheet1", start_i=90091, config=None): + """扫描地图区域内的颜色格子,并把结果写入对应的 Excel 文件。""" + + print("\n开始扫描颜色图案格子…") + + df_info = _load_map_dataframe(file_path, sheet_name, start_i) + if df_info is None: + return {} + + cfg = _merge_read_config(config) + + df, map_col, y_col, grid_columns = df_info + + try: + wb = load_workbook(file_path, data_only=True) + except Exception as e: + print(f"读取 XLSX 文件时发生错误: {e}") + return {} + + try: + ws = wb[sheet_name] + except KeyError: + active_sheet = wb.active + print(f"未找到工作表 {sheet_name},使用活动表 {active_sheet.title}。") + ws = active_sheet + + block_results = [] + water_results = [] + wall_results = [] + jump_results = [] + + excel_row_offset = 2 # DataFrame 行索引 0 对应 Excel 的第 2 行 + + import logging + + logging.basicConfig(filename=cfg["log_file"], level=logging.INFO) + log = logging.getLogger(__name__) + + for idx in df.index: + map_no = df.at[idx, map_col] + y_val = df.at[idx, y_col] + + try: + y_int = int(y_val) + except (TypeError, ValueError): + continue + + if y_int < -12 or y_int > 12: + continue + + excel_row = idx + excel_row_offset + + for col in grid_columns[1:]: # 从 C 列开始(跳过 Y 轴列) + col_idx = df.columns.get_loc(col) + 1 # openpyxl 的列号从 1 开始 + cell = ws.cell(row=excel_row, column=col_idx) + fill = cell.fill + + if fill is None or fill.patternType in (None, "none"): + continue + + fg = fill.fgColor + rgb = getattr(fg, "rgb", None) + index = getattr(fg, "index", None) + color_code = rgb or index + + if color_code is None: + continue + + c = str(color_code).upper() + if c.startswith("FF"): + log.info("Cell at Row %s, Column %s has color code: %s", excel_row, col_idx, c) + + if c in cfg["green_colors"]: + block_results.append((map_no, col, y_val)) + if c in cfg["blue_colors"]: + water_results.append((map_no, col, y_val)) + if c in cfg["orange_colors"]: + wall_results.append((map_no, col, y_val)) + if c in cfg["pink_colors"]: + jump_results.append((map_no, col, y_val)) + + columns = ["地图号 (Map No)", "X坐标 (X No)", "Y坐标 (Y No)"] + + _write_color_output( + "found_方块.xlsx", + block_results, + columns, + "🔖 已将所有绿色图案格子的坐标保存到文件: found_方块.xlsx", + "未发现任何绿色图案格子。", + ) + + _write_color_output( + "found_water.xlsx", + water_results, + columns, + "🔖 已将蓝色 (water) 格子保存到文件: found_water.xlsx", + "未发现蓝色 (water) 格子。", + ) + + _write_color_output( + "found_wall.xlsx", + wall_results, + columns, + "🔖 已将橙色 (wall) 格子保存到文件: found_wall.xlsx", + "未发现橙色 (wall) 格子。", + ) + + _write_color_output( + "found_jump.xlsx", + jump_results, + columns, + "🔖 已将粉色 (jump) 格子保存到文件: found_jump.xlsx", + "未发现粉色 (jump) 格子。", + ) + + return { + "block": block_results, + "water": water_results, + "wall": wall_results, + "jump": jump_results, + } diff --git a/run_pipeline.py b/run_pipeline.py new file mode 100644 index 0000000..6ddfb57 --- /dev/null +++ b/run_pipeline.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python3 +""" +run_pipeline.py + +串联三步处理脚本: + 1) 从 Excel 抽取币 / p / v 与绿色方块(使用 read_excel.py 中的函数) + 2) 根据 found_*.xlsx 生成 C# 关卡代码(调用 write_code.py 的 main) + 3) 根据 found_方块.xlsx 生成 prefab(调用 make_prefab.py 的 main) + +用法示例: + python run_pipeline.py --excel global.xlsx --sheet Sheet2 --start-i 80316 + python run_pipeline.py --steps 1,2 # 只执行前两步 + +可配置项:--start-i, --excel, --sheet, --template, --steps + +注意:本脚本会 import 现有模块并调用它们的 main 函数 / 函数。 +请确保安装依赖:openpyxl, pandas +""" + +import argparse +import importlib +import sys +import os +from typing import List + + +def parse_steps(s: str) -> List[int]: + parts = [p.strip() for p in s.split(",") if p.strip()] + steps = [] + for p in parts: + if p.isdigit(): + steps.append(int(p)) + elif p.lower() == "all": + return [1, 2, 3] + return steps + + +def main(): + parser = argparse.ArgumentParser(description="Run pipeline: read_excel -> write_code -> make_prefab") + parser.add_argument("--excel", default="global.xlsx", help="输入 Excel 文件 (默认: global.xlsx)") + parser.add_argument("--sheet", default="Sheet2", help="Excel 的 sheet 名称 (默认: Sheet2)") + parser.add_argument("--start-i", type=int, default=80316, help="A 列地图号的起始值 (默认: 80316)") + parser.add_argument("--template", default="Level90093.prefab", help="prefab 模板文件 (默认: Level90093.prefab)") + parser.add_argument("--steps", default="all", help="要执行的步骤,例如: 1,2,3 或 all (默认: all)") + parser.add_argument("--output-levels", default="generated_levels.cs", help="生成的 C# 文件名 (默认: generated_levels.cs)") + args = parser.parse_args() + + steps = parse_steps(args.steps) + if not steps: + steps = [1, 2, 3] + + # 确保当前工作目录是脚本所在目录(便于相对路径文件读写) + script_dir = os.path.dirname(os.path.abspath(__file__)) + os.chdir(script_dir) + + print("流水线开始,工作目录:", script_dir) + print("将执行步骤:", steps) + + # STEP 1: run read_excel.find_cells_with_currency_xlsx for 币, p, v + if 1 in steps: + print("\n=== 步骤 1: 从 Excel 中抽取 币 / p / v 与绿色方块 ===") + try: + import read_excel + except Exception as e: + print("无法导入 read_excel.py:", e) + sys.exit(1) + + # 调用函数(函数会自己写出 found_币.xlsx / found_p.xlsx / found_v.xlsx / found_方块.xlsx) + found_coin = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="币") + found_p = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="p") + found_v = read_excel.find_cells_with_currency_xlsx(args.excel, sheet_name=args.sheet, start_i=args.start_i, search_term="v") + color_summary = read_excel.scan_color_blocks(args.excel, sheet_name=args.sheet, start_i=args.start_i) + + if color_summary: + block_len = len(color_summary.get("block", [])) + water_len = len(color_summary.get("water", [])) + wall_len = len(color_summary.get("wall", [])) + jump_len = len(color_summary.get("jump", [])) + print( + "步骤1完成:发现 币 {0} / p {1} / v {2} 条目;颜色格子 block {3} / water {4} / wall {5} / jump {6}.".format( + len(found_coin), len(found_p), len(found_v), block_len, water_len, wall_len, jump_len + ) + ) + else: + print(f"步骤1完成:发现 币 {len(found_coin)} / p {len(found_p)} / v {len(found_v)} 条目。") + + # STEP 2: run write_code.py to generate generated_levels.cs + if 2 in steps: + print("\n=== 步骤 2: 使用 found_*.xlsx 生成 C# 关卡文件 ===") + try: + import write_code + except Exception as e: + print("无法导入 write_code.py:", e) + sys.exit(1) + + # 允许覆盖 write_code 中的文件名常量 + write_code.FILE_P = getattr(write_code, 'FILE_P', 'found_p.xlsx') + write_code.FILE_V = getattr(write_code, 'FILE_V', 'found_v.xlsx') + write_code.FILE_COIN = getattr(write_code, 'FILE_COIN', 'found_币.xlsx') + write_code.OUTPUT_FILE = args.output_levels + + # 调用其 main() 来生成文件 + try: + write_code.main() + print(f"步骤2完成:已生成 {args.output_levels}") + except Exception as e: + print("执行 write_code.main() 时出错:", e) + sys.exit(1) + + # STEP 3: run make_prefab.py to generate prefab files + if 3 in steps: + print("\n=== 步骤 3: 使用 found_方块.xlsx 生成 prefab ===") + try: + import make_prefab + except Exception as e: + print("无法导入 make_prefab.py:", e) + sys.exit(1) + + # 覆盖模板与输入 Excel 路径 + make_prefab.EXCEL_PATH = getattr(make_prefab, 'EXCEL_PATH', 'found_方块.xlsx') + make_prefab.TEMPLATE_PREFAB = args.template + + try: + make_prefab.main() + print("步骤3完成:Prefab 已生成到 GeneratedPrefabs/ 目录") + except Exception as e: + print("执行 make_prefab.main() 时出错:", e) + sys.exit(1) + + print("\n流水线全部完成。") + + +if __name__ == '__main__': + main() diff --git a/test_detect_filled_cells.py b/test_detect_filled_cells.py new file mode 100644 index 0000000..d4d0de5 --- /dev/null +++ b/test_detect_filled_cells.py @@ -0,0 +1,53 @@ +import tempfile +import os +from openpyxl import Workbook +from openpyxl.styles import PatternFill + +from detect_filled_cells import detect_colored_cells + + +def create_sample_workbook(path): + wb = Workbook() + ws = wb.active + ws.title = 'Sheet1' + + # A1: solid green with full ARGB + ws['A1'].fill = PatternFill(start_color='FF00B050', end_color='FF00B050', fill_type='solid') + ws['A1'].value = 'block' + + # B2: solid blue with 6-digit rgb (should be treated as FF+rgb) + ws['B2'].fill = PatternFill(start_color='00B0F0', end_color='00B0F0', fill_type='solid') + ws['B2'].value = 'water' + + # C3: no fill + ws['C3'].value = 'empty' + + wb.save(path) + + +def run_test(): + tf = tempfile.NamedTemporaryFile(delete=False, suffix='.xlsx') + tf.close() + try: + create_sample_workbook(tf.name) + print(f"Saved sample workbook to: {tf.name}") + + results = detect_colored_cells(tf.name, sheet_name='Sheet1') + print('Detected colored cells:') + for r in results: + print(r) + + assert any(r['coordinate'] == 'A1' for r in results), 'A1 should be detected' + assert any(r['coordinate'] == 'B2' for r in results), 'B2 should be detected' + assert all(r['coordinate'] != 'C3' for r in results), 'C3 should not be detected' + + print('\nTest passed') + finally: + try: + os.unlink(tf.name) + except Exception: + pass + + +if __name__ == '__main__': + run_test() diff --git a/write_code.py b/write_code.py new file mode 100644 index 0000000..9aae312 --- /dev/null +++ b/write_code.py @@ -0,0 +1,149 @@ +import pandas as pd +import os + +# 确保文件名与您上传的保持一致 +FILE_P = "found_p.xlsx" +FILE_V = "found_v.xlsx" +FILE_COIN = "found_币.xlsx" + +OUTPUT_FILE = "Levels90001.cs" +LEVEL_PATH = "Assets/Prefabs/Level/Level{map_id}.prefab" # 假设 levelPath 随 LevelID 变化 + +# 1. 读取并标准化数据 +def load_data(): + try: + # Player Data + df_p = pd.read_excel(FILE_P) + df_p.columns = ['MapID', 'X', 'Y', 'Direction'] + + # Vehicle Data + df_v = pd.read_excel(FILE_V) + df_v.columns = ['MapID', 'X', 'Y', 'Direction'] + + # Coin Data + df_coin = pd.read_excel(FILE_COIN) + # Coin 文件中没有 Direction 列 + df_coin.columns = ['MapID', 'X', 'Y'] + + return df_p, df_v, df_coin + + except FileNotFoundError as e: + print(f"错误:找不到文件 {e.filename}。请确保所有 CSV 文件与脚本在同一目录下。") + return None, None, None + +# 2. 生成单个 Spawn() 字符串 +def generate_spawn_line(data_row, spawn_type): + map_id = data_row['MapID'] + x, y, z = data_row['X'], data_row['Y'], 0 # Z 坐标固定为 0 + + position_str = f"new Vector3Int({x},{y},{z})" + + if spawn_type == 'player': + direction = data_row['Direction'] + # 将 CSV 中的 N/S/E/W 转换为 C# 枚举 Direction.North/South/East/West + direction_map = {'N': 'Direction.North', 'S': 'Direction.South', 'E': 'Direction.East', 'W': 'Direction.West'} + dir_enum = direction_map.get(direction, 'Direction.North') # 默认值 + return f'new Spawn(){{position = {position_str},path = "Assets/Prefabs/Player.prefab", playerDirection = {dir_enum}}}, // Map {map_id}' + + elif spawn_type == 'vehicle': + direction = data_row['Direction'] + direction_map = {'N': 'Direction.North', 'S': 'Direction.South', 'E': 'Direction.East', 'W': 'Direction.West'} + dir_enum = direction_map.get(direction, 'Direction.North') + return f'new Spawn(){{position = {position_str},path = "Assets/Prefabs/Vehicle.prefab", vehicleDirection = {dir_enum}}}, // Map {map_id}' + + elif spawn_type == 'coin': + # 金币没有方向 + return f'new Spawn(){{position = {position_str},path = "Assets/Prefabs/Prop_star.prefab",}},//金币位置{x},{y},z (Map {map_id})' + +# 3. 生成完整的 C# Level 代码块 +def generate_level_code(map_id, df_p_group, df_v_group, df_coin_group): + + # 构建所有 Spawn 行 + spawn_lines = [] + + # Player Spawns + spawn_lines.append('\n\t\t// --- Player Spawns ---') + for _, row in df_p_group.iterrows(): + spawn_lines.append('\t\t' + generate_spawn_line(row, 'player')) + + # Vehicle Spawns + spawn_lines.append('\n\t\t// --- Vehicle Spawns ---') + for _, row in df_v_group.iterrows(): + spawn_lines.append('\t\t' + generate_spawn_line(row, 'vehicle')) + + # Coin Spawns + spawn_lines.append('\n\t\t// --- Coin Spawns ---') + for _, row in df_coin_group.iterrows(): + spawn_lines.append('\t\t' + generate_spawn_line(row, 'coin')) + + spawns_block = '\n'.join(spawn_lines) + + # 填充模板 + code_template = f""" +\n\t\t// 关卡 {map_id} +\t\t{{ {map_id},new Level(){{LevelID = {map_id},spawns = new List(){{ +{spawns_block} +\t\t}}, +\t\tboundary = new Vector3Int(20,20,0), // 边界默认值 +\t\tlevelPath = "{LEVEL_PATH.format(map_id=map_id)}"}}}},""" + + return code_template + +# 4. 主执行函数 +def main(): + df_p, df_v, df_coin = load_data() + if df_p is None: + return + + # 获取所有唯一的地图号 + all_map_ids = set(df_p['MapID'].unique()) | set(df_v['MapID'].unique()) | set(df_coin['MapID'].unique()) + + all_map_ids = sorted(list(all_map_ids)) # 按顺序生成 + + generated_code = [] + + print(f"发现 {len(all_map_ids)} 个唯一的地图号:{all_map_ids}") + + + for map_id in all_map_ids: + # 按当前 MapID 过滤数据 + p_group = df_p[df_p['MapID'] == map_id] if map_id in df_p['MapID'].values else pd.DataFrame() + v_group = df_v[df_v['MapID'] == map_id] if map_id in df_v['MapID'].values else pd.DataFrame() + coin_group = df_coin[df_coin['MapID'] == map_id] if map_id in df_coin['MapID'].values else pd.DataFrame() + + if not p_group.empty or not v_group.empty or not coin_group.empty: + code_block = generate_level_code(map_id, p_group, v_group, coin_group) + generated_code.append(code_block) + print(f"成功生成关卡 {map_id} 的代码块。") + else: + print(f"警告:地图 {map_id} 在所有文件中均无数据,跳过。") + + + # 将结果写入文件(在循环外,只写一次) + # 把 Levels80212.cs 的第1-10行作为文件头部, 最后3行作为结尾 + header = '''using System; +using System.Collections.Generic; +using Platformer.Controller; +using UnityEngine; +using static Platformer.Manager.GameManager; + +namespace Platformer.Core +{ + public class Levels80001 + { + public Dictionary Levels = new Dictionary() + {''' + footer = ''' + }; + }; +}''' + + with open(OUTPUT_FILE, 'w', encoding='utf-8') as f: + f.write(header) + f.write('\t\t'.join(generated_code)) + f.write(footer) + + print(f"\n--- 所有代码已成功生成并保存到文件:{OUTPUT_FILE} ---") + +if __name__ == "__main__": + main() \ No newline at end of file