|
DefineClass.PrefabContainer = { |
|
__parents = { "InitDone" }, |
|
name = false, |
|
pos = false, |
|
angle = 0, |
|
objs = false |
|
} |
|
|
|
function PrefabContainer:Init() |
|
local err, objs = PlacePrefab(self.name, self.pos, self.angle, nil, { |
|
dont_clamp_objects = true, |
|
ignore_ground_offset = true |
|
}) |
|
assert(not err, err) |
|
self.objs = objs |
|
end |
|
|
|
function PrefabContainer:Done() |
|
DoneObjects(self.objs) |
|
self.objs = false |
|
end |
|
|
|
function PrefabContainer:GetPos() |
|
return self.pos |
|
end |
|
|
|
function PrefabContainer:SetPos(pos) |
|
if pos == self.pos then |
|
return |
|
end |
|
local dp = pos - self.pos |
|
for i, o in ipairs(self.objs) do |
|
o:SetPos(o:GetPos() + dp) |
|
end |
|
self.pos = pos |
|
end |
|
|
|
function PrefabContainer:SetPosRelativeTo(pos, obj) |
|
local relativePos = obj:GetPos() - self.pos |
|
self:SetPos(pos - relativePos) |
|
end |
|
|
|
function PrefabContainer:GetAngle() |
|
return self.angle |
|
end |
|
|
|
function PrefabContainer:SetAngle(angle) |
|
if AngleDiff(angle, self.angle) == 0 then |
|
return |
|
end |
|
RotateObjectsAroundCenter(self.objs, angle - self.angle, self.pos) |
|
self.angle = angle |
|
end |
|
|
|
function PrefabContainer:GetObjectByType(class) |
|
for i, o in ipairs(self.objs) do |
|
if IsKindOf(o, class) then |
|
return o |
|
end |
|
end |
|
return false |
|
end |