using Milimoe.FunGame.Core.Interface.Addons;
namespace Milimoe.FunGame.Core.Library.Common.Addon
{
public abstract class GameMap : IGameMap
{
///
/// 地图名称
///
public abstract string Name { get; }
///
/// 地图描述
///
public abstract string Description { get; }
///
/// 地图版本
///
public abstract string Version { get; }
///
/// 地图作者
///
public abstract string Author { get; }
///
/// 长度
///
public abstract float Length { get; }
///
/// 宽度
///
public abstract float Width { get; }
///
/// 高度
///
public abstract float Height { get; }
///
/// 格子大小
///
public abstract float Size { get; }
///
/// 格子集
///
public Dictionary Grids { get; } = [];
///
/// 使用坐标获取格子,0号格子的坐标是(0, 0),如果你还有高度的话,则是(0, 0, 0)
///
///
///
///
///
public Grid this[float x, float y, float z = 0] => Grids.Values.Where(g => g.X == x && g.Y == y && g.Z == z).FirstOrDefault();
///
/// 使用坐标获取格子,从0号开始
///
///
///
public Grid this[int id] => Grids[id];
///
/// 加载标记
///
private bool IsLoaded = false;
///
/// 加载地图
///
///
///
public bool Load(params object[] objs)
{
if (IsLoaded)
{
return false;
}
// BeforeLoad可以阻止加载此地图
if (BeforeLoad())
{
// 地图加载后,不允许再次加载此地图
IsLoaded = true;
// 生成格子
for (float x = 0; x < Length; x++)
{
for (float y = 0; y < Width; y++)
{
for (float z = 0; z < Height; z++)
{
Grids.Add(Grids.Count, new(Grids.Count, x, y, z));
}
}
}
// 如果加载后需要执行代码,请重写AfterLoad方法
AfterLoad();
}
return IsLoaded;
}
///
/// 加载后需要做的事
///
protected virtual void AfterLoad()
{
// override
}
///
/// 允许返回false来阻止加载此地图
///
///
protected virtual bool BeforeLoad()
{
return true;
}
}
}