using Fantasy.Entitas;
using Fantasy.Entitas.Interface;

namespace NB.Map;

public class MapManageComponentDestroySystem : DestroySystem<MapManageComponent>
{
    protected override void Destroy(MapManageComponent self)
    {
        foreach (var (_, map) in self.Maps)
        {
            map.Dispose();
        }

        self.Maps.Clear();
    }
}

public class MapManageComponentAwakeSystem : AwakeSystem<MapManageComponent>
{
    protected override void Awake(MapManageComponent self)
    {
        //初始化所有地图
        for (int i = 1; i < 100; i++)
        {
            //初始化100个地图
            var map = MapFactory.Create(self.Scene, i);
            if (map != null)
            {
                self.Add(map);
            }
        }
    }
}

public static class MapManageComponentSystem
{
    #region 增删

    public static void Add(this MapManageComponent self, Map map)
    {
        self.Maps[map.MapId] = map;
    }

    public static bool Remove(this MapManageComponent self, int mapId)
    {
        if (self.Maps.TryGetValue(mapId, out var map))
        {
            map.Dispose();
        }

        return true;
    }

    public static Map? Get(this MapManageComponent self, int mapId)
    {
        return self.Maps.GetValueOrDefault(mapId);
    }

    #endregion
}