mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-04 02:49:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
local jecs = require("@jecs")
 | 
						|
local ECS_GENERATION = jecs.ECS_GENERATION
 | 
						|
local ECS_ID = jecs.ECS_ID
 | 
						|
 | 
						|
local ansi = {
 | 
						|
	white_underline = function(s: any)
 | 
						|
		return `\27[1;4m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	white = function(s: any)
 | 
						|
		return `\27[37;1m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	green = function(s: any)
 | 
						|
		return `\27[32;1m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	red = function(s: any)
 | 
						|
		return `\27[31;1m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	yellow = function(s: any)
 | 
						|
		return `\27[33;1m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	red_highlight = function(s: any)
 | 
						|
		return `\27[41;1;30m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	green_highlight = function(s: any)
 | 
						|
		return `\27[42;1;30m{s}\27[0m`
 | 
						|
	end,
 | 
						|
 | 
						|
	gray = function(s: any)
 | 
						|
		return `\27[30;1m{s}\27[0m`
 | 
						|
	end,
 | 
						|
}
 | 
						|
 | 
						|
local function pe(e: any)
 | 
						|
	local gen = ECS_GENERATION(e)
 | 
						|
	return ansi.green(`e{ECS_ID(e)}`) .. ansi.yellow(`v{gen}`)
 | 
						|
end
 | 
						|
 | 
						|
local function name(world: jecs.World, id: any)
 | 
						|
	return world:get(id, jecs.Name) or `${id}`
 | 
						|
end
 | 
						|
 | 
						|
local function components(world: jecs.World, entity: any)
 | 
						|
	local r = jecs.entity_index_try_get(world.entity_index, entity)
 | 
						|
	if not r then
 | 
						|
		return false
 | 
						|
	end
 | 
						|
 | 
						|
	local archetype = r.archetype
 | 
						|
	local row = r.row
 | 
						|
	print(`Entity {pe(entity)}`)
 | 
						|
	print("-----------------------------------------------------")
 | 
						|
	for i, column in archetype.columns do
 | 
						|
		local component = archetype.types[i]
 | 
						|
		local n
 | 
						|
		if jecs.IS_PAIR(component) then
 | 
						|
			n = `({name(world, jecs.pair_first(world, component))}, {name(world, jecs.pair_second(world, component))})`
 | 
						|
		else
 | 
						|
			n = name(world, component)
 | 
						|
		end
 | 
						|
		local data = column[row] or "TAG"
 | 
						|
		print(`| {n} | {data} |`)
 | 
						|
	end
 | 
						|
	print("-----------------------------------------------------")
 | 
						|
	return true
 | 
						|
end
 | 
						|
 | 
						|
local entity_index_try_get_any = jecs.entity_index_try_get_any
 | 
						|
 | 
						|
local function stringify(world: jecs.World)
 | 
						|
	local function record(e: jecs.Entity): jecs.Record
 | 
						|
		return entity_index_try_get_any(world.entity_index :: any, e :: any) :: any
 | 
						|
	end
 | 
						|
	local function tbl(e: jecs.Entity)
 | 
						|
		return record(e).archetype
 | 
						|
	end
 | 
						|
	local function archetype(e: jecs.Entity)
 | 
						|
		return tbl(e).type
 | 
						|
	end
 | 
						|
	local function records(e: jecs.Entity)
 | 
						|
		return tbl(e).records
 | 
						|
	end
 | 
						|
	local function columns(e: jecs.Entity)
 | 
						|
		return tbl(e).columns
 | 
						|
	end
 | 
						|
	local function row(e: jecs.Entity)
 | 
						|
		return record(e).row
 | 
						|
	end
 | 
						|
 | 
						|
	-- Important to order them in the order of their columns
 | 
						|
	local function tuple(e, ...)
 | 
						|
		for i, column in columns(e) do
 | 
						|
			if select(i, ...) ~= column[row(e)] then
 | 
						|
				return false
 | 
						|
			end
 | 
						|
		end
 | 
						|
		return true
 | 
						|
	end
 | 
						|
 | 
						|
	return {
 | 
						|
		record = record,
 | 
						|
		tbl = tbl,
 | 
						|
		archetype = archetype,
 | 
						|
		records = records,
 | 
						|
		row = row,
 | 
						|
		tuple = tuple,
 | 
						|
		columns = columns
 | 
						|
	}
 | 
						|
end
 | 
						|
 | 
						|
return {
 | 
						|
	components = components,
 | 
						|
	prettify = pe,
 | 
						|
	stringify = stringify
 | 
						|
}
 |