/* 文件名:GameWindow.nut 路径:UI/ObjectClass/GameWindow.nut 创建日期:2025-10-18 20:58 文件用途:游戏窗口类 */ class GameWindow extends WindowNode { //窗口名称 WindowName = "undefined"; //是否活动窗口Flag IsActiveFlag = false; //标题高度 TitleH = null; //鼠标相对位置 M_Xpos = null; M_Ypos = null; //移动Flag MoveFlag = false; //是否为独立窗口 IsIndependent = true; //是否为顶层窗口 IsTop = false; function _typeof() { return "GameWindow"; } constructor(WindowName, gX, gY, gWidth, gHeight, gTitleHeight) { base.constructor(); //窗口名字 this.WindowName = WindowName; //宽度 Width = gWidth; //高度 Height = gHeight; //标题高度 TitleH = gTitleHeight; //X坐标 X = gX; //Y坐标 Y = gY; SetPos(X, Y); } function ResetFoucus() { SetVisible(true); //遍历全局窗口数组将自己移除重新添加在末尾 foreach (Index, WindowObj in _SYS_WINDOW_LIST_) { if (WindowObj.WindowName == this.WindowName) { _SYS_WINDOW_LIST_.remove(Index); break; } } _SYS_WINDOW_LIST_.append(this); SetZOrder(_SYS_WINDOW_LIST_.len()); } //关闭窗口 -并没有销毁只是隐藏 function CloseWindow() { this.Visible = false; } //销毁全局UI中的窗口 子窗口只要父窗口被销毁就会被销毁 function DestroyWindow() { this.Visible = false; this.DestroyFlag = true; } function Proc(Dt) { base.Proc(Dt); foreach (Window in Childrens) { if (Window instanceof WindowNode) Window.Proc(Dt); } } //鼠标事件回调 function OnMouseEvent(Type, Data, EventInteractiveFlag) { if (!Visible) return; foreach (Window in Childrens) { if ("OnMouseEvent" in Window) Window.OnMouseEvent(Type, Data,EventInteractiveFlag); } //鼠标移动事件 if (Type == UI_EVENT.MOUSEMOTION) { if (MoveFlag) { //左键拖动 X = B_X - (M_Xpos - Data[0]); Y = B_Y - (M_Ypos - Data[1]); } } //鼠标按下事件 else if (Type == UI_EVENT.MOUSEBUTTONDOWN) { local IMouse = Game_Cursor.GetInstance(); //如果点击事件在窗口内 if (Math.IsIntersectRect(IMouse.MouseX, IMouse.MouseY, 1, 1, X, Y, Width, Height) && !EventInteractiveFlag) { if (IsIndependent) ResetFoucus(); //如果点下去在标题栏 if (Math.IsIntersectRect(IMouse.MouseX, IMouse.MouseY, 1, 1, X, Y, Width, TitleH)) { MoveFlag = true; M_Xpos = IMouse.MouseX; //原始鼠标位置数据 M_Ypos = IMouse.MouseY; B_X = X; //原始窗口位置 B_Y = Y; } } } //鼠标弹起事件 else if (Type == UI_EVENT.MOUSEBUTTONUP) { if (MoveFlag) { MoveFlag = false; M_Xpos = null; M_Ypos = null; B_X = null; B_Y = null; } } } //键盘事件回调 function OnKeyEvent(Type, Data, EventInteractiveFlag) { if (!Visible) return; foreach (Window in Childrens) { if ("OnKeyEvent" in Window) Window.OnKeyEvent(Type, Data); } } }