- Implemented EnemyRespawner to manage enemy spawning and respawning within rooms. - Added IRoomLifecycle interface for room activation and dormancy handling. - Created supporting classes and metadata for enemy perception and threat assessment. - Established streaming system components for room state management and transitions. - Added necessary metadata files for new scripts to ensure proper integration with Unity.
89 lines
3.6 KiB
C#
89 lines
3.6 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using UnityEngine;
|
||
using BaseGames.Core.Events;
|
||
|
||
namespace BaseGames.World.Map
|
||
{
|
||
/// <summary>
|
||
/// 单个房间的地图数据 SO(架构 15_MapShopModule §1.1)。
|
||
/// 资产路径: Assets/_Game/Data/Map/Rooms/Room_{RoomId}.asset
|
||
/// </summary>
|
||
[CreateAssetMenu(menuName = "BaseGames/World/Map/RoomData")]
|
||
public class MapRoomDataSO : ScriptableObject
|
||
{
|
||
[Header("基础信息")]
|
||
public string RoomId; // 与场景名一致,如 "Room_Forest_01"
|
||
public string RegionId; // 所属区域,如 "Forest"
|
||
public string DisplayName; // 可选,地图 Tooltip
|
||
|
||
[Header("地图布局(格子坐标,单位:格)")]
|
||
public Vector2Int GridPosition; // 左下角坐标
|
||
public Vector2Int GridSize; // 宽×高(格)
|
||
|
||
[Header("房间轮廓纹理")]
|
||
public Texture2D RoomOutlineTex; // 用于地图 UI 显示房间形状(可空,回退到矩形格子)
|
||
|
||
[Header("出口信息")]
|
||
public RoomExitData[] Exits; // 该房间所有出口定义
|
||
|
||
[Header("特殊标记")]
|
||
public bool IsBossRoom;
|
||
public bool IsSavePoint;
|
||
public bool IsShop;
|
||
public Sprite MapIconOverride; // null = 按 isXxx 自动选择图标
|
||
|
||
[Header("流式加载")]
|
||
[Tooltip("此房间场景资产的预估内存(KB)。\n" +
|
||
"在 Profiler 中测量场景实际内存后填入,供流式管理器执行内存预算检查使用。\n" +
|
||
"建议在关卡内容基本定型后更新此值。0 = 未填写,将跳过内存预算检查。")]
|
||
[Min(0)]
|
||
public int EstimatedMemoryKB;
|
||
}
|
||
|
||
[Serializable]
|
||
public struct RoomExitData
|
||
{
|
||
public string TargetRoomId; // 连接的目标房间 ID
|
||
public Vector2Int ExitGridPos; // 出口在格子地图上的位置
|
||
public ExitDirection Direction; // 出口方向
|
||
|
||
[Tooltip("此出口触发的过渡类型。\n" +
|
||
"Seamless:无缝切换(同区域相邻房间首选);\n" +
|
||
"AtmosphericFade:短暂淡出 + 区域名提示(跨大区域边界首选)。")]
|
||
public TransitionType PreferredTransitionType;
|
||
}
|
||
|
||
public enum ExitDirection { Up, Down, Left, Right }
|
||
|
||
// ─── 全局地图数据库 ──────────────────────────────────────────────────────────
|
||
|
||
/// <summary>
|
||
/// 全局地图数据库 SO(编辑器配置一次;架构 15_MapShopModule §1.1)。
|
||
/// 资产路径: Assets/_Game/Data/Map/MapDatabase.asset
|
||
/// </summary>
|
||
[CreateAssetMenu(menuName = "BaseGames/World/Map/MapDatabase")]
|
||
public class MapDatabaseSO : ScriptableObject
|
||
{
|
||
public MapRoomDataSO[] AllRooms;
|
||
|
||
private Dictionary<string, MapRoomDataSO> _index;
|
||
|
||
/// <summary>运行时快速查找(首次调用时建立索引)。</summary>
|
||
public MapRoomDataSO GetRoom(string roomId)
|
||
{
|
||
if (_index == null)
|
||
{
|
||
if (AllRooms == null) return null;
|
||
_index = AllRooms.Where(r => r != null)
|
||
.ToDictionary(r => r.RoomId);
|
||
}
|
||
_index.TryGetValue(roomId, out var r);
|
||
return r;
|
||
}
|
||
|
||
private void OnDisable() => _index = null; // SO 卸载时清理缓存
|
||
}
|
||
}
|