summaryrefslogtreecommitdiff
path: root/meta/3rd/luaecs/library/ecs.lua
diff options
context:
space:
mode:
authorCppCXY <812125110@qq.com>2024-02-22 20:29:13 +0800
committerCppCXY <812125110@qq.com>2024-02-22 20:29:13 +0800
commit9b6df71d97a70ee7179949ef9f15368cbf29dcbd (patch)
treebf7a7e62ed7c164a12bdce437c17262a5235bcec /meta/3rd/luaecs/library/ecs.lua
parent483fe246b6ae8c25d433aa15e43f04f0e71a74d5 (diff)
parent3e6fd3ce1f2f0528336ded939d776a29bbfaf2eb (diff)
downloadlua-language-server-9b6df71d97a70ee7179949ef9f15368cbf29dcbd.zip
Merge branch 'master' of github.com:CppCXY/lua-language-server
Diffstat (limited to 'meta/3rd/luaecs/library/ecs.lua')
m---------meta/3rd/luaecs0
-rw-r--r--meta/3rd/luaecs/library/ecs.lua380
2 files changed, 0 insertions, 380 deletions
diff --git a/meta/3rd/luaecs b/meta/3rd/luaecs
new file mode 160000
+Subproject 21192fbdccc0f140dae2f74f7c3ec7d74e2aadd
diff --git a/meta/3rd/luaecs/library/ecs.lua b/meta/3rd/luaecs/library/ecs.lua
deleted file mode 100644
index 56b421ca..00000000
--- a/meta/3rd/luaecs/library/ecs.lua
+++ /dev/null
@@ -1,380 +0,0 @@
----@meta
-
----Library of https://github.com/cloudwu/luaecs
-
----We use a component id and a index in a component pooid, then we can
----get this component's entity id ,then get all other components.
----@class ITER
----@field index integer index of the component pool
----@field cid integer component type id
----@field iter ENTITY_GROUPITER #userdata
-
----Return depend the pattern, every pattern will be return a table.
----This is a C function, and it will be used as the __call metamethod of the
----ECSWorld#_groupiter 's return usedata's metatable.
----If the pattern of select is a component name but not a condition,then return
----is the component pool index and component id.
----@alias ENTITY_GROUPITER fun():ITER
-
----Every entity must defined which component it contains on new.
----@class ECSWorld
-local meta = {}
-
----Register a component, use Lua table to describe data struct.
----The table is a name field and data field list, and can has a type field, field will be 'filed_name:type'.
----Then, will caulate the size of component type's data.
----Support type is: int, float, bool, int64, dword, word, byte, double, userdata
----* if type is `lua`, the size is ecs._LUAOBJECT, -1;
----* if type is `raw`, we must set the type's size explict;
----* or the size may bigger than 0, which caculated from the data field list.
----* or if the size is 0, it is a one value component, if it has type field, then the size is the type size;
----* or if the size litter then 0, it is a tag.
----```
----In C, this is init a component pool, every component pool's data will in a continus memory.
---- {name = 'vector', 'x:float','y:float'} -- normal component
---- {name = 'object',type='lua'}} -- lua component
---- {name = 'hp', type='int'} -- one value component
---- {name = 'mark'}, -- tag, default it boolean
-----{name = 'rawobj', type='raw', size= '20'} -- raw object
---- {name = 'byname', order = true} -- order tag
---- Then the c api _newtype will malloc a continus memory of the types' size.
----@param typeclass table
----@see ECSWorld#_newtype
-function meta:register(typeclass)
-end
-
----Construct a new entity, use Lua table to describe it.
----The key is the component type, must register it before,
----so, every kv pair is a component.
----Every component pool will get the new entity id.
----@param obj? table #{name = "hello", position= {x = 1, y = 2}}
----@return integer #eid
-function meta:new(obj)
-end
-
----Return the info of a list of component names.
----May be, for test use?
----@param t string[] component name list
----@return userdata #ctx info
----@see ECSWorld#_context
-function meta:context(t)
-end
-
----Select a patterns of entitys, the mainkey( first key) can't not be has absent condtion.
----The pattern is a space-separated combination of `componentname[:?]action`, and the `action` can be
----* in : read the component
----* out : write the component
----* update : read / write
----* absent : check if the component is not exist
----* exist (default) : check if the component is exist
----* new : create the component
----* ? means it's an optional action if the component is not exist
----NOTICE: If you use action `new` , you must guarantee the component is clear (None entity has this component) before iteration.
----If opt and inout is absent, the return is the id info of the entitys.{ {pooid, cid}}
----**Return value will only has components in he pattern**
----**Return value will like {component_index, component_id,ENTITY_GROUPITER,component1, component2}
----@param pat string #key [{opt inout}] , opt is : or ?, inout is in, out, update, exist(default), absent, new.like t:in, b:out, id?update
----@return ENTITY_GROUPITER #iter function
----@see ECSWorld#_groupiter
-function meta:select(pat)
-end
-
----Sync all then component of the entity represent by a iter to LUA
----@param iter number|ITER #ITER or entity id
----@return table
----@see ECSWorld#_read
----@see ECSWorld#access
----@see ECSWorld#fetch
-function meta:readall(iter)
-end
-
----Clear a component type of name `name`
----@param name string component name
----@see ECSWorld#_clear
-function meta:clear(name)
-end
-
----Clear all component types.
----@see ECSWorld#clear
-function meta:clearall()
-end
-
----Dump all indexes of a component of name `name`
----@param name string
----@return integer[]
----@see ECSWorld#_dumpid
-function meta:dumpid(name)
-end
-
----Update world, will free removed(default, or with tag `tagname`) entity.
----@param tagname? string #tagname, default is REMOVED, but we also can use other tag to delete entities.
----@see ECSWorld#_update
-function meta:update(tagname)
-end
-
-local M = {
- _MAXTYPE = 255,
- _METHODS = meta,
- _TYPE_INT = 0,
- _TYPE_FLOAT = 1,
- _TYPE_BOOL = 2,
- _TYPE_INT64 = 3,
- _TYPE_DWORD = 4,
- _TYPE_WORD = 5,
- _TYPE_BYTE = 6,
- _TYPE_DOUBLE = 7,
- _TYPE_USERDATA = 8,
- _TYPE_COUNT = 9,
- _LUAOBJECT = -1,
- _REMOVED = 0,
- _ORDERKEY = -2,
- NULL = 0x0, -- userdata
-}
-
----Lua function
----Construct a new LuaECS World
----@return ECSWorld
-function M.world()
-end
-
----Like new(obj), but use a specifie entity
----@param eid integer #entity id
----@param obj table #describe all component of the type
-function meta:import(eid, obj)
-end
-
--- Create a template first
----local t = w:template {
---- name = "foobar"
----}
--- instance the template into an entity, and add visible tag.
---- The additional components ( { visible = true } ) is optional.
---- local eid = w:template_instance(w:new(), t, { visible = true })
----Use a templat to Construct an entity.
----@param eid integer #entity id
----@param temp string #template name
----@param obj table
-function meta:template_instance(eid, temp, obj)
-end
-
----Get an entity's one component, can can write the value.
----@param eid integer
----@param pat string #only one key
----@param value? any # when with this values, is write.
----@return any|nil # pattern key is tag, return boolean; lua type, return lua data; else table; if write, return nil.
----@see ECSWorld#readall
----@see ECSWorld#fetch
-function meta:access(eid, pat, value)
-end
-
----Count the pattern 's object number
----@param pat string
----@return integer
-function meta:count(pat)
-end
-
----Extend an iter with pattern.
----@param iter ITER
----@param expat string
----@see ECSWorld#_read
-function meta:extend(iter, expat) end
-
----Get component id by name
----@param name string
----@return integer #component id
-function meta:component_id(name) end
-
----Persist Use
-function meta:read_component(reader, name, offset, stride, n) end
-
----Get the first entity of pattern `pattern`
----We can use this as a signletone component.
----@param pattern string
----@return ITER
-function meta:first(pattern) end
-
----Check pattern `pattern` whether has entitys.
----Work same as ECSWorld#first but return boolean.
----@param pattern string
----@return boolean
-function meta:check(pattern) end
-
----Register a template.
----@param obj table #component and value pairs
-function meta:template(obj) end
-
----You can tags entities in groups with `w:group_enable(tagname, groupid1, groupid2,...)`
----Enable tag `tagname` on multi groups
----@param tagname string tagname
----@param ... number #group id s
----@see ECSWorld#_group_enable
-function meta:group_enable(tagname, ...) end
-
----Get a component's type.
----@param name string
----@return string # tag | lua | c | M._TYPE*
-function meta:type(name) end
-
----This will reset `tagname`'s component pool.
----Set tag on entitys in pattern `pat`
----@param tagname string
----@param pat string
-function meta:filter(tagname, pat) end
-
----Fetch entity's component with pattern `pat`
----You can use out, update and then w:sumit() to modify entity.
----@param eid integer
----@param pat? string
----@see ECSWorld#readall
----@see ECSWorld#access
----@return table # entity with pat specified component
-function meta:fetch(eid, pat) end
-
------------ C API -------------
----C API
----Get the world size
----@return integer, integer #capaticy size, used size
-function meta:memory() end
-
----C API
----shrink_component_pool
-function meta:collect() end
-
----C API
----New component type.
----@param cid integer component id, cacul from the Lua
----@param size integer # size
----@see ECSWorld#register
-function meta:_newtype(cid, size)
-end
-
---- C API
----Return a new entity
----@return integer entity id
-function meta:_newentity()
-end
-
---- C API
----Check the entity is exist
----@param eid integer
----@return integer #entity's index in the world, start at 0
----@see ECSWorld#exist
-function meta:_indexentity(eid) end
-
---- C API
----Add entity of id `eid` to the component pool of id `cid`, return the pool index.
----@param eid integer entity id
----@param cid integer component id,
----@return integer #pool index id
-function meta:_addcomponent(eid, cid)
-end
-
---- C API
----Update world.
----Remove all entity which removed(default) or with component id `cid`, and will rearrange the world.
----@param cid? integer #tagid
----@see ECSWorld#update
-function meta:_update(cid)
-end
-
---- C API
----Clear component of id `cid`
----@param cid integer component id
----@see ECSWorld#clear
-function meta:_clear(cid)
-end
-
---- C API
----Return the info of a list of component ids.
----@param t integer[]
----@return userdata #ctx info
----@see ECSWorld#context
-function meta:_context(t)
-end
-
---- C API
----Return an iter function for a list of pattren.
----@param pat_desc table[] #{ {name, id, type, [opt, r, w, exist, absent, new] }
----@return ENTITY_GROUPITER #iter C function
-function meta:_groupiter(pat_desc)
-end
-
---- C API
-function meta:_mergeiter(...) end
-
---- C API
----Get a iter of entity eid.
----@param eid integer
----@return ITER # the cid will by -1
-function meta:_fetch(eid) end
-
---- C API
----Entity exists?
----@param eid integer
-function meta:exist(eid) end
-
---- C API
---- Remove an entity with eid
---- The removed entity will has a tag REMOVED
----@param eid number
-function meta:remove(eid)
-end
-
----C API
----@param ref ENTITY_GROUPITER #the iter of component
----@param cv any #the inited component
----@param index integer #the index of the component pool
-function meta:_object(ref, cv, index)
-end
-
----@param pattern string
----@param iter ITER
-function meta:_read(pattern, iter)
-end
-
----C API
----Commit an mod of a group iter with out or new
----@param iter ITER
-function meta:submit(iter) end
-
----@see ECSWorld:#first
-function meta:_first(...) end
-
----Dump all id of a component of id `cid`
----@param cid integer
----@return integer[]
----@see ECSWorld#dumpid
-function meta:_dumpid(cid)
-end
-
----@see ECSWorld:count
-function meta:_count(...) end
-
----@see ECSWorld:filter
-function meta:_filter(...) end
-
-function meta:_access(...) end
-
-function meta:__gc(...) end
-
----C API
---- Add entity (eid) into a group with groupid (32bit integer)
----**NOTE:We can add entity to a group, but we can not remove it from a group.**
----**NOTE:We can iterate a group, but we can not random visit a group member.**
----@param groupid number #32bit
----@param eid number
-function meta:group_add(groupid, eid) end
-
----C API. Add tag of group's entitys
----**NOTICE: this call will clear the the tag's component pool.**
----@param tagid number
----@param ... number #max number is 1024
----@see ECSWorld#group_enable
-function meta:_group_enable(tagid, ...) end
-
----C api, get the eid list of a group
----@param groupid number
----@return table # eid list
-function meta:group_get(groupid) end
-
-return M