using System.Collections; using System.Collections.Generic; using System.Diagnostics; using Unity.VisualScripting; using UnityEngine; [CreateAssetMenu(fileName = "HomeMapSO", menuName = "GameData/HomeMap")] public class HomeMapSO : ScriptableObject { public Vector2Int mapSize = new Vector2Int(10, 10); public List gridList = new List(); // enum public enum RoomType { None = 0, PlaceholderRoom = 1, StatueRoom = 2, AreaRoom = 3, CageRoom = 4, SingleRoom = 5, } [System.Serializable] public class GridData // 每个格子的数据 { public Vector2Int position; public bool has_room = false; public int room_id = -1; public RoomType room_type = RoomType.None; } public void m_recv_initialize_map_data() { gridList.Clear(); for (var x = -mapSize.x / 2; x <= mapSize.x / 2; x++) { for (var y = -mapSize.y / 2; y <= mapSize.y / 2; y++) { gridList.Add(new GridData { position = new Vector2Int(x, y), }); } } } // 获取某个位置的数据 private GridData self_get_data_by_position(Vector2Int position) { return gridList.Find(item => item.position == position); } // 通过has_room字段来获取数据 public List m_recv_get_position_by_has_room() { return gridList.FindAll(item => item.has_room).ConvertAll(item => item.position); } // 标记建造点 public void m_recv_create_room(Vector2Int position, RoomType room_type = RoomType.None) { switch (room_type) { case RoomType.None: _self_create_a_room(position, RoomType.None); break; case RoomType.StatueRoom: _self_create_a_room(position, RoomType.StatueRoom); _self_create_a_room(position + new Vector2Int(0, 1), RoomType.PlaceholderRoom); _self_create_a_room(position + new Vector2Int(-1, 1), RoomType.PlaceholderRoom); _self_create_a_room(position + new Vector2Int(-1, 0), RoomType.PlaceholderRoom); break; case RoomType.SingleRoom: _self_create_a_room(position, RoomType.SingleRoom); break; case RoomType.PlaceholderRoom: case RoomType.AreaRoom: case RoomType.CageRoom: default: break; } return; void _self_create_a_room(Vector2Int _position, RoomType _room_type) { GridData grid = self_get_data_by_position(_position); grid.has_room = true; grid.room_type = _room_type; grid.room_id = int.Parse($"{_position.x}{_position.y}"); } } }