新增城镇类
This commit is contained in:
parent
123f00c426
commit
fc8c9f4376
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue