Issues with deducting part size

I’m making a rainbow stacking-inspired game and not sure why this is happening.

local function deductSize(part)
    local mainPart = game.workspace.positionedPart
    local mainPartPosition = mainPart.Position

    local PositionX = mainPartPosition.X - part.Size.X

    if part.Position.X ~= mainPart.Position.X then
        mainPart.Size = Vector3.new(PositionX, mainPart.Size.Y, mainPart.Size.Z)
        part.Size = Vector3.new(PositionX, part.Size.Y, part.Size.Z)
    end

    local PositionZ = mainPartPosition.Z - part.Size.Z

    if part.Position.Z ~= mainPart.Position.Z then
        mainPart.Size = Vector3.new(mainPart.Size.X, mainPart.Size.Y, PositionZ)
        part.Size = Vector3.new(part.Size.X, part.Size.Y, PositionZ)
    end
end

https://gyazo.com/09e351be3186f604366ab10cf43645bd

I’m trying to make it deduct the size of the part (and the main part) if they’re are not equal

just exactly like this https://gyazo.com/b9f1c709f76873bd19af1d9898a3e838

MainPart:

The issue is that you’re setting the size to the difference instead of subtracting the difference from the size of the part. This code should fix that:

local function deductSize(part)
	local mainPart = game.workspace.positionedPart
	local mainPartPosition = mainPart.Position

	local PositionX = part.Size.X-math.abs(mainPartPosition.X - part.Size.X)

	if part.Position.X ~= mainPart.Position.X then
		mainPart.Size = Vector3.new(PositionX, mainPart.Size.Y, mainPart.Size.Z)
		part.Size = Vector3.new(PositionX, part.Size.Y, part.Size.Z)
	end

	local PositionZ = part.Size.Z-math.abs(mainPartPosition.Z - part.Size.Z)

	if part.Position.Z ~= mainPart.Position.Z then
		mainPart.Size = Vector3.new(mainPart.Size.X, mainPart.Size.Y, PositionZ)
		part.Size = Vector3.new(part.Size.X, part.Size.Y, PositionZ)
	end
end

Hope this helped! :slight_smile:

Same issue, did I write the script incorrectly or something

I have this script which deducts the size but it’s inaccurate

local function deductSize(part)
    local mainPart = game.workspace.positionedPart
    local mainPartPosition = mainPart.Position

    local positionOffsetX = math.abs(mainPartPosition.X - part.Position.X)
    local positionOffsetZ = math.abs(mainPartPosition.Z - part.Position.Z)

    local sizeOffsetX = math.max(part.Size.X - positionOffsetX, 0)
    local sizeOffsetZ = math.max(part.Size.Z - positionOffsetZ, 0)

    local newSize = Vector3.new(sizeOffsetX, part.Size.Y, sizeOffsetZ)

    mainPart.Size = newSize
    part.Size = newSize
end

Try my code again, I just noticed I accidentally renamed the PositionZ variable to PositionX.