local loaded, scene -- ./ecs/ecs.can:54 if ... then -- ./ecs/ecs.can:55 loaded, scene = pcall(require, (...):match("^(.-)ecs") .. "scene") -- ./ecs/ecs.can:55 end -- ./ecs/ecs.can:55 if not loaded then -- ./ecs/ecs.can:56 scene = nil -- ./ecs/ecs.can:56 end -- ./ecs/ecs.can:56 local ecs -- ./ecs/ecs.can:58 local recDestroySystems -- ./ecs/ecs.can:104 recDestroySystems = function(system) -- ./ecs/ecs.can:104 for i = # system["systems"], 1, - 1 do -- ./ecs/ecs.can:105 local s -- ./ecs/ecs.can:106 s = system["systems"][i] -- ./ecs/ecs.can:106 recDestroySystems(s) -- ./ecs/ecs.can:107 s:onDestroy() -- ./ecs/ecs.can:108 system["systems"][i] = nil -- ./ecs/ecs.can:109 if s["name"] then -- ./ecs/ecs.can:110 system["world"]["s"][s["name"]] = nil -- ./ecs/ecs.can:111 end -- ./ecs/ecs.can:111 end -- ./ecs/ecs.can:111 end -- ./ecs/ecs.can:111 local recCallOnRemoveFromWorld -- ./ecs/ecs.can:116 recCallOnRemoveFromWorld = function(world, systems) -- ./ecs/ecs.can:116 for _, s in ipairs(systems) do -- ./ecs/ecs.can:117 s:clear() -- ./ecs/ecs.can:118 recCallOnRemoveFromWorld(world, s["systems"]) -- ./ecs/ecs.can:119 s:onRemoveFromWorld(world) -- ./ecs/ecs.can:120 end -- ./ecs/ecs.can:120 end -- ./ecs/ecs.can:120 local copy -- ./ecs/ecs.can:126 copy = function(a, b, cache) -- ./ecs/ecs.can:126 if cache == nil then cache = {} end -- ./ecs/ecs.can:126 for k, v in pairs(a) do -- ./ecs/ecs.can:127 if type(v) == "table" then -- ./ecs/ecs.can:128 if b[k] == nil then -- ./ecs/ecs.can:129 if cache[v] then -- ./ecs/ecs.can:130 b[k] = cache[v] -- ./ecs/ecs.can:131 else -- ./ecs/ecs.can:131 cache[v] = {} -- ./ecs/ecs.can:133 b[k] = cache[v] -- ./ecs/ecs.can:134 copy(v, b[k], cache) -- ./ecs/ecs.can:135 setmetatable(b[k], getmetatable(v)) -- ./ecs/ecs.can:136 end -- ./ecs/ecs.can:136 elseif type(b[k]) == "table" then -- ./ecs/ecs.can:138 copy(v, b[k], cache) -- ./ecs/ecs.can:139 end -- ./ecs/ecs.can:139 elseif b[k] == nil then -- ./ecs/ecs.can:141 b[k] = v -- ./ecs/ecs.can:142 end -- ./ecs/ecs.can:142 end -- ./ecs/ecs.can:142 end -- ./ecs/ecs.can:142 local alwaysTrue -- ./ecs/ecs.can:148 alwaysTrue = function() -- ./ecs/ecs.can:148 return true -- ./ecs/ecs.can:148 end -- ./ecs/ecs.can:148 local alwaysFalse -- ./ecs/ecs.can:149 alwaysFalse = function() -- ./ecs/ecs.can:149 return false -- ./ecs/ecs.can:149 end -- ./ecs/ecs.can:149 local head -- ./ecs/ecs.can:155 head = {} -- ./ecs/ecs.can:155 local skipNew -- ./ecs/ecs.can:158 skipNew = function() -- ./ecs/ecs.can:158 local s -- ./ecs/ecs.can:159 s = { -- ./ecs/ecs.can:159 ["first"] = { -- ./ecs/ecs.can:162 head, -- ./ecs/ecs.can:162 nil -- ./ecs/ecs.can:162 }, -- ./ecs/ecs.can:162 ["firstBase"] = nil, -- ./ecs/ecs.can:164 ["previous"] = { {} }, -- ./ecs/ecs.can:168 ["nLayers"] = 1, -- ./ecs/ecs.can:170 ["n"] = 0 -- ./ecs/ecs.can:172 } -- ./ecs/ecs.can:172 s["firstBase"] = s["first"] -- ./ecs/ecs.can:174 return s -- ./ecs/ecs.can:175 end -- ./ecs/ecs.can:175 local nextEntity -- ./ecs/ecs.can:179 nextEntity = function(s) -- ./ecs/ecs.can:179 if s[1] then -- ./ecs/ecs.can:180 local var -- ./ecs/ecs.can:181 var = s[1][1] -- ./ecs/ecs.can:181 s[1] = s[1][2] -- ./ecs/ecs.can:182 return var -- ./ecs/ecs.can:183 else -- ./ecs/ecs.can:183 return nil -- ./ecs/ecs.can:185 end -- ./ecs/ecs.can:185 end -- ./ecs/ecs.can:185 local skipIter -- ./ecs/ecs.can:190 skipIter = function(self) -- ./ecs/ecs.can:190 return nextEntity, { self["firstBase"][2] } -- ./ecs/ecs.can:191 end -- ./ecs/ecs.can:191 local skipAddLayers -- ./ecs/ecs.can:197 skipAddLayers = function(self) -- ./ecs/ecs.can:197 while self["n"] > 2 ^ self["nLayers"] do -- ./ecs/ecs.can:198 self["first"] = { -- ./ecs/ecs.can:199 head, -- ./ecs/ecs.can:199 nil, -- ./ecs/ecs.can:199 self["first"] -- ./ecs/ecs.can:199 } -- ./ecs/ecs.can:199 table["insert"](self["previous"], {}) -- ./ecs/ecs.can:200 self["nLayers"] = self["nLayers"] + (1) -- ./ecs/ecs.can:201 end -- ./ecs/ecs.can:201 end -- ./ecs/ecs.can:201 local coinFlip -- ./ecs/ecs.can:206 coinFlip = function() -- ./ecs/ecs.can:206 return math["random"](0, 1) == 1 -- ./ecs/ecs.can:207 end -- ./ecs/ecs.can:207 local skipInsert -- ./ecs/ecs.can:212 skipInsert = function(self, system, e) -- ./ecs/ecs.can:212 local prevLayer -- ./ecs/ecs.can:214 prevLayer = {} -- ./ecs/ecs.can:214 local prev -- ./ecs/ecs.can:215 prev = self["first"] -- ./ecs/ecs.can:215 for i = self["nLayers"], 1, - 1 do -- ./ecs/ecs.can:216 while true do -- ./ecs/ecs.can:217 if prev[2] == nil or system:compare(e, prev[2][1]) then -- ./ecs/ecs.can:219 prevLayer[i] = prev -- ./ecs/ecs.can:220 if prev[3] then -- ./ecs/ecs.can:222 prev = prev[3] -- ./ecs/ecs.can:223 break -- ./ecs/ecs.can:224 end -- ./ecs/ecs.can:224 break -- ./ecs/ecs.can:226 else -- ./ecs/ecs.can:226 prev = prev[2] -- ./ecs/ecs.can:229 end -- ./ecs/ecs.can:229 end -- ./ecs/ecs.can:229 end -- ./ecs/ecs.can:229 local inLowerLayer -- ./ecs/ecs.can:234 for i = 1, self["nLayers"] do -- ./ecs/ecs.can:235 prev = prevLayer[i] -- ./ecs/ecs.can:236 if i == 1 or coinFlip() then -- ./ecs/ecs.can:237 local nxt -- ./ecs/ecs.can:238 nxt = prev[2] -- ./ecs/ecs.can:238 prev[2] = { -- ./ecs/ecs.can:239 e, -- ./ecs/ecs.can:239 nxt, -- ./ecs/ecs.can:239 inLowerLayer -- ./ecs/ecs.can:239 } -- ./ecs/ecs.can:239 self["previous"][i][e] = prev -- ./ecs/ecs.can:240 if nxt then -- ./ecs/ecs.can:241 self["previous"][i][nxt[1]] = prev[2] -- ./ecs/ecs.can:242 end -- ./ecs/ecs.can:242 inLowerLayer = prev[2] -- ./ecs/ecs.can:244 else -- ./ecs/ecs.can:244 break -- ./ecs/ecs.can:246 end -- ./ecs/ecs.can:246 end -- ./ecs/ecs.can:246 self["n"] = self["n"] + (1) -- ./ecs/ecs.can:249 end -- ./ecs/ecs.can:249 local skipDelete -- ./ecs/ecs.can:255 skipDelete = function(self, e) -- ./ecs/ecs.can:255 for i = 1, self["nLayers"] do -- ./ecs/ecs.can:257 local previous -- ./ecs/ecs.can:258 previous = self["previous"][i] -- ./ecs/ecs.can:258 if previous[e] then -- ./ecs/ecs.can:259 local prev -- ./ecs/ecs.can:260 prev = previous[e] -- ./ecs/ecs.can:260 prev[2] = prev[2][2] -- ./ecs/ecs.can:261 previous[e] = nil -- ./ecs/ecs.can:262 if prev[2] then -- ./ecs/ecs.can:263 previous[prev[2][1]] = prev -- ./ecs/ecs.can:264 end -- ./ecs/ecs.can:264 else -- ./ecs/ecs.can:264 break -- ./ecs/ecs.can:267 end -- ./ecs/ecs.can:267 end -- ./ecs/ecs.can:267 self["n"] = self["n"] - (1) -- ./ecs/ecs.can:270 end -- ./ecs/ecs.can:270 local skipReorder -- ./ecs/ecs.can:276 skipReorder = function(self, system, e) -- ./ecs/ecs.can:276 skipDelete(self, e) -- ./ecs/ecs.can:277 skipInsert(self, system, e) -- ./ecs/ecs.can:278 end -- ./ecs/ecs.can:278 local skipIndex -- ./ecs/ecs.can:283 skipIndex = function(self, i) -- ./ecs/ecs.can:283 local n = 1 -- ./ecs/ecs.can:284 for e in skipIter(self) do -- ./ecs/ecs.can:285 if n == i then -- ./ecs/ecs.can:286 return e -- ./ecs/ecs.can:287 end -- ./ecs/ecs.can:287 n = n + (1) -- ./ecs/ecs.can:289 end -- ./ecs/ecs.can:289 return nil -- ./ecs/ecs.can:291 end -- ./ecs/ecs.can:291 local system_mt -- ./ecs/ecs.can:355 system_mt = { -- ./ecs/ecs.can:355 ["name"] = nil, -- ./ecs/ecs.can:369 ["systems"] = nil, -- ./ecs/ecs.can:377 ["interval"] = false, -- ./ecs/ecs.can:383 ["active"] = true, -- ./ecs/ecs.can:387 ["visible"] = true, -- ./ecs/ecs.can:391 ["component"] = nil, -- ./ecs/ecs.can:398 ["default"] = nil, -- ./ecs/ecs.can:408 ["filter"] = function(self, e) -- ./ecs/ecs.can:429 return false -- ./ecs/ecs.can:429 end, -- ./ecs/ecs.can:429 ["compare"] = function(self, e1, e2) -- ./ecs/ecs.can:441 return true -- ./ecs/ecs.can:441 end, -- ./ecs/ecs.can:441 ["onAdd"] = function(self, e, c) -- ./ecs/ecs.can:447 -- ./ecs/ecs.can:447 end, -- ./ecs/ecs.can:447 ["onRemove"] = function(self, e, c) -- ./ecs/ecs.can:452 -- ./ecs/ecs.can:452 end, -- ./ecs/ecs.can:452 ["onInstance"] = function(self) -- ./ecs/ecs.can:455 -- ./ecs/ecs.can:455 end, -- ./ecs/ecs.can:455 ["onAddToWorld"] = function(self, world) -- ./ecs/ecs.can:459 -- ./ecs/ecs.can:459 end, -- ./ecs/ecs.can:459 ["onRemoveFromWorld"] = function(self, world) -- ./ecs/ecs.can:463 -- ./ecs/ecs.can:463 end, -- ./ecs/ecs.can:463 ["onDestroy"] = function(self) -- ./ecs/ecs.can:466 -- ./ecs/ecs.can:466 end, -- ./ecs/ecs.can:466 ["onUpdate"] = function(self, dt) -- ./ecs/ecs.can:471 -- ./ecs/ecs.can:471 end, -- ./ecs/ecs.can:471 ["onDraw"] = function(self) -- ./ecs/ecs.can:475 -- ./ecs/ecs.can:475 end, -- ./ecs/ecs.can:475 ["process"] = function(self, e, c, dt) -- ./ecs/ecs.can:482 -- ./ecs/ecs.can:482 end, -- ./ecs/ecs.can:482 ["render"] = function(self, e, c) -- ./ecs/ecs.can:488 -- ./ecs/ecs.can:488 end, -- ./ecs/ecs.can:488 ["onUpdateEnd"] = function(self, dt) -- ./ecs/ecs.can:493 -- ./ecs/ecs.can:493 end, -- ./ecs/ecs.can:493 ["onDrawEnd"] = function(self) -- ./ecs/ecs.can:497 -- ./ecs/ecs.can:497 end, -- ./ecs/ecs.can:497 ["world"] = nil, -- ./ecs/ecs.can:507 ["w"] = nil, -- ./ecs/ecs.can:511 ["entityCount"] = 0, -- ./ecs/ecs.can:515 ["s"] = nil, -- ./ecs/ecs.can:519 ["_has"] = nil, -- ./ecs/ecs.can:527 ["_waited"] = 0, -- ./ecs/ecs.can:531 ["add"] = function(self, e, ...) -- ./ecs/ecs.can:552 if e ~= nil and not self["_has"][e] and self:filter(e) then -- ./ecs/ecs.can:553 if self["component"] and self["default"] then -- ./ecs/ecs.can:555 copy({ [self["component"]] = self["default"] }, e) -- ./ecs/ecs.can:556 end -- ./ecs/ecs.can:556 if self["compare"] ~= system_mt["compare"] then -- ./ecs/ecs.can:559 skipAddLayers(self["_skiplist"]) -- ./ecs/ecs.can:560 end -- ./ecs/ecs.can:560 skipInsert(self["_skiplist"], self, e) -- ./ecs/ecs.can:563 self["entityCount"] = self["entityCount"] + (1) -- ./ecs/ecs.can:565 self:onAdd(e, e[self["component"]]) -- ./ecs/ecs.can:566 if self["_has"][e] then -- ./ecs/ecs.can:568 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:569 s:add(e) -- ./ecs/ecs.can:570 end -- ./ecs/ecs.can:570 end -- ./ecs/ecs.can:570 end -- ./ecs/ecs.can:570 if ... then -- ./ecs/ecs.can:574 return e, self:add(...) -- ./ecs/ecs.can:575 else -- ./ecs/ecs.can:575 return e -- ./ecs/ecs.can:577 end -- ./ecs/ecs.can:577 end, -- ./ecs/ecs.can:577 ["remove"] = function(self, e, ...) -- ./ecs/ecs.can:592 if e ~= nil then -- ./ecs/ecs.can:593 if self["_has"][e] then -- ./ecs/ecs.can:594 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:596 s:remove(e) -- ./ecs/ecs.can:597 end -- ./ecs/ecs.can:597 end -- ./ecs/ecs.can:597 if self["_has"][e] then -- ./ecs/ecs.can:600 skipDelete(self["_skiplist"], e) -- ./ecs/ecs.can:601 self["entityCount"] = self["entityCount"] - (1) -- ./ecs/ecs.can:603 self:onRemove(e, e[self["component"]]) -- ./ecs/ecs.can:604 end -- ./ecs/ecs.can:604 end -- ./ecs/ecs.can:604 if ... then -- ./ecs/ecs.can:607 return e, self:remove(...) -- ./ecs/ecs.can:608 else -- ./ecs/ecs.can:608 return e -- ./ecs/ecs.can:610 end -- ./ecs/ecs.can:610 end, -- ./ecs/ecs.can:610 ["refresh"] = function(self, e, ...) -- ./ecs/ecs.can:622 if e ~= nil then -- ./ecs/ecs.can:623 if not self["_has"][e] then -- ./ecs/ecs.can:624 self:add(e) -- ./ecs/ecs.can:625 else -- ./ecs/ecs.can:625 if not self:filter(e) then -- ./ecs/ecs.can:627 self:remove(e) -- ./ecs/ecs.can:628 else -- ./ecs/ecs.can:628 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:630 s:refresh(e) -- ./ecs/ecs.can:631 end -- ./ecs/ecs.can:631 end -- ./ecs/ecs.can:631 end -- ./ecs/ecs.can:631 end -- ./ecs/ecs.can:631 if ... then -- ./ecs/ecs.can:636 return e, self:refresh(...) -- ./ecs/ecs.can:637 else -- ./ecs/ecs.can:637 return e -- ./ecs/ecs.can:639 end -- ./ecs/ecs.can:639 end, -- ./ecs/ecs.can:639 ["reorder"] = function(self, e, ...) -- ./ecs/ecs.can:651 if e ~= nil and self["_has"][e] then -- ./ecs/ecs.can:652 skipReorder(self["_skiplist"], self, e) -- ./ecs/ecs.can:653 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:655 s:reorder(e) -- ./ecs/ecs.can:656 end -- ./ecs/ecs.can:656 end -- ./ecs/ecs.can:656 if ... then -- ./ecs/ecs.can:659 return e, self:reorder(...) -- ./ecs/ecs.can:660 else -- ./ecs/ecs.can:660 return e -- ./ecs/ecs.can:662 end -- ./ecs/ecs.can:662 end, -- ./ecs/ecs.can:662 ["has"] = function(self, e, ...) -- ./ecs/ecs.can:671 local has -- ./ecs/ecs.can:672 has = e == nil or not not self["_has"][e] -- ./ecs/ecs.can:672 if ... then -- ./ecs/ecs.can:673 return has and self:has(...) -- ./ecs/ecs.can:674 else -- ./ecs/ecs.can:674 return has -- ./ecs/ecs.can:676 end -- ./ecs/ecs.can:676 end, -- ./ecs/ecs.can:676 ["iter"] = function(self) -- ./ecs/ecs.can:683 return skipIter(self["_skiplist"]) -- ./ecs/ecs.can:684 end, -- ./ecs/ecs.can:684 ["get"] = function(self, i) -- ./ecs/ecs.can:691 return skipIndex(self["_skiplist"], i) -- ./ecs/ecs.can:692 end, -- ./ecs/ecs.can:692 ["clear"] = function(self) -- ./ecs/ecs.can:697 for e in skipIter(self["_skiplist"]) do -- ./ecs/ecs.can:698 self:remove(e) -- ./ecs/ecs.can:699 end -- ./ecs/ecs.can:699 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:701 s:clear() -- ./ecs/ecs.can:702 end -- ./ecs/ecs.can:702 end, -- ./ecs/ecs.can:702 ["update"] = function(self, dt) -- ./ecs/ecs.can:711 if self["active"] then -- ./ecs/ecs.can:712 if self["interval"] then -- ./ecs/ecs.can:713 self["_waited"] = self["_waited"] + (dt) -- ./ecs/ecs.can:714 if self["_waited"] < self["interval"] then -- ./ecs/ecs.can:715 return -- ./ecs/ecs.can:716 end -- ./ecs/ecs.can:716 end -- ./ecs/ecs.can:716 self:onUpdate(dt) -- ./ecs/ecs.can:719 if self["process"] ~= system_mt["process"] then -- ./ecs/ecs.can:720 for e in skipIter(self["_skiplist"]) do -- ./ecs/ecs.can:721 self:process(e, e[self["component"]], dt) -- ./ecs/ecs.can:722 end -- ./ecs/ecs.can:722 end -- ./ecs/ecs.can:722 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:725 s:update(dt) -- ./ecs/ecs.can:726 end -- ./ecs/ecs.can:726 self:onUpdateEnd(dt) -- ./ecs/ecs.can:728 if self["interval"] then -- ./ecs/ecs.can:729 self["_waited"] = self["_waited"] - (self["interval"]) -- ./ecs/ecs.can:730 end -- ./ecs/ecs.can:730 end -- ./ecs/ecs.can:730 end, -- ./ecs/ecs.can:730 ["draw"] = function(self) -- ./ecs/ecs.can:739 if self["visible"] then -- ./ecs/ecs.can:740 self:onDraw() -- ./ecs/ecs.can:741 if self["render"] ~= system_mt["render"] then -- ./ecs/ecs.can:742 for e in skipIter(self["_skiplist"]) do -- ./ecs/ecs.can:743 self:render(e, e[self["component"]]) -- ./ecs/ecs.can:744 end -- ./ecs/ecs.can:744 end -- ./ecs/ecs.can:744 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:747 s:draw() -- ./ecs/ecs.can:748 end -- ./ecs/ecs.can:748 self:onDrawEnd() -- ./ecs/ecs.can:750 end -- ./ecs/ecs.can:750 end, -- ./ecs/ecs.can:750 ["callback"] = function(self, name, e, ...) -- ./ecs/ecs.can:765 return self:callbackFiltered(alwaysTrue, name, e, ...) -- ./ecs/ecs.can:766 end, -- ./ecs/ecs.can:766 ["callbackFiltered"] = function(self, filter, name, e, ...) -- ./ecs/ecs.can:779 if filter(self, name, e, ...) then -- ./ecs/ecs.can:780 if self["_has"][e] and self[name] then -- ./ecs/ecs.can:782 self[name](self, e, e[self["component"]], ...) -- ./ecs/ecs.can:783 end -- ./ecs/ecs.can:783 if self["_has"][e] then -- ./ecs/ecs.can:786 for _, ss in ipairs(self["systems"]) do -- ./ecs/ecs.can:787 ss:callbackFiltered(filter, name, e, ...) -- ./ecs/ecs.can:788 end -- ./ecs/ecs.can:788 end -- ./ecs/ecs.can:788 end -- ./ecs/ecs.can:788 end, -- ./ecs/ecs.can:788 ["emit"] = function(self, name, ...) -- ./ecs/ecs.can:815 return self:emitFiltered(alwaysTrue, name, ...) -- ./ecs/ecs.can:816 end, -- ./ecs/ecs.can:816 ["emitFiltered"] = function(self, filter, name, ...) -- ./ecs/ecs.can:828 if filter(self, name, ...) then -- ./ecs/ecs.can:829 local status -- ./ecs/ecs.can:831 if self[name] then -- ./ecs/ecs.can:832 status = self[name](self, ...) -- ./ecs/ecs.can:833 end -- ./ecs/ecs.can:833 if status ~= "stop" and status ~= "capture" then -- ./ecs/ecs.can:836 for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:837 status = s:emitFiltered(filter, name, ...) -- ./ecs/ecs.can:838 if status == "capture" then -- ./ecs/ecs.can:839 break -- ./ecs/ecs.can:839 end -- ./ecs/ecs.can:839 end -- ./ecs/ecs.can:839 end -- ./ecs/ecs.can:839 return status -- ./ecs/ecs.can:842 end -- ./ecs/ecs.can:842 end, -- ./ecs/ecs.can:842 ["destroy"] = function(self) -- ./ecs/ecs.can:847 recCallOnRemoveFromWorld(self["world"], { self }) -- ./ecs/ecs.can:848 recDestroySystems({ ["systems"] = { self } }) -- ./ecs/ecs.can:849 end -- ./ecs/ecs.can:849 } -- ./ecs/ecs.can:849 local recInstanciateSystems -- ./ecs/ecs.can:856 recInstanciateSystems = function(world, systems) -- ./ecs/ecs.can:856 local t -- ./ecs/ecs.can:857 t = {} -- ./ecs/ecs.can:857 for _, s in ipairs(systems) do -- ./ecs/ecs.can:858 local system -- ./ecs/ecs.can:859 system = setmetatable({ -- ./ecs/ecs.can:861 ["systems"] = recInstanciateSystems(world, s["systems"] or {}), -- ./ecs/ecs.can:862 ["world"] = world, -- ./ecs/ecs.can:863 ["w"] = world, -- ./ecs/ecs.can:864 ["s"] = world["s"], -- ./ecs/ecs.can:865 ["_skiplist"] = skipNew() -- ./ecs/ecs.can:866 }, { ["__index"] = function(self, k) -- ./ecs/ecs.can:868 if s[k] ~= nil then -- ./ecs/ecs.can:869 return s[k] -- ./ecs/ecs.can:870 else -- ./ecs/ecs.can:870 return system_mt[k] -- ./ecs/ecs.can:872 end -- ./ecs/ecs.can:872 end }) -- ./ecs/ecs.can:872 system["_has"] = system["_skiplist"]["previous"][1] -- ./ecs/ecs.can:876 if type(s["filter"]) == "string" then -- ./ecs/ecs.can:878 system["filter"] = function(_, e) -- ./ecs/ecs.can:879 return e[s["filter"]] ~= nil -- ./ecs/ecs.can:879 end -- ./ecs/ecs.can:879 elseif type(s["filter"]) == "table" then -- ./ecs/ecs.can:880 system["filter"] = ecs["all"](unpack(s["filter"])) -- ./ecs/ecs.can:881 elseif type(s["filter"]) == "boolean" then -- ./ecs/ecs.can:882 if s["filter"] then -- ./ecs/ecs.can:883 system["filter"] = alwaysTrue -- ./ecs/ecs.can:884 else -- ./ecs/ecs.can:884 system["filter"] = alwaysFalse -- ./ecs/ecs.can:886 end -- ./ecs/ecs.can:886 end -- ./ecs/ecs.can:886 if not s["component"] and s["name"] then -- ./ecs/ecs.can:890 s["component"] = s["name"] -- ./ecs/ecs.can:891 end -- ./ecs/ecs.can:891 table["insert"](t, system) -- ./ecs/ecs.can:894 if s["name"] then -- ./ecs/ecs.can:895 world["s"][s["name"]] = system -- ./ecs/ecs.can:896 end -- ./ecs/ecs.can:896 system:onInstance() -- ./ecs/ecs.can:898 end -- ./ecs/ecs.can:898 return t -- ./ecs/ecs.can:900 end -- ./ecs/ecs.can:900 local recCallOnAddToWorld -- ./ecs/ecs.can:903 recCallOnAddToWorld = function(world, systems) -- ./ecs/ecs.can:903 for _, s in ipairs(systems) do -- ./ecs/ecs.can:904 recCallOnAddToWorld(world, s["systems"]) -- ./ecs/ecs.can:905 s:onAddToWorld(world) -- ./ecs/ecs.can:906 end -- ./ecs/ecs.can:906 end -- ./ecs/ecs.can:906 ecs = { -- ./ecs/ecs.can:912 ["world"] = function(...) -- ./ecs/ecs.can:917 local world -- ./ecs/ecs.can:918 world = setmetatable({ -- ./ecs/ecs.can:918 ["filter"] = ecs["all"](), -- ./ecs/ecs.can:919 ["s"] = {}, -- ./ecs/ecs.can:920 ["_skiplist"] = skipNew() -- ./ecs/ecs.can:921 }, { ["__index"] = system_mt }) -- ./ecs/ecs.can:922 world["_has"] = world["_skiplist"]["previous"][1] -- ./ecs/ecs.can:923 world["world"] = world -- ./ecs/ecs.can:924 world["w"] = world -- ./ecs/ecs.can:925 world["systems"] = recInstanciateSystems(world, { ... }) -- ./ecs/ecs.can:926 recCallOnAddToWorld(world, world["systems"]) -- ./ecs/ecs.can:927 return world -- ./ecs/ecs.can:928 end, -- ./ecs/ecs.can:928 ["all"] = function(...) -- ./ecs/ecs.can:934 if ... then -- ./ecs/ecs.can:935 local l -- ./ecs/ecs.can:936 l = { ... } -- ./ecs/ecs.can:936 return function(s, e) -- ./ecs/ecs.can:937 for _, k in ipairs(l) do -- ./ecs/ecs.can:938 if e[k] == nil then -- ./ecs/ecs.can:939 return false -- ./ecs/ecs.can:940 end -- ./ecs/ecs.can:940 end -- ./ecs/ecs.can:940 return true -- ./ecs/ecs.can:943 end -- ./ecs/ecs.can:943 else -- ./ecs/ecs.can:943 return alwaysTrue -- ./ecs/ecs.can:946 end -- ./ecs/ecs.can:946 end, -- ./ecs/ecs.can:946 ["any"] = function(...) -- ./ecs/ecs.can:953 if ... then -- ./ecs/ecs.can:954 local l -- ./ecs/ecs.can:955 l = { ... } -- ./ecs/ecs.can:955 return function(s, e) -- ./ecs/ecs.can:956 for _, k in ipairs(l) do -- ./ecs/ecs.can:957 if e[k] ~= nil then -- ./ecs/ecs.can:958 return true -- ./ecs/ecs.can:959 end -- ./ecs/ecs.can:959 end -- ./ecs/ecs.can:959 return false -- ./ecs/ecs.can:962 end -- ./ecs/ecs.can:962 else -- ./ecs/ecs.can:962 return alwaysFalse -- ./ecs/ecs.can:965 end -- ./ecs/ecs.can:965 end, -- ./ecs/ecs.can:965 ["scene"] = function(name, systems, entities) -- ./ecs/ecs.can:983 if systems == nil then systems = {} end -- ./ecs/ecs.can:983 if entities == nil then entities = {} end -- ./ecs/ecs.can:983 assert(scene, "ubiquitousse.scene unavailable") -- ./ecs/ecs.can:984 local s -- ./ecs/ecs.can:985 s = scene["new"](name) -- ./ecs/ecs.can:985 local w -- ./ecs/ecs.can:986 s["enter"] = function(self) -- ./ecs/ecs.can:988 local sys, ent = systems, entities -- ./ecs/ecs.can:989 if type(systems) == "function" then -- ./ecs/ecs.can:990 sys = { systems() } -- ./ecs/ecs.can:990 end -- ./ecs/ecs.can:990 if type(entities) == "function" then -- ./ecs/ecs.can:991 ent = { entities() } -- ./ecs/ecs.can:991 end -- ./ecs/ecs.can:991 w = ecs["world"](unpack(sys)) -- ./ecs/ecs.can:992 w:add(unpack(ent)) -- ./ecs/ecs.can:993 end -- ./ecs/ecs.can:993 s["exit"] = function(self) -- ./ecs/ecs.can:995 w:destroy() -- ./ecs/ecs.can:996 end -- ./ecs/ecs.can:996 s["suspend"] = function(self) -- ./ecs/ecs.can:998 w:emit("onSuspend") -- ./ecs/ecs.can:999 end -- ./ecs/ecs.can:999 s["resume"] = function(self) -- ./ecs/ecs.can:1001 w:emit("onResume") -- ./ecs/ecs.can:1002 end -- ./ecs/ecs.can:1002 s["update"] = function(self, dt) -- ./ecs/ecs.can:1004 w:update(dt) -- ./ecs/ecs.can:1005 end -- ./ecs/ecs.can:1005 s["draw"] = function(self) -- ./ecs/ecs.can:1007 w:draw() -- ./ecs/ecs.can:1008 end -- ./ecs/ecs.can:1008 return s -- ./ecs/ecs.can:1011 end -- ./ecs/ecs.can:1011 } -- ./ecs/ecs.can:1011 return ecs -- ./ecs/ecs.can:1015