192 lines
5.5 KiB
Lua
192 lines
5.5 KiB
Lua
local tinsert = table.insert
|
|
|
|
local json = require("json")
|
|
local utils = require("utils")
|
|
|
|
local route = {
|
|
http_server = nil,
|
|
ecs_server = nil,
|
|
}
|
|
|
|
local entitydata = {
|
|
pattern = "/data/entities",
|
|
func = function(matches, stream, headers, body)
|
|
local entities = json.encode( { entities = route.ecs_server.entities } )
|
|
|
|
entities = string.gsub(entities, "vmath%.vector3%((.-),(.-),(.-)%)", function(a, b, c)
|
|
return string.format("vec3(%.3f, %.3f, %.3f)", a, b, c)
|
|
end)
|
|
entities = string.gsub(entities, "vmath%.quat%((.-),(.-),(.-),(.-)%)", function(a, b, c, d)
|
|
return string.format("quat(%.3f, %.3f, %.3f, %.3f)", a, b, c, d)
|
|
end)
|
|
|
|
entities = entities:gsub("vmath.quat", "quat")
|
|
|
|
return route.http_server.json(entities)
|
|
end,
|
|
}
|
|
|
|
local worlddata = {
|
|
pattern = "/data/world_assets$",
|
|
func = function(matches, stream, headers, body)
|
|
local copy = {}
|
|
for k,v in pairs(route.ecs_server.worlds) do
|
|
local wrld = {}
|
|
for kk,vv in pairs(v) do
|
|
if(kk ~= "entities" and kk ~= "systems") then
|
|
wrld[kk] = vv
|
|
end
|
|
end
|
|
copy[k] = wrld
|
|
end
|
|
|
|
local worlds = json.encode( { worlds = copy } )
|
|
return route.http_server.json(worlds)
|
|
end,
|
|
}
|
|
|
|
|
|
local systemdata = {
|
|
pattern = "/data/systems$",
|
|
func = function(matches, stream, headers, body)
|
|
|
|
-- Add data from the systems on data requests
|
|
for k,v in pairs(route.ecs_server.systems) do
|
|
-- Fetch current system info
|
|
local sys = route.ecs_server.current_world.systems[v.index]
|
|
v.modified = sys.modified
|
|
v.active = sys.active
|
|
v.entity_count = utils.tcount(sys.entities)
|
|
v.calls = sys.calls or 0
|
|
end
|
|
|
|
local systems = json.encode( { systems = route.ecs_server.systems } )
|
|
return route.http_server.json(systems)
|
|
end,
|
|
}
|
|
|
|
local routesdata = {
|
|
pattern = "/data/routes$",
|
|
func = function(matches, stream, headers, body)
|
|
local copy = {}
|
|
for k,v in pairs(route.ecs_server.routes) do
|
|
local route = {}
|
|
for kk,vv in pairs(v.routes) do
|
|
|
|
if(vv.pattern) then
|
|
tinsert(route, vv.pattern)
|
|
end
|
|
end
|
|
copy[k] = route
|
|
end
|
|
|
|
local routes = json.encode( { routes = copy } )
|
|
return route.http_server.json(routes)
|
|
end,
|
|
}
|
|
|
|
local worldcurrent = {
|
|
pattern = "/data/world/current$",
|
|
func = function(matches, stream, headers, body)
|
|
|
|
local curr_world = route.ecs_server.current_world
|
|
local world = {
|
|
name = curr_world.name,
|
|
entities_count = utils.tcount(curr_world.entities),
|
|
systems_count = utils.tcount(curr_world.systems),
|
|
systems = {},
|
|
}
|
|
for k,v in pairs(curr_world.systems) do
|
|
local sys = {
|
|
index = v.index,
|
|
calls = v.calls,
|
|
modified = v.modified,
|
|
active = v.active,
|
|
entities_count = utils.tcount(v.entities),
|
|
}
|
|
tinsert(world.systems, sys)
|
|
end
|
|
|
|
local world = json.encode( { world = world } )
|
|
return route.http_server.json(world)
|
|
end,
|
|
}
|
|
|
|
local worldcameras = {
|
|
pattern = "/data/world/cameras$",
|
|
func = function(matches, stream, headers, body)
|
|
|
|
local curr_world = route.ecs_server.current_world
|
|
local entities = route.ecs_server.entities
|
|
local cameras = {
|
|
world = curr_world.name,
|
|
cameras = {},
|
|
}
|
|
for k,v in pairs(route.ecs_server.cameras_lookup) do
|
|
local cam = entities[v]
|
|
local camera = {
|
|
id = cam.id,
|
|
name = cam.name,
|
|
pos = { x=cam.pos.x, y=cam.pos.y, z=cam.pos.z },
|
|
rot = { x=cam.rot.x, y=cam.rot.y, z=cam.rot.z, w=cam.rot.w },
|
|
go = cam.go,
|
|
created = cam.created,
|
|
|
|
fov = cam.fov,
|
|
near = cam.near,
|
|
far = cam.far,
|
|
aspect = cam.aspect,
|
|
}
|
|
tinsert(cameras.cameras, camera)
|
|
end
|
|
return route.http_server.json( json.encode(cameras) )
|
|
end,
|
|
}
|
|
|
|
local defoldmetrics = {
|
|
pattern = "/data/defold/metrics$",
|
|
func = function(matches, stream, headers, body)
|
|
|
|
local srcdata = route.ecs_server
|
|
local data = {
|
|
fps = srcdata.fps,
|
|
mem = srcdata.mem,
|
|
deltas = srcdata.deltas,
|
|
}
|
|
|
|
local metrics = json.encode( { metrics = data } )
|
|
return route.http_server.json(metrics)
|
|
end,
|
|
}
|
|
|
|
local shader_glsl = {
|
|
pattern = "/(.*%.glsl)$",
|
|
func = function(matches, stream, headers, body)
|
|
local glsl = utils.loaddata(base_www_path..matches[1])
|
|
return route.http_server.file(glsl, base_www_path..matches[1])
|
|
end,
|
|
}
|
|
|
|
local model_obj = {
|
|
pattern = "/(.*%.obj)$",
|
|
func = function(matches, stream, headers, body)
|
|
local obj = utils.loaddata(base_www_path..matches[1])
|
|
return route.http_server.file(obj, base_www_path..matches[1])
|
|
end,
|
|
}
|
|
|
|
route.routes = {
|
|
entitydata,
|
|
worlddata,
|
|
systemdata,
|
|
routesdata,
|
|
|
|
worldcurrent,
|
|
worldcameras,
|
|
defoldmetrics,
|
|
|
|
shader_glsl,
|
|
model_obj,
|
|
}
|
|
|
|
return route |