I'm experimenting with CFrame and tried storing a CFrame value to a table. I had struggles with it. How do you do it?
Here's my code and please answer with details. My code is some kind of detection. I think detection of which if a part went out of a certain area it will turn red, otherwise green.
BrickMode = true -- Just some kind of mode to find it using parts. I need to make invisible points without depending on bricks. Just CFrame points.
model = nil
axis = 1
neg = 0
if BrickMode == true then
if workspace:FindFirstChild('SurfaceDetectionPoints') then
model = workspace.SurfaceDetectionPoints
else
Instance.new("Model",workspace).Name = 'SurfaceDetectionPoints'
model = workspace.SurfaceDetectionPoints
end
for o = 1,6 do
newIns = Instance.new("Part",model)
newIns.Color = Color3.new(0,1,0)
newIns.Anchored = true
newIns.Size = Vector3.new(0.2,0.2,0.2)
newIns.Material = "Neon"
newIns.CanCollide = false
newIns.Name = "SURFACEDETECTIONPART"
end
end
-- Creates an instance for keeping the parts
while true do
size = script.Parent.Size
points = {
script.Parent.Size.Z / 2,
script.Parent.Size.Z / 2,
script.Parent.Size.X / 2,
script.Parent.Size.X / 2,
script.Parent.Size.Y / 2,
script.Parent.Size.Y / 2
}
-- Above are points for simple surface detection.
if BrickMode == true then
newPart = model:GetChildren()
end
for i = 1,#points do
invisPoints = {}
-- setting
cAxis = nil
if axis == 1 then
if neg == 0 then
cAxis = Vector3.new(0,0,points[i])
else
cAxis = Vector3.new(0,0,-points[i])
end
elseif axis == 2 then
if neg == 0 then
cAxis = Vector3.new(points[i],0,0)
else
cAxis = Vector3.new(-points[i],0,0)
end
elseif axis == 3 then
if neg == 0 then
cAxis = Vector3.new(0,points[i],0)
else
cAxis = Vector3.new(0,-points[i],0)
end
end
-- start
if BrickMode == true then
newPart[i].CFrame = CFrame.new(script.Parent.Position)
*CFrame.fromOrientation(math.rad(script.Parent.Orientation.X),math.rad(script.Parent.Orientation.Y),math.rad(script.Parent.Orientation.Z))
*CFrame.new(cAxis)
end
table.insert(invisPoints,nil,{CFrame.new(script.Parent.Position)
*CFrame.fromOrientation(math.rad(script.Parent.Orientation.X),math.rad(script.Parent.Orientation.Y),math.rad(script.Parent.Orientation.Z))
*CFrame.new(cAxis)}) -- Where it went down. <<<<<<<<<<<<<<<<<<<
-- presetting
if neg == 1 then
if axis == 1 then
axis = 2
elseif axis == 2 then
axis = 3
elseif axis == 3 then
axis = 1
end
end
if neg == 0 then
neg = 1
else
neg = 0
end
end
calcWidth = {left = workspace.Inside.Position.X + (workspace.Inside.Size.X/2), right = workspace.Inside.Position.X - (workspace.Inside.Size.X/2)}
calcHeight = {up = workspace.Inside.Position.Y + (workspace.Inside.Size.Y/2), down = workspace.Inside.Position.Y - (workspace.Inside.Size.Y/2)}
calcLength = {front = workspace.Inside.Position.Z + (workspace.Inside.Size.Z/2), back = workspace.Inside.Position.Z - (workspace.Inside.Size.Z/2)}
--============BRICK MODE============--
if BrickMode == true then
local pass = 0
local passes = {}
region = Region3.new(Vector3.new(calcWidth.right,calcHeight.down,calcLength.back), Vector3.new(calcWidth.left,calcHeight.up,calcLength.front))
detect = workspace:FindPartsInRegion3(region)
for _,Part in pairs(detect) do
if Part.Name == 'SURFACEDETECTIONPART' then
pass = pass + 1
end
end
if pass == 6 then
for k = 1,#newPart do
newPart[k].Color = Color3.new(0,1,0)
end
else
for k = 1,#newPart do
newPart[k].Color = Color3.new(1,0,0)
end
end
else
local passes = 0
for j = 1,#invisPoints do
if invisPoints[j].X < calcWidth.left and invisPoints[j].X > calcWidth.right and invisPoints[j].Y < calcHeight.up and invisPoints[j].Y > calcHeight.down and invisPoints[j].Z < calcLength.front and invisPoints[j].Z > calcLength.back then
passes = passes + 1
end
end
if passes == 6 then
script.Parent.Color = Color3.new(0,1,0)
else
script.Parent.Color = Color3.new(1,0,0)
end
end
--============BRICK MODE END============--
wait(0.01) -- for seeing the parts in a limited time.
end
Thanks in advance.
11:53 PM 5/16/2018 Philippine Time
Good night.
