From fc8c9f43769f435f98fc635ee6d1c6912ff4e1e1 Mon Sep 17 00:00:00 2001 From: Lenheart <947330670@qq.com> Date: Wed, 25 Dec 2024 11:36:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9F=8E=E9=95=87=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqr/User/Object/Map/TownObject.nut | 118 +++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 sqr/User/Object/Map/TownObject.nut diff --git a/sqr/User/Object/Map/TownObject.nut b/sqr/User/Object/Map/TownObject.nut new file mode 100644 index 0000000..8c6ebad --- /dev/null +++ b/sqr/User/Object/Map/TownObject.nut @@ -0,0 +1,118 @@ +/* +文件名:TownObject.nut +路径:User/Object/Map/TownObject.nut +创建日期:2024-12-24 14:49 +文件用途:城镇对象 +*/ +if (!getroottable().rawin("GlobalTownManager")) { + GlobalTownManager <- {}; + GlobalTownManager.TownList <- {}; + GlobalTownManager.CurrentTown <- null; +} +class Town { + //城镇编号 + TownID = 0; + //数据 + t_data = null; + //地图管理器 + map = null; + //赛丽亚房间编号 + SariaRoomID = 0; + //赛利亚房间进入时的坐标 + SariaRoomPos = null; + + + //初始化城镇数据 + function InitData(Path) { + Path = "town/" + Path; + t_data = ScriptData.GetFileData(Path, function(DataTable, Data) { + //在这里添加一些初始化的默认值 + DataTable.area <- {}; + while (!Data.Eof()) { + local str = Data.Get(); + //进入城镇时的标题动画 + if (str == "[entering title]") { + DataTable.entering_title <- (Data.Get()); + } + //进入城镇时的过场标题图像 + else if (str == "[cutscene image]") { + DataTable.cutscene_image <- {}; + DataTable.cutscene_image.path <- Data.Get().tolower(); + DataTable.cutscene_image.idx <- Data.Get(); + } + //进入城镇的前置副本 + else if (str == "[dungeon what must be cleared]") { + DataTable.dungeon_what_must_be_cleared <- Data.Get(); + } + //城镇区域 + else if (str == "[area]") { + local DataT = {}; + local MapId = Data.Get(); + DataT.path <- Data.Get().tolower(); + DataT.type <- Data.Get(); + //赛利亚房间 + if (DataT.type == "[gate]") { + SariaRoomID = MapId; + SariaRoomPos = { + x = Data.Get(), + y = Data.Get(), + z = 0 + } + } else if (DataT.type == "[dungeon gate]") { + DataT.dungeon_gate <- Data.Get(); + } + DataTable.area[MapId] <- DataT; + } + //城镇名称 + else if (str == "[name]") { + DataTable.name <- (Data.Get()); + } + //城镇可进入最低等级 + else if (str == "[limit level]") { + DataTable.limit_level <- Data.Get(); + } + } + }.bindenv(this)); + t_data.path <- Path; + t_data.dirpath <- Path.slice(0, Path.lastfind("/") + 1); + } + + //构造地图 + function InitMap() { + map = {}; + foreach(pos, info in t_data.area) { + local MapObj = Map("map/" + info.path); + MapObj.m_town = TownID; + MapObj.m_mapId = pos; + map[pos] <- MapObj; + } + } + + //添加角色对象 (注意 这里是第一次上线 或者是使用瞬间移动药剂走的逻辑 因为会默认在赛丽亚房间) + function AddObject(obj, IsPlayer = false) { + //获取当前场景 + local Stage = sq_GetCurrentStage(); + if (GlobalTownManager.CurrentTown) { + Stage.Removechild(GlobalTownManager.CurrentTown); + } + local SariaRoomMap = map[SariaRoomID]; + Stage.Addchild(SariaRoomMap); + //添加全局 + GlobalTownManager.CurrentTown = SariaRoomMap.weakref(); + SariaRoomMap.AddObject(obj, IsPlayer); + obj.SetPosition(SariaRoomPos); + obj.SetAnimation("RestAni"); + } + + constructor(Index) { + TownID = Index; + local TownPath = AssetManager.TownList[Index].Path; + //初始化数据 + InitData(TownPath); + //构造地图 + InitMap(); + + //加入全局 + GlobalTownManager.TownList[Index] <- this; + } +} \ No newline at end of file