DOF/sqr/Core/BaseClass/BaseObject.nut

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);
}
}