DOF/sqr/User/Object/Object/BaseObject.nut

130 lines
3.3 KiB
Plaintext

/*
文件名:BaseObject.nut
路径:User/Object/Object/BaseObject.nut
创建日期:2024-11-29 10:32
文件用途:
*/
class BaseObject extends Actor {
//所在地图
MySelfMap = null;
//方向
Direction = 1;
//坐标
X = 0;
Y = 0;
Z = 0;
constructor(...) {
local C_Object;
if (vargv.len() == 0) {
C_Object = BaseObject_Create();
} else {
C_Object = vargv[0];
}
base.constructor(C_Object);
//锚点居中
SetAnchor(0.5, 0.5);
}
function SetPositionNoLayer(Value, ...) {
if (vargv.len() == 0) {
X = Value.x;
Y = Value.y;
Z = Value.z;
Value.y = Value.y - Value.z;
base.SetPosition(Value);
} else if (vargv.len() == 2) {
X = Value;
Y = vargv[0];
Z = vargv[1];
base.SetPosition(Value, vargv[0] - vargv[1]);
}
}
//override
function SetPosition(Value, ...) {
if (vargv.len() == 0) {
X = Value.x;
Y = Value.y;
Z = Value.z;
Value.y = Value.y - Value.z;
base.SetPosition(Value);
} else if (vargv.len() == 2) {
X = Value;
Y = vargv[0];
Z = vargv[1];
base.SetPosition(Value, vargv[0] - vargv[1]);
}
SetZOrder(Y);
}
//传入坐标 xyz 的table 或者 单独传 xyz
function MoveTo(Value, ...) {
if (vargv.len() == 0) {
X = Value.x;
Y = Value.y;
Z = Value.z;
Value.y = Value.y - Value.z;
base.MoveTo(Value);
} else if (vargv.len() == 2) {
X = Value;
Y = vargv[0];
Z = vargv[1];
base.MoveTo(Value, vargv[0] - vargv[1]);
}
SetZOrder(Y);
}
//传入坐标 xyz 的table 或者 单独传 xyz
function MoveBy(Value, ...) {
if (vargv.len() == 0) {
//如果在地图中 判断是否可行
if (MySelfMap) {
local pos = MySelfMap.CheckMovableArea(X, Value.x, Y, Value.y);
X += pos.x;
Y += pos.y;
base.MoveBy(pos.x, pos.y - Value.z);
} else {
X += Value.x;
Y += Value.y;
Value.y = Value.y - Value.z;
base.MoveBy(Value);
}
Z += Value.z;
} else if (vargv.len() == 2) {
//如果在地图中 判断是否可行
if (MySelfMap) {
local pos = MySelfMap.CheckMovableArea(X, Value, Y, vargv[0]);
X += pos.x;
Y += pos.y;
base.MoveBy(pos.x, pos.y - vargv[1]);
} else {
X += Value;
Y += vargv[0];
base.MoveBy(Value, vargv[0] - vargv[1]);
}
Z += vargv[1];
}
SetZOrder(Y);
MySelfMap.CheckMovableAreaTransmit(this, X, Y);
}
//设置方向
function SetDirection(D) {
if (D == DIRECTION.RIGHT) {
SetScale(fabs(GetScale().x), GetScale().y);
} else if (D == DIRECTION.LEFT) {
SetScale(-fabs(GetScale().x), GetScale().y);
}
Direction = D;
}
//销毁自身
function DestroySelf() {
RemoveSelf();
}
}