ro-table/Asstes/Resources/Script/FrameWork/GUI/cell/Astrolabe_LineCell.txt
2025-06-04 05:02:57 +08:00

130 lines
3.7 KiB
Plaintext

Astrolabe_LineCell = class("Astrolabe_LineCell", BaseCell);
Astrolabe_LineCell.Line_Path = ResourcePathHelper.UICell("Astrolabe_line");
Astrolabe_LineCell.Line_Mask_Path = ResourcePathHelper.UICell("Astrolabe_line_mask");
local tempV3_1, tempV3_2 = LuaVector3(), LuaVector3();
local tempRot = LuaQuaternion();
function Astrolabe_LineCell:ctor()
self.gameObject = Game.AssetManager_UI:CreateAstrolabeAsset(self.Line_Path);
self.transform = self.gameObject.transform;
self.transform.localScale = LuaGeometry.Const_V3_one;
self.gameObject:SetActive(false);
self.line = self.gameObject:GetComponent(UISprite);
end
function Astrolabe_LineCell:ReSetPos(p1_x,p1_y,p1_z, p2_x,p2_y,p2_z)
tempV3_1:Set( p1_x,p1_y,p1_z );
tempV3_2:Set( p2_x,p2_y,p2_z );
self.transform.localPosition = tempV3_1;
self.line.width = LuaVector3.Distance(tempV3_1, tempV3_2);
local x,y,z = tempV3_1[1], tempV3_1[2], tempV3_1[3];
tempV3_1:Set(tempV3_2[1] - x, tempV3_2[2] - y, tempV3_2[3] - z);
tempV3_2:Set(1,0,0);
local angle = LuaVector3.Angle(tempV3_2, tempV3_1);
angle = tempV3_1.y > 0 and angle or -angle;
tempV3_1:Set(0, 0, angle);
tempRot.eulerAngles = tempV3_1;
self.transform.localRotation = tempRot;
end
function Astrolabe_LineCell:SetData(point1, point2, priStateMap)
if(point1 and point2)then
self.point1 = point1;
self.point2 = point2;
local p1_state = priStateMap and priStateMap[point1.guid];
local p2_state = priStateMap and priStateMap[point2.guid];
if(p1_state == nil)then
p1_state = point1:GetState();
end
if(p2_state == nil)then
p2_state = point2:GetState();
end
if(p1_state == Astrolabe_PointData_State.On and p2_state == Astrolabe_PointData_State.On)then
self.line.spriteName = "xingpan_line_light";
self.line.height = 22;
else
self.line.spriteName = "xingpan_line_dack";
self.line.height = 12;
end
end
end
function Astrolabe_LineCell:SetSprite(name)
self.line.sprinteName = name;
end
function Astrolabe_LineCell:SetSize(w,h)
if(w)then
self.line.width = w;
end
if(h)then
self.line.height = h;
end
end
local LineMask_SpriteName = {
[1] = "xingpan_line_chongzhi",
[2] = "xingpan_line_jihuo2",
[3] = "xingpan_line_jihuo1",
}
function Astrolabe_LineCell:SetMaskType(type)
if(type and LineMask_SpriteName[type])then
if(self.mask == nil)then
local mask = Game.AssetManager_UI:CreateAstrolabeAsset(self.Line_Mask_Path, self.gameObject.transform);
mask.transform.localPosition = LuaGeometry.Const_V3_zero;
mask.transform.localRotation = LuaGeometry.Const_Qua_identity;
mask.transform.localScale = LuaGeometry.Const_V3_one;
self.mask = mask:GetComponent(UISprite);
self.mask.width = self.line.width;
end
self.mask.spriteName = LineMask_SpriteName[type];
else
self:RemoveMask();
end
end
function Astrolabe_LineCell:RemoveMask()
if(not Slua.IsNull(self.mask) )then
Game.GOLuaPoolManager:AddToAstrolabePool(self.Line_Mask_Path, self.mask.gameObject);
end
self.mask = nil;
end
function Astrolabe_LineCell:OnAdd(parent)
self.transform:SetParent(parent.transform, false);
self.transform.localScale = LuaGeometry.Const_V3_one;
self.gameObject:SetActive(true);
end
function Astrolabe_LineCell:OnRemove()
self.point1 = nil;
self.point2 = nil;
self.gameObject:SetActive(false);
if(not Slua.IsNull(self.mask) )then
Game.GOLuaPoolManager:AddToAstrolabePool(self.Line_Mask_Path, self.mask.gameObject);
end
self.mask = nil;
AstrolabeCellPool.Instance:AddToTempPool(self.gameObject);
end
function Astrolabe_LineCell:OnDestroy()
if(not Slua.IsNull(self.gameObject))then
self.point1 = nil;
self.point2 = nil;
self:RemoveMask();
self.gameObject:SetActive(false);
Game.GOLuaPoolManager:AddToAstrolabePool(self.Line_Path , self.gameObject);
end
end