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; } } }