Experimental browser for the Atmosphere
{ "uri": "at://did:plc:tydxsfc7tumboebjgi5df2ew/li.plonk.paste/3llzk4vrxp22p", "cid": "bafyreihnqhf3tduidusydmjdp4fhkswfcvfxa6ig6pd4hu6nhznzyfuvfq", "value": { "code": "-- ENTITY COMPONENT SYSTEM\r\n-- Created by Koldinium\r\n-- Licensed under 0BSD\r\nlocal M = {}\r\n\r\n-- Maintain one consistent global state across instances\r\n_G.__kold_ecs = _G.__kold_ecs or {}\r\nlocal globals = _G.__kold_ecs\r\n\r\nglobals.entities = globals.entities or 0\r\nglobals.component_arrays = globals.component_arrays or {}\r\nglobals.components = globals.components or {}\r\nglobals.systems = globals.systems or {}\r\n\r\n\r\nfunction M.create_entity(components)\r\n local id = globals.entities + 1\r\n for k,v in pairs(components) do\r\n globals.component_arrays[k][id] = globals.components[k](v)\r\n end\r\n return id\r\nend\r\n\r\nfunction M.delete_entity(id)\r\n for _,v in pairs(globals.component_arrays) do\r\n v[id] = nil\r\n end\r\nend\r\n\r\nfunction M.add_component_to_entity(entity, component_id, component_val)\r\n globals.component_arrays[component_id][entity] = globals.components[component_id](component_val)\r\nend\r\n\r\nfunction M.remove_component_from_entity(entity, component_id)\r\n globals.component_arrays[component_id][entity] = nil\r\nend\r\n\r\nfunction M.declare_system(query, system)\r\n table.insert(globals.systems, {query = query, system=system})\r\nend\r\n\r\nfunction M.declare_component(component, initializer)\r\n globals.components[component] = initializer\r\nend\r\n\r\n\r\nfunction M.run_systems()\r\n for _,system in pairs(globals.systems) do\r\n local first_component_id = system.query[1]\r\n for id, component in globals.component_arrays[first_component_id] do\r\n if #system.query == 1 then\r\n system.system({component})\r\n else\r\n local arg = {}\r\n for k,v in pairs(system.query) do\r\n if component_arrays[v][id] then\r\n table.insert(arg, component_arrays[v][id])\r\n else\r\n break\r\n end\r\n end\r\n if #arg == #system.query then\r\n system.system(arg)\r\n end\r\n end\r\n end\r\n end\r\nend\r\n\r\nreturn M\r\n", "lang": "plaintext", "$type": "li.plonk.paste", "title": "lua ecs (WIP, UNTESTED)", "shortUrl": "zb", "createdAt": "2025-04-04T23:12:37.988Z" } }