LibreGrid - A lightweight, intuitive and open-source grid solution for Roblox

could you please show me your script so i can see what went wrong? thank you :3

Wow finally an open source for grid related stuff, This is going to be useful for the current game I’m working on. Thanks for your contribution!

2 Likes

Is it possible to make a gui version of this? Im trying to make self learning chess

I find that the orientation not being relative to its surface grid, is it supposed to do that?
Or did i do something wrong?

local LibreGrid = require(script.LibreGrid)

local Setup = {
	RaycastParams = nil,
	ForceAlignedOutput = false,
	AllowFaceAlignment = true,
	NormalBased = false,
	WhitelistedNormals = nil,
	RoundingMethod = math.floor,
}


while wait() do
	local block = workspace.Folder.Test
	local Result = LibreGrid:GetCFrameAtMousePosition(
		block,
		1, 
		CFrame.new(block:GetPivot():ToOrientation()), 
		Setup
	)
	workspace.Folder.Test:PivotTo(Result)
end

It’d be helpful if you could provide us information of setting up and possible coding examples and what they do. :heart:
Take your time, this could be a game changer.
image
image

1 Like

this module is focused on 3d, im sorry but i haven’t delved into the math needed to do this in a 2d space!

i can see why this happens. libregrid is rounding the position to the grid. however, the slope would require the block to get a bit off the grid to snap to that surface.

im not sure if i want to keep this behavior or allow parts to stay a bit off to snap to the surface. though, the current behavior facilitates sanity-checking on the server.

also sorry for the delayed response i didn’t see ur post :broken_heart:

1 Like
local function generateblock(usepos, target, isez)
	local block = game.ReplicatedStorage.Files.BlockTypes:FindFirstChild(script.Parent.Properties.Shape.Value):Clone()
	block.Size = script.Parent.Properties.Size.Value
	block.Anchored = true
	block.CanCollide = false
	block.Color = script.Parent.Properties.Color.Value
	block.Material = Enum.Material[script.Parent.Properties.Material.Value]
	block.Transparency = script.Parent.Properties.Transparency.Value
	block.Reflectance = script.Parent.Properties.Reflectance.Value
	block.Name = "PreviewBlock"
	block.Orientation = script.Parent.Properties.Orientation.Value
	highlight.Parent = block
	highlight.Adornee = block
	if isez ~= nil and isez == true then
		highlight.Color3 = Color3.new(0.337255, 0.796078, 0.0352941)
	else
		highlight.Color3 = Color3.new(0.00784314, 0.513725, 0.827451)
	end
	if script.Parent.Properties.Light.Brightness.Value ~= 0 and script.Parent.Properties.Light.Radius.Value ~= 0 then
		local light = Instance.new("PointLight")
		light.Parent = block
		light.Color = script.Parent.Properties.Light.Color.Value
		light.Range = script.Parent.Properties.Light.Radius.Value
		light.Brightness = script.Parent.Properties.Light.Brightness.Value
	end
	if usepos == true then
		local raycastparams = RaycastParams.new()
		raycastparams.FilterDescendantsInstances = {block, game.Players.LocalPlayer.Character}
		raycastparams.FilterType = Enum.RaycastFilterType.Exclude
		block.Position = require(script.Parent.LibreGrid):GetCFrameAtMousePosition(block, 4, CFrame.fromOrientation(
			block.Orientation.X, block.Orientation.Y, block.Orientation.Z), {
			RaycastParams = raycastparams,
			ForceAlignedOutput = false,
			AllowFaceAlignment = true,
			NormalBased = false,
			WhitelistedNormals = nil,
			RoundingMethod = math.floor
		}).Position
		--print(block.Position)
	end
	return block
end

i know this is taking forever :sob:

2 Likes

have you tried using the NormalBased configuration? it allows you to align blocks to each surface better, just like your use case.

sorry again for the late response, i barely have any time rn :sob:

After setting it to true,
image

it still offsets :disappointed_relieved: on the X and Z axis

could you please check if the ground is offset from the grid? that might be why it’s not aligned

I really hoped that LibreGrid would be more based on Relative grid/ voxel as well as working on grid relative to the main part’s orientation. Sadly, this isn’t.

If you happen to be developing a new one please do mention and I’d be happy to know. Although, thanks for the contribution to the community. With libreGrid it’s more suitable for game like Wubby and its inspiration.

while yes, it is offset from the grid, it brings back all the issues that came back when i was using math.round

This might be a dumb question but how would this make it work for grid generation even though this is for client only? (in my opinion i hate client-side)