Block-based FOV system

Hello there, I have designed an FOV system for the upcoming game that I’m working on called “Hallway of Time”; An RGD fan-game designed to be harder than the original.

Overview

``````FOVLength = 20 -- Doesn't exactly mean the amount of studs in length
FOV_X = 7.5 -- FOV's X scale
FOV_Y = 2.5 -- FOV's Y scale

local Blocks = {}

local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")

local TemporaryInstances = Instance.new("Folder", ReplicatedFirst) -- Just in case
TemporaryInstances.Name = "TemporaryInstances"

-- Main Component --
local function CreateBlocks(X, Y, FOVLength)
local NPCFOVFolder = Instance.new("Folder", TemporaryInstances)

for Distance = 0, FOVLength, 1 do
local Field = Distance / FOVLength

local Block = Instance.new("Part", NPCFOVFolder)

Block.Anchored = true
Block.CanCollide = false

Block.Size = Vector3.new(1 + (FOV_X * Field), 1 + (FOV_Y * Field), 1 + Field)

while true do
Block.CFrame = Head.CFrame * CFrame.new(0,0,-(Field * FOVLength)-Field)
end
end)

table.insert(Blocks, Block)
end
end

CreateBlocks(FOV_X * (FOVLength / 2), FOV_Y * (FOVLength / 2), FOVLength)
``````

What bothers me is how slow it’s moving, then again it’s being delayed to make sure there are no memory leaks or at least lags.

Functionality

First, create a folder named “TemporaryInstances” inside ReplicatedFirst.
Then, create a folder inside TemporaryInstances named after the humanoid stored inside.
Now, create several blocks, layer them in a way that looks like a camera FOV and then store them both inside Blocks and inside the folder named after the humanoid.

Yes, I’m tired so this may not be the best explanation I’ve ever given.

1 Like