Skip to content

Raycasts cost more time when raycaster is inside other ship's purple frame #20

Description

@kamitojaeger

`--local gpu = peripheral.wrap("tm_gpu_0")
local rc = peripheral.wrap("front")
--local ccRd = peripheral.wrap("createcomputing:computerized_redstone_link_1")
local modem = peripheral.wrap("back")

local euler_mode = false
local depth_map = false
local cache = false

local width_roll_range = math.rad(37.24)
local height_pitch_range = math.rad(10)
local max_distance = 512
local vector_fov = 1

--gpu.setSize(64,64,4,4,16)
--gpu.refreshSize()
local width, height = 260,256

local radarOn_OFF_FileName = "isRadarOn.txt"
local radarFilterName = "radarFilter.txt"

height_pitch_range = height_pitch_range * (height/width)

local table_insert = table.insert

local function linspace(start, end_, num)
local linspaced = {}
if num == 0 then return linspaced end
if num == 1 then
table_insert(linspaced, start)
return linspaced
end

local delta = (end_ - start) / (num - 1)

for i = 0, num-2 do
    table_insert(linspaced, start+delta*i)
end
table_insert(linspaced, end_)

return linspaced

end

local x_axis = linspace(-width_roll_range, width_roll_range, width)
local y_axis = linspace(-height_pitch_range, height_pitch_range, height)

print(# x_axis)
print(# y_axis)

print("height " .. height)
print("width " .. width)

local start = os.epoch("utc")
local function yield()
if (os.epoch("utc") - start > 1000) then
os.queueEvent("yield")
os.pullEvent("yield")
start = os.epoch("utc")
end
end

function radarResultManagement(item,xr,max_distance,targetTable,radarFilterType)

local floor = math.floor
local maxD = max_distance
local t = targetTable

if radarFilterType == "VS-E" then
    local entityHit = item.is_entity
    local VS_ShipHit = false

    if item.ship_id ~= nil then
        VS_ShipHit = true
    end

    if VS_ShipHit then
        local distance = floor(((maxD - item.distance) / 2) + 0.5)
        local x = floor((xr * 100) + 130 + 0.5)
        local type = "Ship"
        local temTable = {x,distance,type}
        table.insert(t,temTable)
    elseif entityHit then
        local distance = floor(((maxD - item.distance) / 2) + 0.5)
        local x = floor((xr * 100) + 130 + 0.5)
        local type = "entity"
        local temTable = {x,distance,type}
        table.insert(t,temTable)
    end

elseif radarFilterType == "Entity" then

    local entityHit = item.is_entity
    if entityHit then
        local distance = floor(((maxD - item.distance) / 2) + 0.5)
        local x = floor((xr * 100) + 130 + 0.5)
        local type = "entity"
        local temTable = {x,distance,type}
        table.insert(t,temTable)
    end

elseif radarFilterType == "VS" then
    local VS_ShipHit = false

    if item.ship_id ~= nil then
        VS_ShipHit = true
    end

    if VS_ShipHit then
        local distance = floor(((maxD - item.distance) / 2) + 0.5)
        local x = floor((xr * 100) + 130 + 0.5)
        local type = "Ship"
        local temTable = {x,distance,type}
        table.insert(t,temTable)
        
    end

end

return t

end

function readConfig(txt)
local fileName = txt
local file = fs.open(fileName,"r")
local line = tostring(file.readLine())
file.close()
return line
end

function writeInfo(text,txt)
local fileName = txt
local file = fs.open(fileName,"w")
file.write(text)
file.close()
end

writeInfo("VS-E",radarFilterName)

local isRadarOn = readConfig(radarOn_OFF_FileName)
local radarFilterType = readConfig(radarFilterName)

while true do
isRadarOn = readConfig(radarOn_OFF_FileName)
if isRadarOn == "ON" then
local startTime = os.clock()
targetTable ={}
for x=1, width do
isRadarOn = readConfig(radarOn_OFF_FileName)
radarFilterType = readConfig(radarFilterName)
if isRadarOn == "ON" then
for y=1, height do
yield()
local yr = y_axis[y]
local xr = x_axis[x]
--print("x = "..xr .. " y = " .. yr)
local item = rc.raycast(max_distance, {yr, xr, vector_fov}, euler_mode, true, cache)
targetTable = radarResultManagement(item,xr,max_distance,targetTable,radarFilterType)
end
--targetDisplay(targetTable)

            local num = #targetTable
            if num >= 5000 then
                print("Auto Shut Down due to Info OverStress")
                isRadarOn = "OFF"
                modem.transmit(11459,11459,isRadarOn)
                writeInfo(isRadarOn,radarOn_OFF_FileName)
                writeInfo("VS-E",radarFilterName)
                break
            end

            yield()
            modem.transmit(11459,11459,targetTable)
        elseif isRadarOn == "OFF" then
            sleep()
        end

    end
    targetTable = nil
    local endTime = os.clock()
    local runTime = endTime - startTime
    print("runTime  " .. runTime)

elseif isRadarOn == "OFF" then
    --print("Radar Is Off")
    yield()
end

end

`

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions