myspace / CommonLua /Editor /XEditor /XStickToCollisionHelper.lua
sirnii's picture
Upload 1816 files
b6a38d7 verified
raw
history blame
1.47 kB
if const.maxCollidersPerObject == 0 then
return -- TODO: Remove this check when Bacon is deprecated. All new projects should use the new collisions.
end
DefineClass.XStickToCollisionHelper = {
__parents = { "XObjectPlacementHelper" },
InXSelectObjectsTool = true,
Title = "Stick to terrain/collision (F)",
Description = false,
ActionSortKey = "5",
ActionIcon = "CommonAssets/UI/Editor/Tools/StickToTerrain.tga",
ActionShortcut = "F",
UndoOpName = "Stuck %d object(s) to collision",
init_drag_position = false,
init_move_positions = false,
}
function XStickToCollisionHelper:MoveObjects(mouse_pos, objects)
local vMove = GetTerrainCursor() - self.init_drag_position:SetZ(0)
for i, obj in ipairs(objects) do
local pos = (self.init_move_positions[i] + vMove):SetZ(0)
local offset = (self.init_move_positions[i] - self.init_move_positions[1]):SetZ(0)
local eye, cursor = camera.GetEye(), GetTerrainCursor()
local o, closest, normal = IntersectSegmentWithClosestObj(eye + offset, cursor + offset)
if closest and normal and o ~= obj then
obj:SetPos(closest + normal / 4096)
local rotAxis, rotAngle = GetAxisAngle(normal, self.init_orientations[i][1])
rotAxis = Normalize(rotAxis)
obj:SetAxisAngle(ComposeRotation(self.init_orientations[i][1], self.init_orientations[i][2], rotAxis, rotAngle))
else
CollisionAdjustObject(obj, pos, self.init_orientations[i][2])
end
end
Msg("EditorCallback", "EditorCallbackMove", objects)
end