268 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			268 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:BaseObject.nut | ||
|  | 路径:BaseClass/BaseObject/BaseObject.nut | ||
|  | 创建日期:2024-05-05	00:18 | ||
|  | 文件用途:基础对象Class | ||
|  | */ | ||
|  | class CL_BaseObject { | ||
|  | 
 | ||
|  |     //父对象 | ||
|  |     Parent = null; | ||
|  |     //子对象数组 | ||
|  |     Children = null; | ||
|  |     //C指针 | ||
|  |     C_Object = null; | ||
|  |     //UpdateCallBack | ||
|  |     UpdateCallBackFunc = null; | ||
|  |     //已存在的时间 | ||
|  |     ExistingTime = 0; | ||
|  |     //自身信息存储Map | ||
|  |     Var = null; | ||
|  |     //销毁状态 | ||
|  |     DestroyFlag = false; | ||
|  | 
 | ||
|  |     constructor(C_Object, ...) { | ||
|  |         Children = {}; | ||
|  |         Var = {}; | ||
|  |         this.C_Object = C_Object; | ||
|  |         //如果是新创建的对象注册销毁析构 | ||
|  |         if (vargv.len() == 0) Register_Destruction(C_Object, this); | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置UpdateCallBack | ||
|  |     function SetUpdateFunc(Func) { | ||
|  |         UpdateCallBackFunc = Func; | ||
|  |     } | ||
|  | 
 | ||
|  |     //被调用 | ||
|  |     function OnUpdate(dt) { | ||
|  |         ExistingTime += dt; | ||
|  | 
 | ||
|  |         //如果CallBack函数存在则调用 | ||
|  |         if (UpdateCallBackFunc) UpdateCallBackFunc(this, dt); | ||
|  | 
 | ||
|  |         //遍历调用所有子对象 | ||
|  |         foreach(Id, Object in Children) { | ||
|  |             //如果子对象正常就执行Update | ||
|  |             if (!Object.DestroyFlag) { | ||
|  |                 Object.OnUpdate(dt); | ||
|  |             } | ||
|  |             //如果子对象的销毁Flag 存在 则移除并销毁 | ||
|  |             else { | ||
|  |                 Removechild(Object); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //鼠标逻辑处理 | ||
|  |     function OnMouseEvent(MouseState, Wheel, MousePos_X, MousePos_Y) { | ||
|  |         //遍历调用所有子对象 | ||
|  |         foreach(Id, Object in Children) { | ||
|  |             Object.OnMouseEvent(MouseState, Wheel, MousePos_X, MousePos_Y); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     //添加子对象 | ||
|  |     function Addchild(Child) { | ||
|  |         Children[Child.GetId()] <- Child; | ||
|  |         Child.Parent = this.weakref(); | ||
|  |         //给自己解引用计数 | ||
|  | 
 | ||
|  |         Child.OnAddchild(this); | ||
|  |         BaseObject_Addchild(this.C_Object, Child.C_Object); | ||
|  |     } | ||
|  |     //移除子对象 | ||
|  |     function Removechild(Child) { | ||
|  |         try { | ||
|  |             delete Children[Child.GetId()]; | ||
|  |         } catch (exception) { | ||
|  | 
 | ||
|  |         } | ||
|  |         Child.Parent = null; | ||
|  |         Child.OnRemove(this); | ||
|  |         BaseObject_Removechild(this.C_Object, Child.C_Object); | ||
|  |     } | ||
|  |     //从父对象移除自己 | ||
|  |     function RemoveSelf() { | ||
|  |         DestroyFlag = true; | ||
|  |     } | ||
|  | 
 | ||
|  |     //被添加 | ||
|  |     function OnAddchild(Parent) { | ||
|  | 
 | ||
|  |     } | ||
|  |     //被移除 | ||
|  |     function OnRemove(Parent) { | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置名字 | ||
|  |     function SetName(name) { | ||
|  |         BaseObject_SetName(this.C_Object, name); | ||
|  |     } | ||
|  |     //获取名字 | ||
|  |     function GetName() { | ||
|  |         return BaseObject_GetName(this.C_Object); | ||
|  |     } | ||
|  |     //获取Id | ||
|  |     function GetId() { | ||
|  |         return BaseObject_GetId(this.C_Object); | ||
|  |     } | ||
|  |     //获取显示状态 | ||
|  |     function IsVisible() { | ||
|  |         return BaseObject_IsVisible(this.C_Object); | ||
|  |     } | ||
|  |     //是否启用级联透明度 | ||
|  |     function IsCascadeOpacityEnabled() { | ||
|  |         return BaseObject_IsCascadeOpacityEnabled(this.C_Object); | ||
|  |     } | ||
|  |     //是否启用事件分发 | ||
|  |     function IsEventDispatchEnabled() { | ||
|  |         return BaseObject_IsEventDispatchEnabled(this.C_Object); | ||
|  |     } | ||
|  |     //获取名称的 Hash 值 | ||
|  |     function GetHashName() { | ||
|  |         return BaseObject_GetHashName(this.C_Object); | ||
|  |     } | ||
|  |     //获取 Z 轴顺序 | ||
|  |     function GetZOrder() { | ||
|  |         return BaseObject_GetZOrder(this.C_Object); | ||
|  |     } | ||
|  |     //获取坐标 | ||
|  |     function GetPosition() { | ||
|  |         return BaseObject_GetPosition(this.C_Object); | ||
|  |     } | ||
|  |     //获取世界坐标 | ||
|  |     function GetWorldPosition() { | ||
|  |         return BaseObject_ConvertToWorld(this.C_Object); | ||
|  |     } | ||
|  |     //获取大小 | ||
|  |     function GetSize() { | ||
|  |         return BaseObject_GetSize(this.C_Object); | ||
|  |     } | ||
|  |     //获取缩放后的大小 | ||
|  |     function GetScaledSize() { | ||
|  |         return BaseObject_GetScaledSize(this.C_Object); | ||
|  |     } | ||
|  |     //获取锚点 | ||
|  |     function GetAnchor() { | ||
|  |         return BaseObject_GetAnchor(this.C_Object); | ||
|  |     } | ||
|  |     //获取透明度 | ||
|  |     function GetOpacity() { | ||
|  |         return BaseObject_GetOpacity(this.C_Object); | ||
|  |     } | ||
|  |     //获取显示透明度 | ||
|  |     function GetDisplayedOpacity() { | ||
|  |         return BaseObject_GetDisplayedOpacity(this.C_Object); | ||
|  |     } | ||
|  |     //获取旋转角度 | ||
|  |     function GetRotation() { | ||
|  |         return BaseObject_GetRotation(this.C_Object); | ||
|  |     } | ||
|  |     //获取缩放比例 | ||
|  |     function GetScale() { | ||
|  |         return BaseObject_GetScale(this.C_Object); | ||
|  |     } | ||
|  |     //获取错切角度 | ||
|  |     function GetSkew() { | ||
|  |         return BaseObject_GetSkew(this.C_Object); | ||
|  |     } | ||
|  |     //获取变换 | ||
|  |     function GetTransform() { | ||
|  |         return BaseObject_GetTransform(this.C_Object); | ||
|  |     } | ||
|  |     //获取父角色 | ||
|  |     function GetParent() { | ||
|  |         return Parent; | ||
|  |     } | ||
|  |     //获取所在舞台 | ||
|  |     function GetStage() { | ||
|  |         return BaseObject_GetStage(this.C_Object); | ||
|  |     } | ||
|  | 
 | ||
|  |     //设置角色是否可见 | ||
|  |     function SetVisible(Value) { | ||
|  |         BaseObject_SetVisible(this.C_Object, Value); | ||
|  |     } | ||
|  |     //设置坐标 | ||
|  |     function SetPosition(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_SetPosition(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_SetPosition(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //移动坐标 | ||
|  |     function MoveTo(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_MoveTo(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_MoveTo(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //移动相对坐标 | ||
|  |     function MoveBy(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_MoveBy(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_MoveBy(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //设置缩放比例 | ||
|  |     function SetScale(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_SetScale(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_SetScale(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //设置错切角度 | ||
|  |     function SetSkew(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_SetSkew(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_SetSkew(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //设置锚点位置 | ||
|  |     function SetAnchor(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_SetAnchor(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_SetAnchor(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //修改大小 | ||
|  |     function SetSize(Value, ...) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_SetSize(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_SetSize(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //设置旋转角度 | ||
|  |     function SetRotation(Value) { | ||
|  |         BaseObject_SetRotation(this.C_Object, Value); | ||
|  |     } | ||
|  |     //设置透明度 | ||
|  |     function SetOpacity(Value) { | ||
|  |         BaseObject_SetOpacity(this.C_Object, Value); | ||
|  |     } | ||
|  |     //启用或禁用级联透明度 | ||
|  |     function SetCascadeOpacityEnabled(Value) { | ||
|  |         BaseObject_SetCascadeOpacityEnabled(this.C_Object, Value); | ||
|  |     } | ||
|  |     //设置 Z 轴顺序 | ||
|  |     function SetZOrder(Value) { | ||
|  |         BaseObject_SetZOrder(this.C_Object, Value); | ||
|  |     } | ||
|  |     //判断点是否在角色内 | ||
|  |     function IsContainsPoint(Value) { | ||
|  |         if (vargv.len() == 0) | ||
|  |             BaseObject_IsContainsPoint(this.C_Object, Value); | ||
|  |         else if (vargv.len() == 1) | ||
|  |             BaseObject_IsContainsPoint(this.C_Object, Value, vargv[0]); | ||
|  |     } | ||
|  |     //设置渲染角色边界 | ||
|  |     function ShowBorder(Value) { | ||
|  |         BaseObject_ShowBorder(this.C_Object, Value); | ||
|  |     } | ||
|  |     //设置渲染角色边界 | ||
|  |     function SetRotate(Duration, Rotation) { | ||
|  |         BaseObject_SetRotate(this.C_Object, Duration, Rotation); | ||
|  |     } | ||
|  | } |