forked from Simnation/Main
150 lines
No EOL
2.8 KiB
Lua
150 lines
No EOL
2.8 KiB
Lua
module 'shared/debug'
|
|
module 'shared/resource'
|
|
|
|
if not rawget(_G, "lib") then include(Bridge.ZoneName, 'init') end
|
|
|
|
Version = resource.version(Bridge.ZoneName)
|
|
Bridge.Debug('Zone', Bridge.ZoneName, Version)
|
|
|
|
Zone.PolyZone = function(data)
|
|
---@cast data table
|
|
local zone = lib.zones.poly({
|
|
debug = data.debug,
|
|
points = data.points,
|
|
thickness = data.height
|
|
})
|
|
|
|
data.id = zone.id
|
|
|
|
data.coords = function()
|
|
return zone.coords
|
|
end
|
|
|
|
data.distance = function()
|
|
return zone.distance
|
|
end
|
|
|
|
data.remove = function()
|
|
zone:remove()
|
|
end
|
|
|
|
data.contains = function(coord)
|
|
return zone:contains(coord)
|
|
end
|
|
|
|
if data.onEnter then
|
|
zone.onEnter = function()
|
|
data.onEnter(data)
|
|
end
|
|
end
|
|
|
|
if data.onExit then
|
|
zone.onExit = function()
|
|
data.onExit(data)
|
|
end
|
|
end
|
|
|
|
if data.inside then
|
|
zone.inside = function()
|
|
data.inside(data)
|
|
end
|
|
end
|
|
|
|
return data
|
|
end
|
|
|
|
Zone.BoxZone = function(data)
|
|
---@cast data table
|
|
local zone = lib.zones.box({
|
|
debug = data.debug,
|
|
coords = data.coords,
|
|
size = data.size,
|
|
rotation = data.rotation
|
|
})
|
|
|
|
data.id = zone.id
|
|
|
|
data.coords = function()
|
|
return zone.coords
|
|
end
|
|
|
|
data.distance = function()
|
|
return zone.distance
|
|
end
|
|
|
|
data.remove = function()
|
|
zone:remove()
|
|
end
|
|
|
|
data.contains = function(coord)
|
|
return zone:contains(coord)
|
|
end
|
|
|
|
if data.onEnter then
|
|
zone.onEnter = function()
|
|
data.onEnter(data)
|
|
end
|
|
end
|
|
|
|
if data.onExit then
|
|
zone.onExit = function()
|
|
data.onExit(data)
|
|
end
|
|
end
|
|
|
|
if data.inside then
|
|
zone.inside = function()
|
|
data.inside(data)
|
|
end
|
|
end
|
|
|
|
---@cast data table
|
|
return data
|
|
end
|
|
|
|
Zone.SphereZone = function(data)
|
|
---@cast data table
|
|
local zone = lib.zones.sphere({
|
|
debug = data.debug,
|
|
coords = data.coords,
|
|
radius = data.radius
|
|
})
|
|
|
|
data.id = zone.id
|
|
|
|
data.coords = function()
|
|
return zone.coords
|
|
end
|
|
|
|
data.distance = function()
|
|
return zone.distance
|
|
end
|
|
|
|
data.remove = function()
|
|
zone:remove()
|
|
end
|
|
|
|
data.contains = function(coord)
|
|
return zone:contains(coord)
|
|
end
|
|
|
|
if data.onEnter then
|
|
zone.onEnter = function()
|
|
data.onEnter(data)
|
|
end
|
|
end
|
|
|
|
if data.onExit then
|
|
zone.onExit = function()
|
|
data.onExit(data)
|
|
end
|
|
end
|
|
|
|
if data.inside then
|
|
zone.inside = function()
|
|
data.inside(data)
|
|
end
|
|
end
|
|
|
|
return data
|
|
end |