119 lines
4.0 KiB
Plaintext
119 lines
4.0 KiB
Plaintext
/*
|
|
文件名:TownObject.nut
|
|
路径:User/Object/Map/TownObject.nut
|
|
创建日期:2024-12-24 14:49
|
|
文件用途:城镇对象
|
|
*/
|
|
if (!getroottable().rawin("GlobalTownManager")) {
|
|
GlobalTownManager <- {};
|
|
GlobalTownManager.TownList <- {};
|
|
//全局当前所在城镇地图
|
|
GlobalTownManager.CurrentMap <- 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.CurrentMap) {
|
|
Stage.Removechild(GlobalTownManager.CurrentMap);
|
|
}
|
|
local SariaRoomMap = map[SariaRoomID];
|
|
Stage.Addchild(SariaRoomMap);
|
|
//添加全局
|
|
GlobalTownManager.CurrentMap = 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;
|
|
}
|
|
} |