mirror of
https://github.com/Reuh/ubiquitousse.git
synced 2025-10-27 09:09:30 +00:00
Add make script and precompile Candran files
This commit is contained in:
parent
bfa73f6dd0
commit
bfbe236e58
18 changed files with 1307 additions and 80 deletions
|
|
@ -108,7 +108,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1683,7 +1683,7 @@ its sibling systems (i.e. completely stop the propagation of the event).</li>
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1829,7 +1829,7 @@ end
|
||||||
Level background. </p>
|
Level background. </p>
|
||||||
|
|
||||||
<p> If there is a background image, <code>background.image</code> contains a table <code>{image=image, x=number, y=number, sx=number, sy=number}</code>
|
<p> If there is a background image, <code>background.image</code> contains a table <code>{image=image, x=number, y=number, sx=number, sy=number}</code>
|
||||||
where <a href="../modules/ldtk.html#Tileset.image">image</a> is the LÖVE image (or image filepath if LÖVE not available) <a href="../modules/ldtk.html#Tile.x">x</a> and <a href="../modules/ldtk.html#Entity.y">y</a> are the top-left position,
|
where <a href="../modules/ldtk.html#Tileset.image">image</a> is the LÖVE image (or image filepath if LÖVE not available) <a href="../modules/ldtk.html#Level.x">x</a> and <a href="../modules/ldtk.html#Level.y">y</a> are the top-left position,
|
||||||
and <a href="../modules/ldtk.html#Entity.sx">sx</a> and <a href="../modules/ldtk.html#Entity.sy">sy</a> the horizontal and vertical scale factors.
|
and <a href="../modules/ldtk.html#Entity.sx">sx</a> and <a href="../modules/ldtk.html#Entity.sy">sy</a> the horizontal and vertical scale factors.
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -1904,7 +1904,7 @@ end
|
||||||
<li>Enum are converted into a Lua string giving the currently selected enum value.</li>
|
<li>Enum are converted into a Lua string giving the currently selected enum value.</li>
|
||||||
<li>Filepath are converted into a Lua string giving the file path.</li>
|
<li>Filepath are converted into a Lua string giving the file path.</li>
|
||||||
<li>Arrays are converted into a Lua table with the elements in it as a list.</li>
|
<li>Arrays are converted into a Lua table with the elements in it as a list.</li>
|
||||||
<li>Points are converted into a Lua table with the fields <a href="../modules/ldtk.html#Tile.x">x</a> and <a href="../modules/ldtk.html#Entity.y">y</a>: <code>{ x=number, y=number }</code>.</li>
|
<li>Points are converted into a Lua table with the fields <a href="../modules/ldtk.html#Level.x">x</a> and <a href="../modules/ldtk.html#Level.y">y</a>: <code>{ x=number, y=number }</code>.</li>
|
||||||
<li>Colors are converted into a Lua table with the red, green and blue components in [0-1] as a list: <code>{r,g,b}</code>.</li>
|
<li>Colors are converted into a Lua table with the red, green and blue components in [0-1] as a list: <code>{r,g,b}</code>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
@ -1930,7 +1930,7 @@ end
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -702,7 +702,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -414,7 +414,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -1153,7 +1153,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,11 @@
|
||||||
|
|
||||||
<h1>Module <code>ubiquitousse</code></h1>
|
<h1>Module <code>ubiquitousse</code></h1>
|
||||||
<p>Ubiquitousse main module.</p>
|
<p>Ubiquitousse main module.</p>
|
||||||
<p> Set of various Lua libraries to make game development easier, mainly made to be used alongside the <a href="https://love2d.org/">LÖVE</a> game framework.
|
<p><p>Set of various Lua libraries to make game development easier, mainly made to be used alongside the <a href="https://love2d.org/">LÖVE</a> game framework.
|
||||||
Nothing that hasn’t been done before, but these are tailored to what I need. They can be used independently too, and are relatively portable, even without LÖVE.</p>
|
Nothing that hasn’t been done before, but these are tailored to what I need. They can be used independently too, and are relatively portable, even without LÖVE.</p>
|
||||||
|
|
||||||
<p> This is the main module, which will try to load every other Ubiquitousse module when required and may even provide a few convenience functions.</p>
|
<p>This is the main module, which will try to load every other Ubiquitousse module when required,
|
||||||
|
and also perform a quick LÖVE version check and show a warning in case of potential incompatibility.</p>
|
||||||
<p> This also perform a quick LÖVE version check and show a warning in case of potential incompatibility.</p>
|
|
||||||
|
|
||||||
<p><strong>Regarding Ubiquitousse’s organization</strong></p>
|
<p><strong>Regarding Ubiquitousse’s organization</strong></p>
|
||||||
|
|
||||||
|
|
@ -80,7 +79,16 @@
|
||||||
In order to keep a good idea of how portable this all is, other dependencies, including LÖVE, are explicited at the top of every module file and in specific
|
In order to keep a good idea of how portable this all is, other dependencies, including LÖVE, are explicited at the top of every module file and in specific
|
||||||
functions definition using the <code>@require</code> tag (e.g., <code>— @require love</code> for LÖVE).</p>
|
functions definition using the <code>@require</code> tag (e.g., <code>— @require love</code> for LÖVE).</p>
|
||||||
|
|
||||||
<p> Some modules are developped in <a href="https://github.com/Reuh/candran">Candran</a> (.can files), but can easily be compiled into regular Lua code.</p>
|
<p>Some modules are developped in <a href="https://github.com/Reuh/candran">Candran</a> (<code>.can</code> files), but can easily be compiled into regular Lua code. In fact,
|
||||||
|
you will find precompiled Lua files in the ubiquitousse repository alongside the Candran files, so you don’t have to install Candran yourself and everything
|
||||||
|
should be pretty much plug and play.</p>
|
||||||
|
|
||||||
|
<p>Regarding the documentation: Ubiquitousse uses LDoc/LuaDoc styled-comments, but since LDoc hates me and my code, the
|
||||||
|
generated result is mostly garbage, so to generate the documentation you will need to use my <a href="https://github.com/Reuh/LDoc">LDoc fork</a>
|
||||||
|
which I modified to force LDoc to like me.</p>
|
||||||
|
|
||||||
|
<p>If you want to recompile the Candran files or the documentation yourself, there’s a build script <code>make</code> available at the root of
|
||||||
|
the repository to save you a few seconds.</p>
|
||||||
|
|
||||||
<p>Units used in the API documentation, unless written otherwise:</p>
|
<p>Units used in the API documentation, unless written otherwise:</p>
|
||||||
|
|
||||||
|
|
@ -102,10 +110,7 @@
|
||||||
<li>lowerCamelCase is expected for everything else.</li>
|
<li>lowerCamelCase is expected for everything else.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</p>
|
||||||
<p> Regarding the documentation: Ubiquitousse uses LDoc/LuaDoc styled-comments, but since LDoc hates me and my code, the
|
|
||||||
generated result is mostly garbage, so to generate the documentation you will need to use my <a href="https://github.com/Reuh/LDoc">LDoc fork</a>
|
|
||||||
which I modified to force LDoc to like me.</p>
|
|
||||||
<h3>Usage:</h3>
|
<h3>Usage:</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<pre class="example">local ubiquitousse = require("ubiquitousse")
|
<pre class="example">local ubiquitousse = require("ubiquitousse")
|
||||||
|
|
@ -362,7 +367,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -784,7 +784,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
</div> <!-- id="main" -->
|
</div> <!-- id="main" -->
|
||||||
<div id="about">
|
<div id="about">
|
||||||
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
|
||||||
<i style="float:right;">Last updated 2021-12-27 16:25:25 </i>
|
<i style="float:right;">Last updated 2021-12-27 17:22:39 </i>
|
||||||
</div> <!-- id="about" -->
|
</div> <!-- id="about" -->
|
||||||
</div> <!-- id="container" -->
|
</div> <!-- id="container" -->
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
33
ecs/children.lua
Normal file
33
ecs/children.lua
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
return { -- ./ecs/children.can:12
|
||||||
|
["name"] = "children", -- ./ecs/children.can:13
|
||||||
|
["filter"] = true, -- ./ecs/children.can:14
|
||||||
|
["onAdd"] = function(self, e) -- ./ecs/children.can:15
|
||||||
|
if not e["children"] then -- ./ecs/children.can:16
|
||||||
|
e["children"] = {} -- ./ecs/children.can:16
|
||||||
|
end -- ./ecs/children.can:16
|
||||||
|
if e["parent"] then -- ./ecs/children.can:17
|
||||||
|
local parentchildren -- ./ecs/children.can:18
|
||||||
|
parentchildren = e["parent"]["children"] -- ./ecs/children.can:18
|
||||||
|
table["insert"](parentchildren, e) -- ./ecs/children.can:19
|
||||||
|
end -- ./ecs/children.can:19
|
||||||
|
for _, o in ipairs(e["children"]) do -- ./ecs/children.can:21
|
||||||
|
o["parent"] = e -- ./ecs/children.can:22
|
||||||
|
self["world"]:add(o) -- ./ecs/children.can:23
|
||||||
|
end -- ./ecs/children.can:23
|
||||||
|
end, -- ./ecs/children.can:23
|
||||||
|
["onRemove"] = function(self, e) -- ./ecs/children.can:26
|
||||||
|
for i = # e["children"], 1, - 1 do -- ./ecs/children.can:27
|
||||||
|
self["world"]:remove(e["children"][i]) -- ./ecs/children.can:28
|
||||||
|
end -- ./ecs/children.can:28
|
||||||
|
if e["parent"] then -- ./ecs/children.can:30
|
||||||
|
local parentchildren -- ./ecs/children.can:31
|
||||||
|
parentchildren = e["parent"]["children"] -- ./ecs/children.can:31
|
||||||
|
for i = # parentchildren, 1, - 1 do -- ./ecs/children.can:32
|
||||||
|
if parentchildren[i] == e then -- ./ecs/children.can:33
|
||||||
|
table["remove"](parentchildren, i) -- ./ecs/children.can:34
|
||||||
|
break -- ./ecs/children.can:35
|
||||||
|
end -- ./ecs/children.can:35
|
||||||
|
end -- ./ecs/children.can:35
|
||||||
|
end -- ./ecs/children.can:35
|
||||||
|
end -- ./ecs/children.can:35
|
||||||
|
} -- ./ecs/children.can:35
|
||||||
494
ecs/ecs.lua
Normal file
494
ecs/ecs.lua
Normal file
|
|
@ -0,0 +1,494 @@
|
||||||
|
local loaded, scene -- ./ecs/ecs.can:51
|
||||||
|
if ... then -- ./ecs/ecs.can:52
|
||||||
|
loaded, scene = pcall(require, (...):match("^(.-)ecs") .. "scene") -- ./ecs/ecs.can:52
|
||||||
|
end -- ./ecs/ecs.can:52
|
||||||
|
if not loaded then -- ./ecs/ecs.can:53
|
||||||
|
scene = nil -- ./ecs/ecs.can:53
|
||||||
|
end -- ./ecs/ecs.can:53
|
||||||
|
local ecs -- ./ecs/ecs.can:55
|
||||||
|
local recDestroySystems -- ./ecs/ecs.can:102
|
||||||
|
recDestroySystems = function(system) -- ./ecs/ecs.can:102
|
||||||
|
for i = # system["systems"], 1, - 1 do -- ./ecs/ecs.can:103
|
||||||
|
local s -- ./ecs/ecs.can:104
|
||||||
|
s = system["systems"][i] -- ./ecs/ecs.can:104
|
||||||
|
recDestroySystems(s) -- ./ecs/ecs.can:105
|
||||||
|
s:onDestroy() -- ./ecs/ecs.can:106
|
||||||
|
system["systems"][i] = nil -- ./ecs/ecs.can:107
|
||||||
|
if s["name"] then -- ./ecs/ecs.can:108
|
||||||
|
system["world"]["s"][s["name"]] = nil -- ./ecs/ecs.can:109
|
||||||
|
end -- ./ecs/ecs.can:109
|
||||||
|
end -- ./ecs/ecs.can:109
|
||||||
|
end -- ./ecs/ecs.can:109
|
||||||
|
local recCallOnRemoveFromWorld -- ./ecs/ecs.can:114
|
||||||
|
recCallOnRemoveFromWorld = function(world, systems) -- ./ecs/ecs.can:114
|
||||||
|
for _, s in ipairs(systems) do -- ./ecs/ecs.can:115
|
||||||
|
s:clear() -- ./ecs/ecs.can:116
|
||||||
|
recCallOnRemoveFromWorld(world, s["systems"]) -- ./ecs/ecs.can:117
|
||||||
|
s:onRemoveFromWorld(world) -- ./ecs/ecs.can:118
|
||||||
|
end -- ./ecs/ecs.can:118
|
||||||
|
end -- ./ecs/ecs.can:118
|
||||||
|
local nextEntity -- ./ecs/ecs.can:123
|
||||||
|
nextEntity = function(s) -- ./ecs/ecs.can:123
|
||||||
|
if s[1] then -- ./ecs/ecs.can:124
|
||||||
|
local var -- ./ecs/ecs.can:125
|
||||||
|
var = s[1][1] -- ./ecs/ecs.can:125
|
||||||
|
s[1] = s[1][2] -- ./ecs/ecs.can:126
|
||||||
|
return var -- ./ecs/ecs.can:127
|
||||||
|
else -- ./ecs/ecs.can:127
|
||||||
|
return nil -- ./ecs/ecs.can:129
|
||||||
|
end -- ./ecs/ecs.can:129
|
||||||
|
end -- ./ecs/ecs.can:129
|
||||||
|
local copy -- ./ecs/ecs.can:135
|
||||||
|
copy = function(a, b, cache) -- ./ecs/ecs.can:135
|
||||||
|
if cache == nil then cache = {} end -- ./ecs/ecs.can:135
|
||||||
|
for k, v in pairs(a) do -- ./ecs/ecs.can:136
|
||||||
|
if type(v) == "table" then -- ./ecs/ecs.can:137
|
||||||
|
if b[k] == nil then -- ./ecs/ecs.can:138
|
||||||
|
if cache[v] then -- ./ecs/ecs.can:139
|
||||||
|
b[k] = cache[v] -- ./ecs/ecs.can:140
|
||||||
|
else -- ./ecs/ecs.can:140
|
||||||
|
cache[v] = {} -- ./ecs/ecs.can:142
|
||||||
|
b[k] = cache[v] -- ./ecs/ecs.can:143
|
||||||
|
copy(v, b[k], cache) -- ./ecs/ecs.can:144
|
||||||
|
setmetatable(b[k], getmetatable(v)) -- ./ecs/ecs.can:145
|
||||||
|
end -- ./ecs/ecs.can:145
|
||||||
|
elseif type(b[k]) == "table" then -- ./ecs/ecs.can:147
|
||||||
|
copy(v, b[k], cache) -- ./ecs/ecs.can:148
|
||||||
|
end -- ./ecs/ecs.can:148
|
||||||
|
elseif b[k] == nil then -- ./ecs/ecs.can:150
|
||||||
|
b[k] = v -- ./ecs/ecs.can:151
|
||||||
|
end -- ./ecs/ecs.can:151
|
||||||
|
end -- ./ecs/ecs.can:151
|
||||||
|
end -- ./ecs/ecs.can:151
|
||||||
|
local system_mt -- ./ecs/ecs.can:217
|
||||||
|
system_mt = { -- ./ecs/ecs.can:217
|
||||||
|
["name"] = nil, -- ./ecs/ecs.can:231
|
||||||
|
["systems"] = nil, -- ./ecs/ecs.can:239
|
||||||
|
["interval"] = false, -- ./ecs/ecs.can:245
|
||||||
|
["active"] = true, -- ./ecs/ecs.can:249
|
||||||
|
["visible"] = true, -- ./ecs/ecs.can:253
|
||||||
|
["component"] = nil, -- ./ecs/ecs.can:260
|
||||||
|
["default"] = nil, -- ./ecs/ecs.can:270
|
||||||
|
["filter"] = function(self, e) -- ./ecs/ecs.can:291
|
||||||
|
return false -- ./ecs/ecs.can:291
|
||||||
|
end, -- ./ecs/ecs.can:291
|
||||||
|
["compare"] = function(self, e1, e2) -- ./ecs/ecs.can:303
|
||||||
|
return true -- ./ecs/ecs.can:303
|
||||||
|
end, -- ./ecs/ecs.can:303
|
||||||
|
["onAdd"] = function(self, e, c) -- ./ecs/ecs.can:309
|
||||||
|
-- ./ecs/ecs.can:309
|
||||||
|
end, -- ./ecs/ecs.can:309
|
||||||
|
["onRemove"] = function(self, e, c) -- ./ecs/ecs.can:314
|
||||||
|
-- ./ecs/ecs.can:314
|
||||||
|
end, -- ./ecs/ecs.can:314
|
||||||
|
["onInstance"] = function(self) -- ./ecs/ecs.can:317
|
||||||
|
-- ./ecs/ecs.can:317
|
||||||
|
end, -- ./ecs/ecs.can:317
|
||||||
|
["onAddToWorld"] = function(self, world) -- ./ecs/ecs.can:321
|
||||||
|
-- ./ecs/ecs.can:321
|
||||||
|
end, -- ./ecs/ecs.can:321
|
||||||
|
["onRemoveFromWorld"] = function(self, world) -- ./ecs/ecs.can:325
|
||||||
|
-- ./ecs/ecs.can:325
|
||||||
|
end, -- ./ecs/ecs.can:325
|
||||||
|
["onDestroy"] = function(self) -- ./ecs/ecs.can:328
|
||||||
|
-- ./ecs/ecs.can:328
|
||||||
|
end, -- ./ecs/ecs.can:328
|
||||||
|
["onUpdate"] = function(self, dt) -- ./ecs/ecs.can:333
|
||||||
|
-- ./ecs/ecs.can:333
|
||||||
|
end, -- ./ecs/ecs.can:333
|
||||||
|
["onDraw"] = function(self) -- ./ecs/ecs.can:337
|
||||||
|
-- ./ecs/ecs.can:337
|
||||||
|
end, -- ./ecs/ecs.can:337
|
||||||
|
["process"] = function(self, e, c, dt) -- ./ecs/ecs.can:344
|
||||||
|
-- ./ecs/ecs.can:344
|
||||||
|
end, -- ./ecs/ecs.can:344
|
||||||
|
["render"] = function(self, e, c) -- ./ecs/ecs.can:350
|
||||||
|
-- ./ecs/ecs.can:350
|
||||||
|
end, -- ./ecs/ecs.can:350
|
||||||
|
["onUpdateEnd"] = function(self, dt) -- ./ecs/ecs.can:355
|
||||||
|
-- ./ecs/ecs.can:355
|
||||||
|
end, -- ./ecs/ecs.can:355
|
||||||
|
["onDrawEnd"] = function(self) -- ./ecs/ecs.can:359
|
||||||
|
-- ./ecs/ecs.can:359
|
||||||
|
end, -- ./ecs/ecs.can:359
|
||||||
|
["world"] = nil, -- ./ecs/ecs.can:369
|
||||||
|
["w"] = nil, -- ./ecs/ecs.can:373
|
||||||
|
["entityCount"] = 0, -- ./ecs/ecs.can:377
|
||||||
|
["s"] = nil, -- ./ecs/ecs.can:381
|
||||||
|
["_first"] = nil, -- ./ecs/ecs.can:387
|
||||||
|
["_previous"] = nil, -- ./ecs/ecs.can:391
|
||||||
|
["_waited"] = 0, -- ./ecs/ecs.can:394
|
||||||
|
["add"] = function(self, e, ...) -- ./ecs/ecs.can:415
|
||||||
|
if e ~= nil and not self["_previous"][e] and self:filter(e) then -- ./ecs/ecs.can:416
|
||||||
|
if self["component"] and self["default"] then -- ./ecs/ecs.can:418
|
||||||
|
copy({ [self["component"]] = self["default"] }, e) -- ./ecs/ecs.can:419
|
||||||
|
end -- ./ecs/ecs.can:419
|
||||||
|
if self["_first"] == nil then -- ./ecs/ecs.can:422
|
||||||
|
self["_first"] = { -- ./ecs/ecs.can:423
|
||||||
|
e, -- ./ecs/ecs.can:423
|
||||||
|
nil -- ./ecs/ecs.can:423
|
||||||
|
} -- ./ecs/ecs.can:423
|
||||||
|
self["_previous"][e] = true -- ./ecs/ecs.can:424
|
||||||
|
elseif self:compare(e, self["_first"][1]) then -- ./ecs/ecs.can:425
|
||||||
|
local nxt -- ./ecs/ecs.can:426
|
||||||
|
nxt = self["_first"] -- ./ecs/ecs.can:426
|
||||||
|
self["_first"] = { -- ./ecs/ecs.can:427
|
||||||
|
e, -- ./ecs/ecs.can:427
|
||||||
|
nxt -- ./ecs/ecs.can:427
|
||||||
|
} -- ./ecs/ecs.can:427
|
||||||
|
self["_previous"][e] = true -- ./ecs/ecs.can:428
|
||||||
|
self["_previous"][nxt[1]] = self["_first"] -- ./ecs/ecs.can:429
|
||||||
|
else -- ./ecs/ecs.can:429
|
||||||
|
local entity -- ./ecs/ecs.can:431
|
||||||
|
entity = self["_first"] -- ./ecs/ecs.can:431
|
||||||
|
while entity[2] ~= nil do -- ./ecs/ecs.can:432
|
||||||
|
if self:compare(e, entity[2][1]) then -- ./ecs/ecs.can:433
|
||||||
|
local nxt -- ./ecs/ecs.can:434
|
||||||
|
nxt = entity[2] -- ./ecs/ecs.can:434
|
||||||
|
entity[2] = { -- ./ecs/ecs.can:435
|
||||||
|
e, -- ./ecs/ecs.can:435
|
||||||
|
nxt -- ./ecs/ecs.can:435
|
||||||
|
} -- ./ecs/ecs.can:435
|
||||||
|
self["_previous"][e] = entity -- ./ecs/ecs.can:436
|
||||||
|
self["_previous"][nxt[1]] = entity[2] -- ./ecs/ecs.can:437
|
||||||
|
break -- ./ecs/ecs.can:438
|
||||||
|
end -- ./ecs/ecs.can:438
|
||||||
|
entity = entity[2] -- ./ecs/ecs.can:440
|
||||||
|
end -- ./ecs/ecs.can:440
|
||||||
|
if entity[2] == nil then -- ./ecs/ecs.can:442
|
||||||
|
entity[2] = { -- ./ecs/ecs.can:443
|
||||||
|
e, -- ./ecs/ecs.can:443
|
||||||
|
nil -- ./ecs/ecs.can:443
|
||||||
|
} -- ./ecs/ecs.can:443
|
||||||
|
self["_previous"][e] = entity -- ./ecs/ecs.can:444
|
||||||
|
end -- ./ecs/ecs.can:444
|
||||||
|
end -- ./ecs/ecs.can:444
|
||||||
|
self["entityCount"] = self["entityCount"] + (1) -- ./ecs/ecs.can:448
|
||||||
|
self:onAdd(e, e[self["component"]]) -- ./ecs/ecs.can:449
|
||||||
|
if self["_previous"][e] then -- ./ecs/ecs.can:451
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:452
|
||||||
|
s:add(e) -- ./ecs/ecs.can:453
|
||||||
|
end -- ./ecs/ecs.can:453
|
||||||
|
end -- ./ecs/ecs.can:453
|
||||||
|
end -- ./ecs/ecs.can:453
|
||||||
|
if ... then -- ./ecs/ecs.can:457
|
||||||
|
return e, self:add(...) -- ./ecs/ecs.can:458
|
||||||
|
else -- ./ecs/ecs.can:458
|
||||||
|
return e -- ./ecs/ecs.can:460
|
||||||
|
end -- ./ecs/ecs.can:460
|
||||||
|
end, -- ./ecs/ecs.can:460
|
||||||
|
["remove"] = function(self, e, ...) -- ./ecs/ecs.can:475
|
||||||
|
if e ~= nil then -- ./ecs/ecs.can:476
|
||||||
|
if self["_previous"][e] then -- ./ecs/ecs.can:477
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:479
|
||||||
|
s:remove(e) -- ./ecs/ecs.can:480
|
||||||
|
end -- ./ecs/ecs.can:480
|
||||||
|
end -- ./ecs/ecs.can:480
|
||||||
|
if self["_previous"][e] then -- ./ecs/ecs.can:483
|
||||||
|
local prev -- ./ecs/ecs.can:485
|
||||||
|
prev = self["_previous"][e] -- ./ecs/ecs.can:485
|
||||||
|
if prev == true then -- ./ecs/ecs.can:486
|
||||||
|
self["_first"] = self["_first"][2] -- ./ecs/ecs.can:487
|
||||||
|
if self["_first"] then -- ./ecs/ecs.can:488
|
||||||
|
self["_previous"][self["_first"][1]] = true -- ./ecs/ecs.can:489
|
||||||
|
end -- ./ecs/ecs.can:489
|
||||||
|
else -- ./ecs/ecs.can:489
|
||||||
|
prev[2] = prev[2][2] -- ./ecs/ecs.can:492
|
||||||
|
if prev[2] then -- ./ecs/ecs.can:493
|
||||||
|
self["_previous"][prev[2][1]] = prev -- ./ecs/ecs.can:494
|
||||||
|
end -- ./ecs/ecs.can:494
|
||||||
|
end -- ./ecs/ecs.can:494
|
||||||
|
self["_previous"][e] = nil -- ./ecs/ecs.can:498
|
||||||
|
self["entityCount"] = self["entityCount"] - (1) -- ./ecs/ecs.can:499
|
||||||
|
self:onRemove(e, e[self["component"]]) -- ./ecs/ecs.can:500
|
||||||
|
end -- ./ecs/ecs.can:500
|
||||||
|
end -- ./ecs/ecs.can:500
|
||||||
|
if ... then -- ./ecs/ecs.can:503
|
||||||
|
return e, self:remove(...) -- ./ecs/ecs.can:504
|
||||||
|
else -- ./ecs/ecs.can:504
|
||||||
|
return e -- ./ecs/ecs.can:506
|
||||||
|
end -- ./ecs/ecs.can:506
|
||||||
|
end, -- ./ecs/ecs.can:506
|
||||||
|
["refresh"] = function(self, e, ...) -- ./ecs/ecs.can:518
|
||||||
|
if e ~= nil then -- ./ecs/ecs.can:519
|
||||||
|
if not self["_previous"][e] then -- ./ecs/ecs.can:520
|
||||||
|
self:add(e) -- ./ecs/ecs.can:521
|
||||||
|
elseif self["_previous"][e] then -- ./ecs/ecs.can:522
|
||||||
|
if not self:filter(e) then -- ./ecs/ecs.can:523
|
||||||
|
self:remove(e) -- ./ecs/ecs.can:524
|
||||||
|
else -- ./ecs/ecs.can:524
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:526
|
||||||
|
s:refresh(e) -- ./ecs/ecs.can:527
|
||||||
|
end -- ./ecs/ecs.can:527
|
||||||
|
end -- ./ecs/ecs.can:527
|
||||||
|
end -- ./ecs/ecs.can:527
|
||||||
|
end -- ./ecs/ecs.can:527
|
||||||
|
if ... then -- ./ecs/ecs.can:532
|
||||||
|
return e, self:refresh(...) -- ./ecs/ecs.can:533
|
||||||
|
else -- ./ecs/ecs.can:533
|
||||||
|
return e -- ./ecs/ecs.can:535
|
||||||
|
end -- ./ecs/ecs.can:535
|
||||||
|
end, -- ./ecs/ecs.can:535
|
||||||
|
["reorder"] = function(self, e, ...) -- ./ecs/ecs.can:547
|
||||||
|
if e ~= nil then -- ./ecs/ecs.can:548
|
||||||
|
if self["_previous"][e] then -- ./ecs/ecs.can:549
|
||||||
|
local prev -- ./ecs/ecs.can:550
|
||||||
|
prev = self["_previous"][e] -- ./ecs/ecs.can:550
|
||||||
|
local next -- ./ecs/ecs.can:551
|
||||||
|
next = prev == true and self["_first"][2] or prev[2][2] -- ./ecs/ecs.can:551
|
||||||
|
if prev == true then -- ./ecs/ecs.can:553
|
||||||
|
self["_first"] = self["_first"][2] -- ./ecs/ecs.can:554
|
||||||
|
else -- ./ecs/ecs.can:554
|
||||||
|
prev[2] = next -- ./ecs/ecs.can:556
|
||||||
|
end -- ./ecs/ecs.can:556
|
||||||
|
if next then -- ./ecs/ecs.can:558
|
||||||
|
self["_previous"][next[1]] = prev -- ./ecs/ecs.can:559
|
||||||
|
end -- ./ecs/ecs.can:559
|
||||||
|
while prev ~= true and self:compare(e, prev[1]) do -- ./ecs/ecs.can:562
|
||||||
|
next = prev -- ./ecs/ecs.can:563
|
||||||
|
prev = self["_previous"][prev[1]] -- ./ecs/ecs.can:564
|
||||||
|
end -- ./ecs/ecs.can:564
|
||||||
|
while next ~= nil and not self:compare(e, next[1]) do -- ./ecs/ecs.can:566
|
||||||
|
prev = next -- ./ecs/ecs.can:567
|
||||||
|
next = next[2] -- ./ecs/ecs.can:568
|
||||||
|
end -- ./ecs/ecs.can:568
|
||||||
|
local new -- ./ecs/ecs.can:571
|
||||||
|
new = { -- ./ecs/ecs.can:571
|
||||||
|
e, -- ./ecs/ecs.can:571
|
||||||
|
next -- ./ecs/ecs.can:571
|
||||||
|
} -- ./ecs/ecs.can:571
|
||||||
|
self["_previous"][e] = prev -- ./ecs/ecs.can:572
|
||||||
|
if next then -- ./ecs/ecs.can:573
|
||||||
|
self["_previous"][next[1]] = new -- ./ecs/ecs.can:574
|
||||||
|
end -- ./ecs/ecs.can:574
|
||||||
|
if prev == true then -- ./ecs/ecs.can:576
|
||||||
|
self["_first"] = new -- ./ecs/ecs.can:577
|
||||||
|
else -- ./ecs/ecs.can:577
|
||||||
|
prev[2] = new -- ./ecs/ecs.can:579
|
||||||
|
end -- ./ecs/ecs.can:579
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:582
|
||||||
|
s:reorder(e) -- ./ecs/ecs.can:583
|
||||||
|
end -- ./ecs/ecs.can:583
|
||||||
|
end -- ./ecs/ecs.can:583
|
||||||
|
end -- ./ecs/ecs.can:583
|
||||||
|
if ... then -- ./ecs/ecs.can:587
|
||||||
|
return e, self:reorder(...) -- ./ecs/ecs.can:588
|
||||||
|
else -- ./ecs/ecs.can:588
|
||||||
|
return e -- ./ecs/ecs.can:590
|
||||||
|
end -- ./ecs/ecs.can:590
|
||||||
|
end, -- ./ecs/ecs.can:590
|
||||||
|
["has"] = function(self, e, ...) -- ./ecs/ecs.can:599
|
||||||
|
local has -- ./ecs/ecs.can:600
|
||||||
|
has = e == nil or not not self["_previous"][e] -- ./ecs/ecs.can:600
|
||||||
|
if ... then -- ./ecs/ecs.can:601
|
||||||
|
return has and self:has(...) -- ./ecs/ecs.can:602
|
||||||
|
else -- ./ecs/ecs.can:602
|
||||||
|
return has -- ./ecs/ecs.can:604
|
||||||
|
end -- ./ecs/ecs.can:604
|
||||||
|
end, -- ./ecs/ecs.can:604
|
||||||
|
["iter"] = function(self) -- ./ecs/ecs.can:609
|
||||||
|
return nextEntity, { self["_first"] } -- ./ecs/ecs.can:610
|
||||||
|
end, -- ./ecs/ecs.can:610
|
||||||
|
["clear"] = function(self) -- ./ecs/ecs.can:613
|
||||||
|
for e in self:iter() do -- ./ecs/ecs.can:614
|
||||||
|
self:remove(e) -- ./ecs/ecs.can:615
|
||||||
|
end -- ./ecs/ecs.can:615
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:617
|
||||||
|
s:clear() -- ./ecs/ecs.can:618
|
||||||
|
end -- ./ecs/ecs.can:618
|
||||||
|
end, -- ./ecs/ecs.can:618
|
||||||
|
["update"] = function(self, dt) -- ./ecs/ecs.can:625
|
||||||
|
if self["active"] then -- ./ecs/ecs.can:626
|
||||||
|
if self["interval"] then -- ./ecs/ecs.can:627
|
||||||
|
self["_waited"] = self["_waited"] + (dt) -- ./ecs/ecs.can:628
|
||||||
|
if self["_waited"] < self["interval"] then -- ./ecs/ecs.can:629
|
||||||
|
return -- ./ecs/ecs.can:630
|
||||||
|
end -- ./ecs/ecs.can:630
|
||||||
|
end -- ./ecs/ecs.can:630
|
||||||
|
self:onUpdate(dt) -- ./ecs/ecs.can:633
|
||||||
|
if self["process"] ~= system_mt["process"] then -- ./ecs/ecs.can:634
|
||||||
|
for e in self:iter() do -- ./ecs/ecs.can:635
|
||||||
|
self:process(e, e[self["component"]], dt) -- ./ecs/ecs.can:636
|
||||||
|
end -- ./ecs/ecs.can:636
|
||||||
|
end -- ./ecs/ecs.can:636
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:639
|
||||||
|
s:update(dt) -- ./ecs/ecs.can:640
|
||||||
|
end -- ./ecs/ecs.can:640
|
||||||
|
self:onUpdateEnd(dt) -- ./ecs/ecs.can:642
|
||||||
|
if self["interval"] then -- ./ecs/ecs.can:643
|
||||||
|
self["_waited"] = self["_waited"] - (self["interval"]) -- ./ecs/ecs.can:644
|
||||||
|
end -- ./ecs/ecs.can:644
|
||||||
|
end -- ./ecs/ecs.can:644
|
||||||
|
end, -- ./ecs/ecs.can:644
|
||||||
|
["draw"] = function(self) -- ./ecs/ecs.can:651
|
||||||
|
if self["visible"] then -- ./ecs/ecs.can:652
|
||||||
|
self:onDraw() -- ./ecs/ecs.can:653
|
||||||
|
if self["render"] ~= system_mt["render"] then -- ./ecs/ecs.can:654
|
||||||
|
for e in self:iter() do -- ./ecs/ecs.can:655
|
||||||
|
self:render(e, e[self["component"]]) -- ./ecs/ecs.can:656
|
||||||
|
end -- ./ecs/ecs.can:656
|
||||||
|
end -- ./ecs/ecs.can:656
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:659
|
||||||
|
s:draw() -- ./ecs/ecs.can:660
|
||||||
|
end -- ./ecs/ecs.can:660
|
||||||
|
self:onDrawEnd() -- ./ecs/ecs.can:662
|
||||||
|
end -- ./ecs/ecs.can:662
|
||||||
|
end, -- ./ecs/ecs.can:662
|
||||||
|
["callback"] = function(self, name, e, ...) -- ./ecs/ecs.can:675
|
||||||
|
if self["_previous"][e] and self[name] then -- ./ecs/ecs.can:677
|
||||||
|
self[name](self, e, e[self["component"]], ...) -- ./ecs/ecs.can:678
|
||||||
|
end -- ./ecs/ecs.can:678
|
||||||
|
if self["_previous"][e] then -- ./ecs/ecs.can:681
|
||||||
|
for _, ss in ipairs(self["systems"]) do -- ./ecs/ecs.can:682
|
||||||
|
ss:callback(name, e, ...) -- ./ecs/ecs.can:683
|
||||||
|
end -- ./ecs/ecs.can:683
|
||||||
|
end -- ./ecs/ecs.can:683
|
||||||
|
end, -- ./ecs/ecs.can:683
|
||||||
|
["emit"] = function(self, name, ...) -- ./ecs/ecs.can:708
|
||||||
|
local status -- ./ecs/ecs.can:710
|
||||||
|
if self[name] then -- ./ecs/ecs.can:711
|
||||||
|
status = self[name](self, ...) -- ./ecs/ecs.can:712
|
||||||
|
end -- ./ecs/ecs.can:712
|
||||||
|
if status ~= "stop" and status ~= "capture" then -- ./ecs/ecs.can:715
|
||||||
|
for _, s in ipairs(self["systems"]) do -- ./ecs/ecs.can:716
|
||||||
|
status = s:emit(name, ...) -- ./ecs/ecs.can:717
|
||||||
|
if status == "capture" then -- ./ecs/ecs.can:718
|
||||||
|
break -- ./ecs/ecs.can:718
|
||||||
|
end -- ./ecs/ecs.can:718
|
||||||
|
end -- ./ecs/ecs.can:718
|
||||||
|
end -- ./ecs/ecs.can:718
|
||||||
|
return status -- ./ecs/ecs.can:721
|
||||||
|
end, -- ./ecs/ecs.can:721
|
||||||
|
["destroy"] = function(self) -- ./ecs/ecs.can:724
|
||||||
|
recCallOnRemoveFromWorld(self["world"], { self }) -- ./ecs/ecs.can:725
|
||||||
|
recDestroySystems({ ["systems"] = { self } }) -- ./ecs/ecs.can:726
|
||||||
|
end -- ./ecs/ecs.can:726
|
||||||
|
} -- ./ecs/ecs.can:726
|
||||||
|
local alwaysTrue -- ./ecs/ecs.can:731
|
||||||
|
alwaysTrue = function() -- ./ecs/ecs.can:731
|
||||||
|
return true -- ./ecs/ecs.can:731
|
||||||
|
end -- ./ecs/ecs.can:731
|
||||||
|
local alwaysFalse -- ./ecs/ecs.can:732
|
||||||
|
alwaysFalse = function() -- ./ecs/ecs.can:732
|
||||||
|
return false -- ./ecs/ecs.can:732
|
||||||
|
end -- ./ecs/ecs.can:732
|
||||||
|
local recInstanciateSystems -- ./ecs/ecs.can:737
|
||||||
|
recInstanciateSystems = function(world, systems) -- ./ecs/ecs.can:737
|
||||||
|
local t -- ./ecs/ecs.can:738
|
||||||
|
t = {} -- ./ecs/ecs.can:738
|
||||||
|
for _, s in ipairs(systems) do -- ./ecs/ecs.can:739
|
||||||
|
local system -- ./ecs/ecs.can:740
|
||||||
|
system = setmetatable({ -- ./ecs/ecs.can:742
|
||||||
|
["systems"] = recInstanciateSystems(world, s["systems"] or {}), -- ./ecs/ecs.can:743
|
||||||
|
["world"] = world, -- ./ecs/ecs.can:744
|
||||||
|
["w"] = world, -- ./ecs/ecs.can:745
|
||||||
|
["s"] = world["s"], -- ./ecs/ecs.can:746
|
||||||
|
["_previous"] = {} -- ./ecs/ecs.can:747
|
||||||
|
}, { ["__index"] = function(self, k) -- ./ecs/ecs.can:749
|
||||||
|
if s[k] ~= nil then -- ./ecs/ecs.can:750
|
||||||
|
return s[k] -- ./ecs/ecs.can:751
|
||||||
|
else -- ./ecs/ecs.can:751
|
||||||
|
return system_mt[k] -- ./ecs/ecs.can:753
|
||||||
|
end -- ./ecs/ecs.can:753
|
||||||
|
end }) -- ./ecs/ecs.can:753
|
||||||
|
if type(s["filter"]) == "string" then -- ./ecs/ecs.can:758
|
||||||
|
system["filter"] = function(_, e) -- ./ecs/ecs.can:759
|
||||||
|
return e[s["filter"]] ~= nil -- ./ecs/ecs.can:759
|
||||||
|
end -- ./ecs/ecs.can:759
|
||||||
|
elseif type(s["filter"]) == "table" then -- ./ecs/ecs.can:760
|
||||||
|
system["filter"] = ecs["all"](unpack(s["filter"])) -- ./ecs/ecs.can:761
|
||||||
|
elseif type(s["filter"]) == "boolean" then -- ./ecs/ecs.can:762
|
||||||
|
if s["filter"] then -- ./ecs/ecs.can:763
|
||||||
|
system["filter"] = alwaysTrue -- ./ecs/ecs.can:764
|
||||||
|
else -- ./ecs/ecs.can:764
|
||||||
|
system["filter"] = alwaysFalse -- ./ecs/ecs.can:766
|
||||||
|
end -- ./ecs/ecs.can:766
|
||||||
|
end -- ./ecs/ecs.can:766
|
||||||
|
if not s["component"] and s["name"] then -- ./ecs/ecs.can:770
|
||||||
|
s["component"] = s["name"] -- ./ecs/ecs.can:771
|
||||||
|
end -- ./ecs/ecs.can:771
|
||||||
|
table["insert"](t, system) -- ./ecs/ecs.can:774
|
||||||
|
if s["name"] then -- ./ecs/ecs.can:775
|
||||||
|
world["s"][s["name"]] = system -- ./ecs/ecs.can:776
|
||||||
|
end -- ./ecs/ecs.can:776
|
||||||
|
system:onInstance() -- ./ecs/ecs.can:778
|
||||||
|
end -- ./ecs/ecs.can:778
|
||||||
|
return t -- ./ecs/ecs.can:780
|
||||||
|
end -- ./ecs/ecs.can:780
|
||||||
|
local recCallOnAddToWorld -- ./ecs/ecs.can:783
|
||||||
|
recCallOnAddToWorld = function(world, systems) -- ./ecs/ecs.can:783
|
||||||
|
for _, s in ipairs(systems) do -- ./ecs/ecs.can:784
|
||||||
|
recCallOnAddToWorld(world, s["systems"]) -- ./ecs/ecs.can:785
|
||||||
|
s:onAddToWorld(world) -- ./ecs/ecs.can:786
|
||||||
|
end -- ./ecs/ecs.can:786
|
||||||
|
end -- ./ecs/ecs.can:786
|
||||||
|
ecs = { -- ./ecs/ecs.can:792
|
||||||
|
["world"] = function(...) -- ./ecs/ecs.can:797
|
||||||
|
local world -- ./ecs/ecs.can:798
|
||||||
|
world = setmetatable({ -- ./ecs/ecs.can:798
|
||||||
|
["filter"] = ecs["all"](), -- ./ecs/ecs.can:799
|
||||||
|
["s"] = {}, -- ./ecs/ecs.can:800
|
||||||
|
["_previous"] = {} -- ./ecs/ecs.can:801
|
||||||
|
}, { ["__index"] = system_mt }) -- ./ecs/ecs.can:802
|
||||||
|
world["world"] = world -- ./ecs/ecs.can:803
|
||||||
|
world["w"] = world -- ./ecs/ecs.can:804
|
||||||
|
world["systems"] = recInstanciateSystems(world, { ... }) -- ./ecs/ecs.can:805
|
||||||
|
recCallOnAddToWorld(world, world["systems"]) -- ./ecs/ecs.can:806
|
||||||
|
return world -- ./ecs/ecs.can:807
|
||||||
|
end, -- ./ecs/ecs.can:807
|
||||||
|
["all"] = function(...) -- ./ecs/ecs.can:813
|
||||||
|
if ... then -- ./ecs/ecs.can:814
|
||||||
|
local l -- ./ecs/ecs.can:815
|
||||||
|
l = { ... } -- ./ecs/ecs.can:815
|
||||||
|
return function(s, e) -- ./ecs/ecs.can:816
|
||||||
|
for _, k in ipairs(l) do -- ./ecs/ecs.can:817
|
||||||
|
if e[k] == nil then -- ./ecs/ecs.can:818
|
||||||
|
return false -- ./ecs/ecs.can:819
|
||||||
|
end -- ./ecs/ecs.can:819
|
||||||
|
end -- ./ecs/ecs.can:819
|
||||||
|
return true -- ./ecs/ecs.can:822
|
||||||
|
end -- ./ecs/ecs.can:822
|
||||||
|
else -- ./ecs/ecs.can:822
|
||||||
|
return alwaysTrue -- ./ecs/ecs.can:825
|
||||||
|
end -- ./ecs/ecs.can:825
|
||||||
|
end, -- ./ecs/ecs.can:825
|
||||||
|
["any"] = function(...) -- ./ecs/ecs.can:832
|
||||||
|
if ... then -- ./ecs/ecs.can:833
|
||||||
|
local l -- ./ecs/ecs.can:834
|
||||||
|
l = { ... } -- ./ecs/ecs.can:834
|
||||||
|
return function(s, e) -- ./ecs/ecs.can:835
|
||||||
|
for _, k in ipairs(l) do -- ./ecs/ecs.can:836
|
||||||
|
if e[k] ~= nil then -- ./ecs/ecs.can:837
|
||||||
|
return true -- ./ecs/ecs.can:838
|
||||||
|
end -- ./ecs/ecs.can:838
|
||||||
|
end -- ./ecs/ecs.can:838
|
||||||
|
return false -- ./ecs/ecs.can:841
|
||||||
|
end -- ./ecs/ecs.can:841
|
||||||
|
else -- ./ecs/ecs.can:841
|
||||||
|
return alwaysFalse -- ./ecs/ecs.can:844
|
||||||
|
end -- ./ecs/ecs.can:844
|
||||||
|
end, -- ./ecs/ecs.can:844
|
||||||
|
["scene"] = function(name, systems, entities) -- ./ecs/ecs.can:854
|
||||||
|
if systems == nil then systems = {} end -- ./ecs/ecs.can:854
|
||||||
|
if entities == nil then entities = {} end -- ./ecs/ecs.can:854
|
||||||
|
assert(scene, "ubiquitousse.scene unavailable") -- ./ecs/ecs.can:855
|
||||||
|
local s -- ./ecs/ecs.can:856
|
||||||
|
s = scene["new"](name) -- ./ecs/ecs.can:856
|
||||||
|
local w -- ./ecs/ecs.can:857
|
||||||
|
s["enter"] = function(self) -- ./ecs/ecs.can:859
|
||||||
|
w = ecs["world"](unpack(systems)) -- ./ecs/ecs.can:860
|
||||||
|
w:add(unpack(entities)) -- ./ecs/ecs.can:861
|
||||||
|
end -- ./ecs/ecs.can:861
|
||||||
|
s["exit"] = function(self) -- ./ecs/ecs.can:863
|
||||||
|
w:destroy() -- ./ecs/ecs.can:864
|
||||||
|
end -- ./ecs/ecs.can:864
|
||||||
|
s["update"] = function(self, dt) -- ./ecs/ecs.can:866
|
||||||
|
w:update(dt) -- ./ecs/ecs.can:867
|
||||||
|
end -- ./ecs/ecs.can:867
|
||||||
|
s["draw"] = function(self) -- ./ecs/ecs.can:869
|
||||||
|
w:draw() -- ./ecs/ecs.can:870
|
||||||
|
end -- ./ecs/ecs.can:870
|
||||||
|
return s -- ./ecs/ecs.can:873
|
||||||
|
end -- ./ecs/ecs.can:873
|
||||||
|
} -- ./ecs/ecs.can:873
|
||||||
|
return ecs -- ./ecs/ecs.can:877
|
||||||
23
ecs/timer.lua
Normal file
23
ecs/timer.lua
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
local timer -- ./ecs/timer.can:4
|
||||||
|
timer = require((...):match("^(.-)ecs%.timer") .. "scene") -- ./ecs/timer.can:4
|
||||||
|
return { -- ./ecs/timer.can:6
|
||||||
|
["name"] = "timer", -- ./ecs/timer.can:7
|
||||||
|
["filter"] = "timer", -- ./ecs/timer.can:8
|
||||||
|
["default"] = {}, -- ./ecs/timer.can:9
|
||||||
|
["process"] = function(self, t, dt) -- ./ecs/timer.can:12
|
||||||
|
t:update(dt) -- ./ecs/timer.can:13
|
||||||
|
if t:dead() then -- ./ecs/timer.can:14
|
||||||
|
self["world"]:remove(t["entity"]) -- ./ecs/timer.can:15
|
||||||
|
end -- ./ecs/timer.can:15
|
||||||
|
end, -- ./ecs/timer.can:15
|
||||||
|
["run"] = function(self, func) -- ./ecs/timer.can:20
|
||||||
|
local t = timer["run"](func) -- ./ecs/timer.can:21
|
||||||
|
self["world"]:add({ ["timer"] = t }) -- ./ecs/timer.can:23
|
||||||
|
return t -- ./ecs/timer.can:25
|
||||||
|
end, -- ./ecs/timer.can:25
|
||||||
|
["tween"] = function(self, duration, tbl, to, method) -- ./ecs/timer.can:28
|
||||||
|
local t = timer["tween"](duration, tbl, to, method) -- ./ecs/timer.can:29
|
||||||
|
self["world"]:add({ ["timer"] = t }) -- ./ecs/timer.can:31
|
||||||
|
return t -- ./ecs/timer.can:33
|
||||||
|
end -- ./ecs/timer.can:33
|
||||||
|
} -- ./ecs/timer.can:33
|
||||||
94
init.lua
94
init.lua
|
|
@ -1,49 +1,53 @@
|
||||||
-- ubiquitousse
|
--[[-- Ubiquitousse main module.
|
||||||
|
|
||||||
--- Ubiquitousse main module.
|
Set of various Lua libraries to make game development easier, mainly made to be used alongside the [LÖVE](https://love2d.org/) game framework.
|
||||||
-- Set of various Lua libraries to make game development easier, mainly made to be used alongside the [LÖVE](https://love2d.org/) game framework.
|
Nothing that hasn't been done before, but these are tailored to what I need. They can be used independently too, and are relatively portable, even without LÖVE.
|
||||||
-- Nothing that hasn't been done before, but these are tailored to what I need. They can be used independently too, and are relatively portable, even without LÖVE.
|
|
||||||
--
|
This is the main module, which will try to load every other Ubiquitousse module when required,
|
||||||
-- This is the main module, which will try to load every other Ubiquitousse module when required and may even provide a few convenience functions.
|
and also perform a quick LÖVE version check and show a warning in case of potential incompatibility.
|
||||||
--
|
|
||||||
-- This also perform a quick LÖVE version check and show a warning in case of potential incompatibility.
|
**Regarding Ubiquitousse's organization**
|
||||||
--
|
|
||||||
-- **Regarding Ubiquitousse's organization**
|
Ubiquitousse may or may not be used in its totality. You can delete the modules directories you don't need and Ubiquitousse
|
||||||
--
|
should adapt accordingly. You can also simply copy the modules directories you need and use them directly, without using this
|
||||||
-- Ubiquitousse may or may not be used in its totality. You can delete the modules directories you don't need and Ubiquitousse
|
file at all.
|
||||||
-- should adapt accordingly. You can also simply copy the modules directories you need and use them directly, without using this
|
However, some modules may provide more feature when other modules are available.
|
||||||
-- file at all.
|
These dependencies are written at the top of every main module file.
|
||||||
-- However, some modules may provide more feature when other modules are available.
|
|
||||||
-- These dependencies are written at the top of every main module file.
|
Ubiquitousse's original goal was to run everywhere with the least porting effort possible, so while the current version now mainly focus LÖVE, it
|
||||||
--
|
should still be easily modifiable to work with something else. Ubiquitousse is mainly tested on LuaJIT and Lua 5.3 but should also support Lua 5.1 and 5.2.
|
||||||
-- Ubiquitousse's original goal was to run everywhere with the least porting effort possible, so while the current version now mainly focus LÖVE, it
|
In order to keep a good idea of how portable this all is, other dependencies, including LÖVE, are explicited at the top of every module file and in specific
|
||||||
-- should still be easily modifiable to work with something else. Ubiquitousse is mainly tested on LuaJIT and Lua 5.3 but should also support Lua 5.1 and 5.2.
|
functions definition using the `@require` tag (e.g., `-- @require love` for LÖVE).
|
||||||
-- In order to keep a good idea of how portable this all is, other dependencies, including LÖVE, are explicited at the top of every module file and in specific
|
|
||||||
-- functions definition using the `@require` tag (e.g., `-- @require love` for LÖVE).
|
Some modules are developped in [Candran](https://github.com/Reuh/candran) (`.can` files), but can easily be compiled into regular Lua code. In fact,
|
||||||
--
|
you will find precompiled Lua files in the ubiquitousse repository alongside the Candran files, so you don't have to install Candran yourself and everything
|
||||||
-- Some modules are developped in [Candran](https://github.com/Reuh/candran) (.can files), but can easily be compiled into regular Lua code.
|
should be pretty much plug and play.
|
||||||
--
|
|
||||||
-- Units used in the API documentation, unless written otherwise:
|
Regarding the documentation: Ubiquitousse uses LDoc/LuaDoc styled-comments, but since LDoc hates me and my code, the
|
||||||
--
|
generated result is mostly garbage, so to generate the documentation you will need to use my [LDoc fork](https://github.com/Reuh/LDoc)
|
||||||
-- * All distances are expressed in pixels (px)
|
which I modified to force LDoc to like me.
|
||||||
-- * All durations are expressed in seconds (s)
|
|
||||||
--
|
If you want to recompile the Candran files or the documentation yourself, there's a build script `make` available at the root of
|
||||||
-- These units are only used to make writing documentation easier; you can use other units if you want, as long as you're consistent.
|
the repository to save you a few seconds.
|
||||||
--
|
|
||||||
-- Style:
|
Units used in the API documentation, unless written otherwise:
|
||||||
--
|
|
||||||
-- * tabs for indentation, spaces for esthetic whitespace (notably in comments)
|
* All distances are expressed in pixels (px)
|
||||||
-- * no globals
|
* All durations are expressed in seconds (s)
|
||||||
-- * UPPERCASE for constants (or maybe not).
|
|
||||||
-- * CamelCase for class names.
|
These units are only used to make writing documentation easier; you can use other units if you want, as long as you're consistent.
|
||||||
-- * lowerCamelCase is expected for everything else.
|
|
||||||
--
|
Style:
|
||||||
-- Regarding the documentation: Ubiquitousse uses LDoc/LuaDoc styled-comments, but since LDoc hates me and my code, the
|
|
||||||
-- generated result is mostly garbage, so to generate the documentation you will need to use my [LDoc fork](https://github.com/Reuh/LDoc)
|
* tabs for indentation, spaces for esthetic whitespace (notably in comments)
|
||||||
-- which I modified to force LDoc to like me.
|
* no globals
|
||||||
--
|
* UPPERCASE for constants (or maybe not).
|
||||||
-- @module ubiquitousse
|
* CamelCase for class names.
|
||||||
-- @usage local ubiquitousse = require("ubiquitousse")
|
* lowerCamelCase is expected for everything else.
|
||||||
|
|
||||||
|
@module ubiquitousse
|
||||||
|
@usage local ubiquitousse = require("ubiquitousse")
|
||||||
|
--]]
|
||||||
|
|
||||||
local p = ... -- require path
|
local p = ... -- require path
|
||||||
local ubiquitousse
|
local ubiquitousse
|
||||||
|
|
|
||||||
489
ldtk/ldtk.lua
Normal file
489
ldtk/ldtk.lua
Normal file
|
|
@ -0,0 +1,489 @@
|
||||||
|
local lg -- ./ldtk/ldtk.can:38
|
||||||
|
lg = (love or {})["graphics"] -- ./ldtk/ldtk.can:38
|
||||||
|
local newQuad -- ./ldtk/ldtk.can:39
|
||||||
|
if lg then -- ./ldtk/ldtk.can:40
|
||||||
|
newQuad = lg["newQuad"] -- ./ldtk/ldtk.can:41
|
||||||
|
else -- ./ldtk/ldtk.can:41
|
||||||
|
newQuad = function(x, y, w, h, image) -- ./ldtk/ldtk.can:43
|
||||||
|
return { -- ./ldtk/ldtk.can:44
|
||||||
|
x, -- ./ldtk/ldtk.can:44
|
||||||
|
y, -- ./ldtk/ldtk.can:44
|
||||||
|
w, -- ./ldtk/ldtk.can:44
|
||||||
|
h -- ./ldtk/ldtk.can:44
|
||||||
|
} -- ./ldtk/ldtk.can:44
|
||||||
|
end -- ./ldtk/ldtk.can:44
|
||||||
|
end -- ./ldtk/ldtk.can:44
|
||||||
|
local json_decode -- ./ldtk/ldtk.can:49
|
||||||
|
json_decode = require((...):gsub("ldtk$", "json"))["decode"] -- ./ldtk/ldtk.can:49
|
||||||
|
local readJson -- ./ldtk/ldtk.can:50
|
||||||
|
readJson = function(file) -- ./ldtk/ldtk.can:50
|
||||||
|
local f -- ./ldtk/ldtk.can:51
|
||||||
|
f = assert(io["open"](file, "r")) -- ./ldtk/ldtk.can:51
|
||||||
|
local t = json_decode(f:read("*a")) -- ./ldtk/ldtk.can:52
|
||||||
|
f:close() -- ./ldtk/ldtk.can:53
|
||||||
|
return t -- ./ldtk/ldtk.can:54
|
||||||
|
end -- ./ldtk/ldtk.can:54
|
||||||
|
local parseColor -- ./ldtk/ldtk.can:58
|
||||||
|
parseColor = function(str) -- ./ldtk/ldtk.can:58
|
||||||
|
local r, g, b = str:match("^#(..)(..)(..)") -- ./ldtk/ldtk.can:59
|
||||||
|
r, g, b = tonumber(r, 16), tonumber(g, 16), tonumber(b, 16) -- ./ldtk/ldtk.can:60
|
||||||
|
return { -- ./ldtk/ldtk.can:61
|
||||||
|
r / 255, -- ./ldtk/ldtk.can:61
|
||||||
|
g / 255, -- ./ldtk/ldtk.can:61
|
||||||
|
b / 255 -- ./ldtk/ldtk.can:61
|
||||||
|
} -- ./ldtk/ldtk.can:61
|
||||||
|
end -- ./ldtk/ldtk.can:61
|
||||||
|
local white -- ./ldtk/ldtk.can:63
|
||||||
|
white = { -- ./ldtk/ldtk.can:63
|
||||||
|
1, -- ./ldtk/ldtk.can:63
|
||||||
|
1, -- ./ldtk/ldtk.can:63
|
||||||
|
1 -- ./ldtk/ldtk.can:63
|
||||||
|
} -- ./ldtk/ldtk.can:63
|
||||||
|
local toLua -- ./ldtk/ldtk.can:66
|
||||||
|
toLua = function(type, val) -- ./ldtk/ldtk.can:66
|
||||||
|
if val == nil then -- ./ldtk/ldtk.can:67
|
||||||
|
return val -- ./ldtk/ldtk.can:67
|
||||||
|
end -- ./ldtk/ldtk.can:67
|
||||||
|
if type:match("^Array%<") then -- ./ldtk/ldtk.can:68
|
||||||
|
local itype = type:match("^Array%<(.*)%>$") -- ./ldtk/ldtk.can:69
|
||||||
|
for i, v in ipairs(val) do -- ./ldtk/ldtk.can:70
|
||||||
|
val[i] = toLua(itype, v) -- ./ldtk/ldtk.can:71
|
||||||
|
end -- ./ldtk/ldtk.can:71
|
||||||
|
elseif type == "Color" then -- ./ldtk/ldtk.can:73
|
||||||
|
return parseColor(val) -- ./ldtk/ldtk.can:74
|
||||||
|
elseif type == "Point" then -- ./ldtk/ldtk.can:75
|
||||||
|
return { -- ./ldtk/ldtk.can:76
|
||||||
|
["x"] = val["cx"], -- ./ldtk/ldtk.can:76
|
||||||
|
["y"] = val["cy"] -- ./ldtk/ldtk.can:76
|
||||||
|
} -- ./ldtk/ldtk.can:76
|
||||||
|
end -- ./ldtk/ldtk.can:76
|
||||||
|
return val -- ./ldtk/ldtk.can:78
|
||||||
|
end -- ./ldtk/ldtk.can:78
|
||||||
|
local getFields -- ./ldtk/ldtk.can:80
|
||||||
|
getFields = function(f) -- ./ldtk/ldtk.can:80
|
||||||
|
local t = {} -- ./ldtk/ldtk.can:81
|
||||||
|
for _, v in ipairs(f) do -- ./ldtk/ldtk.can:82
|
||||||
|
t[v["__identifier"]] = toLua(v["__type"], v["__value"]) -- ./ldtk/ldtk.can:83
|
||||||
|
end -- ./ldtk/ldtk.can:83
|
||||||
|
return t -- ./ldtk/ldtk.can:85
|
||||||
|
end -- ./ldtk/ldtk.can:85
|
||||||
|
local tileset_mt -- ./ldtk/ldtk.can:88
|
||||||
|
local make_cache -- ./ldtk/ldtk.can:91
|
||||||
|
make_cache = function(new_fn) -- ./ldtk/ldtk.can:91
|
||||||
|
return setmetatable({}, { -- ./ldtk/ldtk.can:92
|
||||||
|
["__mode"] = "v", -- ./ldtk/ldtk.can:93
|
||||||
|
["__call"] = function(cache, id) -- ./ldtk/ldtk.can:94
|
||||||
|
if not cache[id] then -- ./ldtk/ldtk.can:95
|
||||||
|
cache[id] = new_fn(id) -- ./ldtk/ldtk.can:96
|
||||||
|
end -- ./ldtk/ldtk.can:96
|
||||||
|
return cache[id] -- ./ldtk/ldtk.can:98
|
||||||
|
end -- ./ldtk/ldtk.can:98
|
||||||
|
}) -- ./ldtk/ldtk.can:98
|
||||||
|
end -- ./ldtk/ldtk.can:98
|
||||||
|
local cache -- ./ldtk/ldtk.can:102
|
||||||
|
cache = { -- ./ldtk/ldtk.can:102
|
||||||
|
["tileset"] = make_cache(function(tilesetDef) -- ./ldtk/ldtk.can:103
|
||||||
|
return tileset_mt["_init"](tilesetDef) -- ./ldtk/ldtk.can:104
|
||||||
|
end), -- ./ldtk/ldtk.can:104
|
||||||
|
["image"] = make_cache(function(path) -- ./ldtk/ldtk.can:106
|
||||||
|
if lg then -- ./ldtk/ldtk.can:107
|
||||||
|
return lg["newImage"](path) -- ./ldtk/ldtk.can:108
|
||||||
|
else -- ./ldtk/ldtk.can:108
|
||||||
|
return path -- ./ldtk/ldtk.can:110
|
||||||
|
end -- ./ldtk/ldtk.can:110
|
||||||
|
end) -- ./ldtk/ldtk.can:110
|
||||||
|
} -- ./ldtk/ldtk.can:110
|
||||||
|
tileset_mt = { -- ./ldtk/ldtk.can:118
|
||||||
|
["_newQuad"] = function(self, x, y, width, height) -- ./ldtk/ldtk.can:119
|
||||||
|
return newQuad(x, y, width, height, self["image"]) -- ./ldtk/ldtk.can:120
|
||||||
|
end, -- ./ldtk/ldtk.can:120
|
||||||
|
["_getTileQuad"] = function(self, tileid, x, y, size) -- ./ldtk/ldtk.can:122
|
||||||
|
if not self["_tileQuads"][tileid] then -- ./ldtk/ldtk.can:123
|
||||||
|
self["_tileQuads"][tileid] = self:_newQuad(x, y, size, size) -- ./ldtk/ldtk.can:124
|
||||||
|
end -- ./ldtk/ldtk.can:124
|
||||||
|
return self["_tileQuads"][tileid] -- ./ldtk/ldtk.can:126
|
||||||
|
end, -- ./ldtk/ldtk.can:126
|
||||||
|
["_init"] = function(tilesetDef) -- ./ldtk/ldtk.can:128
|
||||||
|
local t = { -- ./ldtk/ldtk.can:129
|
||||||
|
["image"] = cache["image"](tilesetDef["path"]), -- ./ldtk/ldtk.can:132
|
||||||
|
["_tileQuads"] = {} -- ./ldtk/ldtk.can:134
|
||||||
|
} -- ./ldtk/ldtk.can:134
|
||||||
|
return setmetatable(t, tileset_mt) -- ./ldtk/ldtk.can:136
|
||||||
|
end -- ./ldtk/ldtk.can:136
|
||||||
|
} -- ./ldtk/ldtk.can:136
|
||||||
|
tileset_mt["__index"] = tileset_mt -- ./ldtk/ldtk.can:139
|
||||||
|
local layer_mt -- ./ldtk/ldtk.can:146
|
||||||
|
layer_mt = { -- ./ldtk/ldtk.can:146
|
||||||
|
["draw"] = function(self, x, y) -- ./ldtk/ldtk.can:154
|
||||||
|
if x == nil then x = 0 end -- ./ldtk/ldtk.can:154
|
||||||
|
if y == nil then y = 0 end -- ./ldtk/ldtk.can:154
|
||||||
|
if self["visible"] then -- ./ldtk/ldtk.can:155
|
||||||
|
lg["push"]() -- ./ldtk/ldtk.can:156
|
||||||
|
lg["translate"](x + self["x"], y + self["y"]) -- ./ldtk/ldtk.can:157
|
||||||
|
if self["spritebatch"] then -- ./ldtk/ldtk.can:158
|
||||||
|
lg["setColor"](1, 1, 1, self["opacity"]) -- ./ldtk/ldtk.can:159
|
||||||
|
lg["draw"](self["spritebatch"]) -- ./ldtk/ldtk.can:160
|
||||||
|
elseif self["intTiles"] then -- ./ldtk/ldtk.can:161
|
||||||
|
for _, t in ipairs(self["intTiles"]) do -- ./ldtk/ldtk.can:162
|
||||||
|
lg["setColor"](t["color"]) -- ./ldtk/ldtk.can:163
|
||||||
|
lg["rectangle"]("fill", t["x"], t["y"], t["layer"]["gridSize"], t["layer"]["gridSize"]) -- ./ldtk/ldtk.can:164
|
||||||
|
end -- ./ldtk/ldtk.can:164
|
||||||
|
elseif self["entities"] then -- ./ldtk/ldtk.can:166
|
||||||
|
for _, e in ipairs(self["entities"]) do -- ./ldtk/ldtk.can:167
|
||||||
|
if e["draw"] then -- ./ldtk/ldtk.can:168
|
||||||
|
e:draw() -- ./ldtk/ldtk.can:168
|
||||||
|
end -- ./ldtk/ldtk.can:168
|
||||||
|
end -- ./ldtk/ldtk.can:168
|
||||||
|
end -- ./ldtk/ldtk.can:168
|
||||||
|
lg["pop"]() -- ./ldtk/ldtk.can:171
|
||||||
|
end -- ./ldtk/ldtk.can:171
|
||||||
|
end, -- ./ldtk/ldtk.can:171
|
||||||
|
["_unloadCallbacks"] = function(self, callbacks) -- ./ldtk/ldtk.can:175
|
||||||
|
local onRemoveTile = callbacks["onRemoveTile"] -- ./ldtk/ldtk.can:176
|
||||||
|
if self["tiles"] and onRemoveTile then -- ./ldtk/ldtk.can:177
|
||||||
|
for _, t in ipairs(self["tiles"]) do -- ./ldtk/ldtk.can:178
|
||||||
|
onRemoveTile(t) -- ./ldtk/ldtk.can:179
|
||||||
|
end -- ./ldtk/ldtk.can:179
|
||||||
|
end -- ./ldtk/ldtk.can:179
|
||||||
|
local onRemoveIntTile = callbacks["onRemoveIntTile"] -- ./ldtk/ldtk.can:182
|
||||||
|
if self["intTiles"] and onRemoveIntTile then -- ./ldtk/ldtk.can:183
|
||||||
|
for _, t in ipairs(self["intTiles"]) do -- ./ldtk/ldtk.can:184
|
||||||
|
onRemoveIntTile(t) -- ./ldtk/ldtk.can:185
|
||||||
|
end -- ./ldtk/ldtk.can:185
|
||||||
|
end -- ./ldtk/ldtk.can:185
|
||||||
|
local onRemoveEntity = callbacks["onRemoveEntity"] -- ./ldtk/ldtk.can:188
|
||||||
|
if self["entities"] and onRemoveEntity then -- ./ldtk/ldtk.can:189
|
||||||
|
for _, e in ipairs(self["entities"]) do -- ./ldtk/ldtk.can:190
|
||||||
|
onRemoveEntity(e) -- ./ldtk/ldtk.can:191
|
||||||
|
end -- ./ldtk/ldtk.can:191
|
||||||
|
end -- ./ldtk/ldtk.can:191
|
||||||
|
end, -- ./ldtk/ldtk.can:191
|
||||||
|
["_init"] = function(layer, level, order, callbacks) -- ./ldtk/ldtk.can:195
|
||||||
|
local gridSize -- ./ldtk/ldtk.can:196
|
||||||
|
gridSize = layer["__gridSize"] -- ./ldtk/ldtk.can:196
|
||||||
|
local t -- ./ldtk/ldtk.can:197
|
||||||
|
t = { -- ./ldtk/ldtk.can:197
|
||||||
|
["level"] = level, -- ./ldtk/ldtk.can:200
|
||||||
|
["identifier"] = layer["__identifier"], -- ./ldtk/ldtk.can:203
|
||||||
|
["type"] = layer["__type"], -- ./ldtk/ldtk.can:206
|
||||||
|
["visible"] = layer["visible"], -- ./ldtk/ldtk.can:209
|
||||||
|
["opacity"] = layer["opacity"], -- ./ldtk/ldtk.can:212
|
||||||
|
["order"] = order, -- ./ldtk/ldtk.can:215
|
||||||
|
["x"] = layer["__pxTotalOffsetX"], -- ./ldtk/ldtk.can:218
|
||||||
|
["y"] = layer["__pxTotalOffsetY"], -- ./ldtk/ldtk.can:221
|
||||||
|
["gridSize"] = gridSize, -- ./ldtk/ldtk.can:224
|
||||||
|
["gridWidth"] = layer["__cWid"], -- ./ldtk/ldtk.can:227
|
||||||
|
["gridHeight"] = layer["__cHei"], -- ./ldtk/ldtk.can:230
|
||||||
|
["entities"] = nil, -- ./ldtk/ldtk.can:233
|
||||||
|
["tiles"] = nil, -- ./ldtk/ldtk.can:237
|
||||||
|
["tileset"] = nil, -- ./ldtk/ldtk.can:241
|
||||||
|
["spritebatch"] = nil, -- ./ldtk/ldtk.can:246
|
||||||
|
["intTiles"] = nil -- ./ldtk/ldtk.can:250
|
||||||
|
} -- ./ldtk/ldtk.can:250
|
||||||
|
if layer["__tilesetDefUid"] then -- ./ldtk/ldtk.can:253
|
||||||
|
t["tiles"] = {} -- ./ldtk/ldtk.can:254
|
||||||
|
local tilesetData = level["project"]["_tilesetData"][layer["__tilesetDefUid"]] -- ./ldtk/ldtk.can:255
|
||||||
|
t["tileset"] = cache["tileset"](tilesetData) -- ./ldtk/ldtk.can:256
|
||||||
|
local tiles = layer["__type"] == "Tiles" and layer["gridTiles"] or layer["autoLayerTiles"] -- ./ldtk/ldtk.can:257
|
||||||
|
local onAddTile = callbacks["onAddTile"] -- ./ldtk/ldtk.can:258
|
||||||
|
if lg then -- ./ldtk/ldtk.can:259
|
||||||
|
t["spritebatch"] = lg["newSpriteBatch"](t["tileset"]["image"]) -- ./ldtk/ldtk.can:259
|
||||||
|
end -- ./ldtk/ldtk.can:259
|
||||||
|
for _, tl in ipairs(tiles) do -- ./ldtk/ldtk.can:260
|
||||||
|
local quad -- ./ldtk/ldtk.can:261
|
||||||
|
quad = t["tileset"]:_getTileQuad(tl["t"], tl["src"][1], tl["src"][2], gridSize) -- ./ldtk/ldtk.can:261
|
||||||
|
local sx, sy = 1, 1 -- ./ldtk/ldtk.can:262
|
||||||
|
local x, y -- ./ldtk/ldtk.can:263
|
||||||
|
x, y = tl["px"][1], tl["px"][2] -- ./ldtk/ldtk.can:263
|
||||||
|
local tile -- ./ldtk/ldtk.can:271
|
||||||
|
tile = { -- ./ldtk/ldtk.can:271
|
||||||
|
["layer"] = t, -- ./ldtk/ldtk.can:274
|
||||||
|
["x"] = x, -- ./ldtk/ldtk.can:277
|
||||||
|
["y"] = y, -- ./ldtk/ldtk.can:280
|
||||||
|
["flipX"] = false, -- ./ldtk/ldtk.can:283
|
||||||
|
["flipY"] = false, -- ./ldtk/ldtk.can:286
|
||||||
|
["tags"] = tilesetData[tl["t"]]["tags"], -- ./ldtk/ldtk.can:289
|
||||||
|
["data"] = tilesetData[tl["t"]]["data"], -- ./ldtk/ldtk.can:292
|
||||||
|
["quad"] = quad -- ./ldtk/ldtk.can:296
|
||||||
|
} -- ./ldtk/ldtk.can:296
|
||||||
|
if tl["f"] == 1 or tl["f"] == 3 then -- ./ldtk/ldtk.can:298
|
||||||
|
sx = - 1 -- ./ldtk/ldtk.can:299
|
||||||
|
x = x + (gridSize) -- ./ldtk/ldtk.can:300
|
||||||
|
tile["flipX"] = true -- ./ldtk/ldtk.can:301
|
||||||
|
end -- ./ldtk/ldtk.can:301
|
||||||
|
if tl["f"] == 2 or tl["f"] == 3 then -- ./ldtk/ldtk.can:303
|
||||||
|
sy = - 1 -- ./ldtk/ldtk.can:304
|
||||||
|
y = y + (gridSize) -- ./ldtk/ldtk.can:305
|
||||||
|
tile["flipY"] = true -- ./ldtk/ldtk.can:306
|
||||||
|
end -- ./ldtk/ldtk.can:306
|
||||||
|
if t["spritebatch"] then -- ./ldtk/ldtk.can:308
|
||||||
|
t["spritebatch"]:add(quad, x, y, 0, sx, sy) -- ./ldtk/ldtk.can:308
|
||||||
|
end -- ./ldtk/ldtk.can:308
|
||||||
|
table["insert"](t["tiles"], tile) -- ./ldtk/ldtk.can:309
|
||||||
|
if onAddTile then -- ./ldtk/ldtk.can:310
|
||||||
|
onAddTile(tile) -- ./ldtk/ldtk.can:310
|
||||||
|
end -- ./ldtk/ldtk.can:310
|
||||||
|
end -- ./ldtk/ldtk.can:310
|
||||||
|
elseif layer["__type"] == "IntGrid" then -- ./ldtk/ldtk.can:313
|
||||||
|
t["intTiles"] = {} -- ./ldtk/ldtk.can:314
|
||||||
|
local onAddIntTile = callbacks["onAddIntTile"] -- ./ldtk/ldtk.can:315
|
||||||
|
local values = level["project"]["_layerDef"][layer["layerDefUid"]]["intGridValues"] -- ./ldtk/ldtk.can:316
|
||||||
|
for i, tl in ipairs(layer["intGridCsv"]) do -- ./ldtk/ldtk.can:317
|
||||||
|
if tl > 0 then -- ./ldtk/ldtk.can:318
|
||||||
|
local y -- ./ldtk/ldtk.can:319
|
||||||
|
y = math["floor"]((i - 1) / t["gridWidth"]) * gridSize -- ./ldtk/ldtk.can:319
|
||||||
|
local x -- ./ldtk/ldtk.can:320
|
||||||
|
x = ((i - 1) % t["gridWidth"]) * gridSize -- ./ldtk/ldtk.can:320
|
||||||
|
local tile -- ./ldtk/ldtk.can:328
|
||||||
|
tile = { -- ./ldtk/ldtk.can:328
|
||||||
|
["layer"] = t, -- ./ldtk/ldtk.can:331
|
||||||
|
["x"] = x, -- ./ldtk/ldtk.can:334
|
||||||
|
["y"] = y, -- ./ldtk/ldtk.can:337
|
||||||
|
["identifier"] = values[tl]["identifier"], -- ./ldtk/ldtk.can:340
|
||||||
|
["value"] = tl, -- ./ldtk/ldtk.can:343
|
||||||
|
["color"] = values[tl]["color"] -- ./ldtk/ldtk.can:346
|
||||||
|
} -- ./ldtk/ldtk.can:346
|
||||||
|
table["insert"](t["intTiles"], tile) -- ./ldtk/ldtk.can:348
|
||||||
|
if onAddIntTile then -- ./ldtk/ldtk.can:349
|
||||||
|
onAddIntTile(tile) -- ./ldtk/ldtk.can:349
|
||||||
|
end -- ./ldtk/ldtk.can:349
|
||||||
|
end -- ./ldtk/ldtk.can:349
|
||||||
|
end -- ./ldtk/ldtk.can:349
|
||||||
|
end -- ./ldtk/ldtk.can:349
|
||||||
|
if layer["__type"] == "Entities" then -- ./ldtk/ldtk.can:354
|
||||||
|
t["entities"] = {} -- ./ldtk/ldtk.can:355
|
||||||
|
local onAddEntity = callbacks["onAddEntity"] -- ./ldtk/ldtk.can:356
|
||||||
|
for _, e in ipairs(layer["entityInstances"]) do -- ./ldtk/ldtk.can:357
|
||||||
|
local entityDef -- ./ldtk/ldtk.can:358
|
||||||
|
entityDef = level["project"]["_entityData"][e["defUid"]] -- ./ldtk/ldtk.can:358
|
||||||
|
local entity -- ./ldtk/ldtk.can:366
|
||||||
|
entity = { -- ./ldtk/ldtk.can:366
|
||||||
|
["layer"] = t, -- ./ldtk/ldtk.can:369
|
||||||
|
["identifier"] = e["__identifier"], -- ./ldtk/ldtk.can:372
|
||||||
|
["x"] = e["px"][1], -- ./ldtk/ldtk.can:375
|
||||||
|
["y"] = e["px"][2], -- ./ldtk/ldtk.can:378
|
||||||
|
["width"] = e["width"], -- ./ldtk/ldtk.can:381
|
||||||
|
["height"] = e["height"], -- ./ldtk/ldtk.can:384
|
||||||
|
["sx"] = e["width"] / entityDef["width"], -- ./ldtk/ldtk.can:387
|
||||||
|
["sy"] = e["height"] / entityDef["height"], -- ./ldtk/ldtk.can:390
|
||||||
|
["pivotX"] = e["__pivot"][1] * e["width"], -- ./ldtk/ldtk.can:393
|
||||||
|
["pivotY"] = e["__pivot"][2] * e["height"], -- ./ldtk/ldtk.can:396
|
||||||
|
["color"] = entityDef["color"], -- ./ldtk/ldtk.can:399
|
||||||
|
["tile"] = nil, -- ./ldtk/ldtk.can:403
|
||||||
|
["fields"] = getFields(e["fieldInstances"]), -- ./ldtk/ldtk.can:406
|
||||||
|
["draw"] = function(self) -- ./ldtk/ldtk.can:412
|
||||||
|
if self["tile"] then -- ./ldtk/ldtk.can:413
|
||||||
|
local _, _, w, h -- ./ldtk/ldtk.can:414
|
||||||
|
_, _, w, h = self["tile"]["quad"]:getViewport() -- ./ldtk/ldtk.can:414
|
||||||
|
lg["setColor"](white) -- ./ldtk/ldtk.can:415
|
||||||
|
lg["draw"](self["tile"]["tileset"]["image"], self["tile"]["quad"], self["x"] - self["pivotX"], self["y"] - self["pivotY"], 0, self["width"] / w, self["height"] / h) -- ./ldtk/ldtk.can:416
|
||||||
|
else -- ./ldtk/ldtk.can:416
|
||||||
|
lg["setColor"](self["color"]) -- ./ldtk/ldtk.can:418
|
||||||
|
lg["rectangle"]("line", self["x"] - self["pivotX"], self["y"] - self["pivotY"], self["width"], self["height"]) -- ./ldtk/ldtk.can:419
|
||||||
|
end -- ./ldtk/ldtk.can:419
|
||||||
|
end -- ./ldtk/ldtk.can:419
|
||||||
|
} -- ./ldtk/ldtk.can:419
|
||||||
|
if e["__tile"] then -- ./ldtk/ldtk.can:423
|
||||||
|
local tileset = cache["tileset"](level["project"]["_tilesetData"][e["__tile"]["tilesetUid"]]) -- ./ldtk/ldtk.can:424
|
||||||
|
local srcRect = e["__tile"]["srcRect"] -- ./ldtk/ldtk.can:425
|
||||||
|
local quad = tileset:_newQuad(srcRect[1], srcRect[2], srcRect[3], srcRect[4]) -- ./ldtk/ldtk.can:426
|
||||||
|
entity["tile"] = { -- ./ldtk/ldtk.can:427
|
||||||
|
["tileset"] = tileset, -- ./ldtk/ldtk.can:428
|
||||||
|
["quad"] = quad -- ./ldtk/ldtk.can:429
|
||||||
|
} -- ./ldtk/ldtk.can:429
|
||||||
|
end -- ./ldtk/ldtk.can:429
|
||||||
|
table["insert"](t["entities"], entity) -- ./ldtk/ldtk.can:432
|
||||||
|
if onAddEntity then -- ./ldtk/ldtk.can:433
|
||||||
|
onAddEntity(entity) -- ./ldtk/ldtk.can:433
|
||||||
|
end -- ./ldtk/ldtk.can:433
|
||||||
|
end -- ./ldtk/ldtk.can:433
|
||||||
|
end -- ./ldtk/ldtk.can:433
|
||||||
|
return setmetatable(t, layer_mt) -- ./ldtk/ldtk.can:436
|
||||||
|
end -- ./ldtk/ldtk.can:436
|
||||||
|
} -- ./ldtk/ldtk.can:436
|
||||||
|
layer_mt["__index"] = layer_mt -- ./ldtk/ldtk.can:439
|
||||||
|
local level_mt -- ./ldtk/ldtk.can:448
|
||||||
|
level_mt = { -- ./ldtk/ldtk.can:448
|
||||||
|
["draw"] = function(self, x, y) -- ./ldtk/ldtk.can:459
|
||||||
|
if x == nil then x = 0 end -- ./ldtk/ldtk.can:459
|
||||||
|
if y == nil then y = 0 end -- ./ldtk/ldtk.can:459
|
||||||
|
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:460
|
||||||
|
lg["push"]() -- ./ldtk/ldtk.can:461
|
||||||
|
lg["translate"](x + self["x"], y + self["y"]) -- ./ldtk/ldtk.can:462
|
||||||
|
self:drawBackground() -- ./ldtk/ldtk.can:463
|
||||||
|
for _, l in ipairs(self["layers"]) do -- ./ldtk/ldtk.can:465
|
||||||
|
l:draw() -- ./ldtk/ldtk.can:466
|
||||||
|
end -- ./ldtk/ldtk.can:466
|
||||||
|
lg["pop"]() -- ./ldtk/ldtk.can:468
|
||||||
|
end, -- ./ldtk/ldtk.can:468
|
||||||
|
["drawBackground"] = function(self, x, y) -- ./ldtk/ldtk.can:479
|
||||||
|
if x == nil then x = 0 end -- ./ldtk/ldtk.can:479
|
||||||
|
if y == nil then y = 0 end -- ./ldtk/ldtk.can:479
|
||||||
|
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:480
|
||||||
|
lg["setColor"](self["background"]["color"]) -- ./ldtk/ldtk.can:482
|
||||||
|
lg["rectangle"]("fill", x, y, self["width"], self["height"]) -- ./ldtk/ldtk.can:483
|
||||||
|
lg["setColor"](white) -- ./ldtk/ldtk.can:485
|
||||||
|
local bgImage -- ./ldtk/ldtk.can:486
|
||||||
|
bgImage = self["background"]["image"] -- ./ldtk/ldtk.can:486
|
||||||
|
if bgImage then -- ./ldtk/ldtk.can:487
|
||||||
|
lg["draw"](bgImage["image"], bgImage["quad"], x + bgImage["x"], y + bgImage["y"], 0, bgImage["sx"], bgImage["sy"]) -- ./ldtk/ldtk.can:488
|
||||||
|
end -- ./ldtk/ldtk.can:488
|
||||||
|
end, -- ./ldtk/ldtk.can:488
|
||||||
|
["load"] = function(self, callbacks) -- ./ldtk/ldtk.can:506
|
||||||
|
if callbacks == nil then callbacks = {} end -- ./ldtk/ldtk.can:506
|
||||||
|
assert(self["loaded"] == false, "level already loaded") -- ./ldtk/ldtk.can:507
|
||||||
|
if self["_json"]["bgRelPath"] then -- ./ldtk/ldtk.can:508
|
||||||
|
local pos -- ./ldtk/ldtk.can:509
|
||||||
|
pos = self["_json"]["__bgPos"] -- ./ldtk/ldtk.can:509
|
||||||
|
local cropRect -- ./ldtk/ldtk.can:510
|
||||||
|
cropRect = pos["cropRect"] -- ./ldtk/ldtk.can:510
|
||||||
|
local image -- ./ldtk/ldtk.can:511
|
||||||
|
image = cache["image"](self["project"]["_directory"] .. self["_json"]["bgRelPath"]) -- ./ldtk/ldtk.can:511
|
||||||
|
self["background"]["image"] = { -- ./ldtk/ldtk.can:512
|
||||||
|
["image"] = image, -- ./ldtk/ldtk.can:513
|
||||||
|
["quad"] = newQuad(cropRect[1], cropRect[2], cropRect[3], cropRect[4], image), -- ./ldtk/ldtk.can:514
|
||||||
|
["x"] = pos["topLeftPx"][1], -- ./ldtk/ldtk.can:515
|
||||||
|
["y"] = pos["topLeftPx"][2], -- ./ldtk/ldtk.can:516
|
||||||
|
["sx"] = pos["scale"][1], -- ./ldtk/ldtk.can:517
|
||||||
|
["sy"] = pos["scale"][1] -- ./ldtk/ldtk.can:518
|
||||||
|
} -- ./ldtk/ldtk.can:518
|
||||||
|
end -- ./ldtk/ldtk.can:518
|
||||||
|
local layerInstances -- ./ldtk/ldtk.can:521
|
||||||
|
if self["_json"]["externalRelPath"] then -- ./ldtk/ldtk.can:522
|
||||||
|
layerInstances = readJson(self["project"]["_directory"] .. self["_json"]["externalRelPath"])["layerInstances"] -- ./ldtk/ldtk.can:523
|
||||||
|
else -- ./ldtk/ldtk.can:523
|
||||||
|
layerInstances = self["_json"]["layerInstances"] -- ./ldtk/ldtk.can:525
|
||||||
|
end -- ./ldtk/ldtk.can:525
|
||||||
|
self["layers"] = {} -- ./ldtk/ldtk.can:527
|
||||||
|
local onAddLayer -- ./ldtk/ldtk.can:528
|
||||||
|
onAddLayer = callbacks["onAddLayer"] -- ./ldtk/ldtk.can:528
|
||||||
|
for i = # layerInstances, 1, - 1 do -- ./ldtk/ldtk.can:529
|
||||||
|
local layer = layer_mt["_init"](layerInstances[i], self, i, callbacks) -- ./ldtk/ldtk.can:530
|
||||||
|
table["insert"](self["layers"], layer) -- ./ldtk/ldtk.can:531
|
||||||
|
if onAddLayer then -- ./ldtk/ldtk.can:532
|
||||||
|
onAddLayer(layer) -- ./ldtk/ldtk.can:532
|
||||||
|
end -- ./ldtk/ldtk.can:532
|
||||||
|
end -- ./ldtk/ldtk.can:532
|
||||||
|
self["loaded"] = true -- ./ldtk/ldtk.can:534
|
||||||
|
end, -- ./ldtk/ldtk.can:534
|
||||||
|
["unload"] = function(self, callbacks) -- ./ldtk/ldtk.can:547
|
||||||
|
if callbacks == nil then callbacks = {} end -- ./ldtk/ldtk.can:547
|
||||||
|
assert(self["loaded"] == true, "level not loaded") -- ./ldtk/ldtk.can:548
|
||||||
|
local onRemoveLayer -- ./ldtk/ldtk.can:549
|
||||||
|
onRemoveLayer = callbacks["onRemoveLayer"] -- ./ldtk/ldtk.can:549
|
||||||
|
for _, l in ipairs(self["layers"]) do -- ./ldtk/ldtk.can:550
|
||||||
|
l:_unloadCallbacks(callbacks) -- ./ldtk/ldtk.can:551
|
||||||
|
if onRemoveLayer then -- ./ldtk/ldtk.can:552
|
||||||
|
onRemoveLayer(l) -- ./ldtk/ldtk.can:552
|
||||||
|
end -- ./ldtk/ldtk.can:552
|
||||||
|
end -- ./ldtk/ldtk.can:552
|
||||||
|
self["loaded"] = false -- ./ldtk/ldtk.can:554
|
||||||
|
self["background"]["image"] = nil -- ./ldtk/ldtk.can:555
|
||||||
|
self["layers"] = nil -- ./ldtk/ldtk.can:556
|
||||||
|
end, -- ./ldtk/ldtk.can:556
|
||||||
|
["_init"] = function(level, project) -- ./ldtk/ldtk.can:559
|
||||||
|
local t -- ./ldtk/ldtk.can:560
|
||||||
|
t = { -- ./ldtk/ldtk.can:560
|
||||||
|
["project"] = project, -- ./ldtk/ldtk.can:563
|
||||||
|
["loaded"] = false, -- ./ldtk/ldtk.can:566
|
||||||
|
["identifier"] = level["identifier"], -- ./ldtk/ldtk.can:569
|
||||||
|
["x"] = level["worldX"], -- ./ldtk/ldtk.can:572
|
||||||
|
["y"] = level["worldY"], -- ./ldtk/ldtk.can:575
|
||||||
|
["width"] = level["pxWid"], -- ./ldtk/ldtk.can:578
|
||||||
|
["height"] = level["pxHei"], -- ./ldtk/ldtk.can:581
|
||||||
|
["fields"] = getFields(level["fieldInstances"]), -- ./ldtk/ldtk.can:584
|
||||||
|
["layers"] = nil, -- ./ldtk/ldtk.can:587
|
||||||
|
["background"] = { -- ./ldtk/ldtk.can:595
|
||||||
|
["color"] = parseColor(level["__bgColor"]), -- ./ldtk/ldtk.can:596
|
||||||
|
["image"] = nil -- ./ldtk/ldtk.can:597
|
||||||
|
}, -- ./ldtk/ldtk.can:597
|
||||||
|
["_json"] = level -- ./ldtk/ldtk.can:601
|
||||||
|
} -- ./ldtk/ldtk.can:601
|
||||||
|
return setmetatable(t, level_mt) -- ./ldtk/ldtk.can:603
|
||||||
|
end -- ./ldtk/ldtk.can:603
|
||||||
|
} -- ./ldtk/ldtk.can:603
|
||||||
|
level_mt["__index"] = level_mt -- ./ldtk/ldtk.can:606
|
||||||
|
local project_mt -- ./ldtk/ldtk.can:613
|
||||||
|
project_mt = { ["_init"] = function(project, directory) -- ./ldtk/ldtk.can:614
|
||||||
|
assert(project["jsonVersion"] == "0.9.3", ("the map was made with LDtk version %s but the importer is made for 0.9.3"):format(project["jsonVersion"])) -- ./ldtk/ldtk.can:615
|
||||||
|
local t -- ./ldtk/ldtk.can:616
|
||||||
|
t = { -- ./ldtk/ldtk.can:616
|
||||||
|
["levels"] = nil, -- ./ldtk/ldtk.can:619
|
||||||
|
["_directory"] = directory, -- ./ldtk/ldtk.can:622
|
||||||
|
["_layerDef"] = nil, -- ./ldtk/ldtk.can:623
|
||||||
|
["_tilesetData"] = nil, -- ./ldtk/ldtk.can:624
|
||||||
|
["_entityData"] = nil -- ./ldtk/ldtk.can:625
|
||||||
|
} -- ./ldtk/ldtk.can:625
|
||||||
|
t["levels"] = (function() -- ./ldtk/ldtk.can:627
|
||||||
|
local self = {} -- ./ldtk/ldtk.can:627
|
||||||
|
for _, lvl in ipairs(project["levels"]) do -- ./ldtk/ldtk.can:628
|
||||||
|
do -- ./ldtk/ldtk.can:629
|
||||||
|
local __CAN_a = table.pack(level_mt["_init"](lvl, t)) -- ./ldtk/ldtk.can:629
|
||||||
|
table.move(__CAN_a, 1, __CAN_a.n, #self+1, self) -- ./ldtk/ldtk.can:629
|
||||||
|
end -- ./ldtk/ldtk.can:629
|
||||||
|
end -- ./ldtk/ldtk.can:629
|
||||||
|
return self -- ./ldtk/ldtk.can:629
|
||||||
|
end)() -- ./ldtk/ldtk.can:629
|
||||||
|
t["_tilesetData"] = (function() -- ./ldtk/ldtk.can:632
|
||||||
|
local self = {} -- ./ldtk/ldtk.can:632
|
||||||
|
for _, ts in ipairs(project["defs"]["tilesets"]) do -- ./ldtk/ldtk.can:633
|
||||||
|
self[ts["uid"]] = { ["path"] = directory .. ts["relPath"] } -- ./ldtk/ldtk.can:635
|
||||||
|
local tilesetData = self[ts["uid"]] -- ./ldtk/ldtk.can:637
|
||||||
|
for gridx = 0, ts["__cWid"] - 1 do -- ./ldtk/ldtk.can:638
|
||||||
|
for gridy = 0, ts["__cHei"] - 1 do -- ./ldtk/ldtk.can:639
|
||||||
|
tilesetData[gridx + gridy * ts["__cWid"]] = { -- ./ldtk/ldtk.can:640
|
||||||
|
["tags"] = {}, -- ./ldtk/ldtk.can:641
|
||||||
|
["data"] = nil -- ./ldtk/ldtk.can:642
|
||||||
|
} -- ./ldtk/ldtk.can:642
|
||||||
|
end -- ./ldtk/ldtk.can:642
|
||||||
|
end -- ./ldtk/ldtk.can:642
|
||||||
|
for _, custom in ipairs(ts["customData"]) do -- ./ldtk/ldtk.can:646
|
||||||
|
tilesetData[custom["tileId"]]["data"] = custom["data"] -- ./ldtk/ldtk.can:647
|
||||||
|
end -- ./ldtk/ldtk.can:647
|
||||||
|
for _, tag in ipairs(ts["enumTags"]) do -- ./ldtk/ldtk.can:649
|
||||||
|
local value = tag["enumValueId"] -- ./ldtk/ldtk.can:650
|
||||||
|
for _, tileId in ipairs(tag["tileIds"]) do -- ./ldtk/ldtk.can:651
|
||||||
|
table["insert"](tilesetData[tileId]["tags"], value) -- ./ldtk/ldtk.can:652
|
||||||
|
tilesetData[tileId]["tags"][value] = true -- ./ldtk/ldtk.can:653
|
||||||
|
end -- ./ldtk/ldtk.can:653
|
||||||
|
end -- ./ldtk/ldtk.can:653
|
||||||
|
end -- ./ldtk/ldtk.can:653
|
||||||
|
return self -- ./ldtk/ldtk.can:653
|
||||||
|
end)() -- ./ldtk/ldtk.can:653
|
||||||
|
t["_layerDef"] = (function() -- ./ldtk/ldtk.can:658
|
||||||
|
local self = {} -- ./ldtk/ldtk.can:658
|
||||||
|
for _, lay in ipairs(project["defs"]["layers"]) do -- ./ldtk/ldtk.can:659
|
||||||
|
self[lay["uid"]] = { ["intGridValues"] = nil } -- ./ldtk/ldtk.can:661
|
||||||
|
local layerDef = self[lay["uid"]] -- ./ldtk/ldtk.can:663
|
||||||
|
if lay["__type"] == "IntGrid" then -- ./ldtk/ldtk.can:664
|
||||||
|
layerDef["intGridValues"] = (function() -- ./ldtk/ldtk.can:665
|
||||||
|
local self = {} -- ./ldtk/ldtk.can:665
|
||||||
|
for _, v in ipairs(lay["intGridValues"]) do -- ./ldtk/ldtk.can:666
|
||||||
|
self[v["value"]] = { -- ./ldtk/ldtk.can:667
|
||||||
|
["color"] = parseColor(v["color"]), -- ./ldtk/ldtk.can:668
|
||||||
|
["identifier"] = v["identifier"] -- ./ldtk/ldtk.can:669
|
||||||
|
} -- ./ldtk/ldtk.can:669
|
||||||
|
end -- ./ldtk/ldtk.can:669
|
||||||
|
return self -- ./ldtk/ldtk.can:669
|
||||||
|
end)() -- ./ldtk/ldtk.can:669
|
||||||
|
end -- ./ldtk/ldtk.can:669
|
||||||
|
end -- ./ldtk/ldtk.can:669
|
||||||
|
return self -- ./ldtk/ldtk.can:669
|
||||||
|
end)() -- ./ldtk/ldtk.can:669
|
||||||
|
t["_entityData"] = (function() -- ./ldtk/ldtk.can:676
|
||||||
|
local self = {} -- ./ldtk/ldtk.can:676
|
||||||
|
for _, ent in ipairs(project["defs"]["entities"]) do -- ./ldtk/ldtk.can:677
|
||||||
|
self[ent["uid"]] = { -- ./ldtk/ldtk.can:678
|
||||||
|
["color"] = parseColor(ent["color"]), -- ./ldtk/ldtk.can:679
|
||||||
|
["width"] = ent["width"], -- ./ldtk/ldtk.can:680
|
||||||
|
["height"] = ent["height"] -- ./ldtk/ldtk.can:681
|
||||||
|
} -- ./ldtk/ldtk.can:681
|
||||||
|
end -- ./ldtk/ldtk.can:681
|
||||||
|
return self -- ./ldtk/ldtk.can:681
|
||||||
|
end)() -- ./ldtk/ldtk.can:681
|
||||||
|
return setmetatable(t, project_mt) -- ./ldtk/ldtk.can:685
|
||||||
|
end } -- ./ldtk/ldtk.can:685
|
||||||
|
project_mt["__index"] = project_mt -- ./ldtk/ldtk.can:688
|
||||||
|
return function(file) -- ./ldtk/ldtk.can:719
|
||||||
|
return project_mt["_init"](readJson(file), file:match("^(.-)[^%/%\\]+$")) -- ./ldtk/ldtk.can:720
|
||||||
|
end -- ./ldtk/ldtk.can:720
|
||||||
36
make
Executable file
36
make
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
script="$(realpath $0)"
|
||||||
|
dir="$(dirname $0)"
|
||||||
|
|
||||||
|
cd "$dir"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
can)
|
||||||
|
canc $(find . -type f -iname '*.can')
|
||||||
|
;;
|
||||||
|
|
||||||
|
docs)
|
||||||
|
ldoc .
|
||||||
|
;;
|
||||||
|
|
||||||
|
clean)
|
||||||
|
rm -rf docs
|
||||||
|
for f in $(find . -type f -iname '*.can'); do
|
||||||
|
rm -f "${f%.can}.lua"
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
all)
|
||||||
|
$script docs
|
||||||
|
$script can
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "make all: build everything"
|
||||||
|
echo "make can: build Candran files into Lua files"
|
||||||
|
echo "make docs: build HTML documentation in docs/"
|
||||||
|
echo "make clean: remove built documentation & Lua files"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
143
signal/signal.lua
Normal file
143
signal/signal.lua
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
local registry_mt -- ./signal/signal.can:13
|
||||||
|
registry_mt = { -- ./signal/signal.can:13
|
||||||
|
["signals"] = {}, -- ./signal/signal.can:16
|
||||||
|
["bind"] = function(self, name, fn, ...) -- ./signal/signal.can:22
|
||||||
|
if not self["signals"][name] then -- ./signal/signal.can:23
|
||||||
|
self["signals"][name] = {} -- ./signal/signal.can:24
|
||||||
|
end -- ./signal/signal.can:24
|
||||||
|
table["insert"](self["signals"][name], fn) -- ./signal/signal.can:26
|
||||||
|
if ... then -- ./signal/signal.can:27
|
||||||
|
self:bind(name, ...) -- ./signal/signal.can:28
|
||||||
|
end -- ./signal/signal.can:28
|
||||||
|
end, -- ./signal/signal.can:28
|
||||||
|
["unbind"] = function(self, name, fn, ...) -- ./signal/signal.can:36
|
||||||
|
if not self["signals"][name] then -- ./signal/signal.can:37
|
||||||
|
return -- ./signal/signal.can:38
|
||||||
|
end -- ./signal/signal.can:38
|
||||||
|
for i = # self["signals"][name], 1, - 1 do -- ./signal/signal.can:40
|
||||||
|
if self["signals"][name] == fn then -- ./signal/signal.can:41
|
||||||
|
table["remove"](self["signals"][name], i) -- ./signal/signal.can:42
|
||||||
|
end -- ./signal/signal.can:42
|
||||||
|
end -- ./signal/signal.can:42
|
||||||
|
if ... then -- ./signal/signal.can:45
|
||||||
|
self:unbind(name, ...) -- ./signal/signal.can:46
|
||||||
|
end -- ./signal/signal.can:46
|
||||||
|
end, -- ./signal/signal.can:46
|
||||||
|
["unbindAll"] = function(self, name) -- ./signal/signal.can:52
|
||||||
|
self["signals"][name] = nil -- ./signal/signal.can:53
|
||||||
|
end, -- ./signal/signal.can:53
|
||||||
|
["replace"] = function(self, name, sourceFn, destFn) -- ./signal/signal.can:60
|
||||||
|
if not self["signals"][name] then -- ./signal/signal.can:61
|
||||||
|
self["signals"][name] = {} -- ./signal/signal.can:62
|
||||||
|
end -- ./signal/signal.can:62
|
||||||
|
for i, fn in ipairs(self["signals"][name]) do -- ./signal/signal.can:64
|
||||||
|
if fn == sourceFn then -- ./signal/signal.can:65
|
||||||
|
self["signals"][name][i] = destFn -- ./signal/signal.can:66
|
||||||
|
break -- ./signal/signal.can:67
|
||||||
|
end -- ./signal/signal.can:67
|
||||||
|
end -- ./signal/signal.can:67
|
||||||
|
end, -- ./signal/signal.can:67
|
||||||
|
["clear"] = function(self) -- ./signal/signal.can:73
|
||||||
|
self["signals"] = {} -- ./signal/signal.can:74
|
||||||
|
end, -- ./signal/signal.can:74
|
||||||
|
["emit"] = function(self, name, ...) -- ./signal/signal.can:80
|
||||||
|
if self["signals"][name] then -- ./signal/signal.can:81
|
||||||
|
for _, fn in ipairs(self["signals"][name]) do -- ./signal/signal.can:82
|
||||||
|
fn(...) -- ./signal/signal.can:83
|
||||||
|
end -- ./signal/signal.can:83
|
||||||
|
end -- ./signal/signal.can:83
|
||||||
|
end -- ./signal/signal.can:83
|
||||||
|
} -- ./signal/signal.can:83
|
||||||
|
registry_mt["__index"] = registry_mt -- ./signal/signal.can:88
|
||||||
|
local signal -- ./signal/signal.can:96
|
||||||
|
signal = { -- ./signal/signal.can:96
|
||||||
|
["new"] = function() -- ./signal/signal.can:99
|
||||||
|
return setmetatable({ ["signals"] = {} }, registry_mt) -- ./signal/signal.can:100
|
||||||
|
end, -- ./signal/signal.can:100
|
||||||
|
["signals"] = {}, -- ./signal/signal.can:104
|
||||||
|
["bind"] = function(...) -- ./signal/signal.can:105
|
||||||
|
return registry_mt["bind"](signal, ...) -- ./signal/signal.can:106
|
||||||
|
end, -- ./signal/signal.can:106
|
||||||
|
["unbind"] = function(...) -- ./signal/signal.can:108
|
||||||
|
return registry_mt["unbind"](signal, ...) -- ./signal/signal.can:109
|
||||||
|
end, -- ./signal/signal.can:109
|
||||||
|
["unbindAll"] = function(...) -- ./signal/signal.can:111
|
||||||
|
return registry_mt["unbindAll"](signal, ...) -- ./signal/signal.can:112
|
||||||
|
end, -- ./signal/signal.can:112
|
||||||
|
["replace"] = function(...) -- ./signal/signal.can:114
|
||||||
|
return registry_mt["replace"](signal, ...) -- ./signal/signal.can:115
|
||||||
|
end, -- ./signal/signal.can:115
|
||||||
|
["clear"] = function(...) -- ./signal/signal.can:117
|
||||||
|
return registry_mt["clear"](signal, ...) -- ./signal/signal.can:118
|
||||||
|
end, -- ./signal/signal.can:118
|
||||||
|
["emit"] = function(...) -- ./signal/signal.can:120
|
||||||
|
return registry_mt["emit"](signal, ...) -- ./signal/signal.can:121
|
||||||
|
end, -- ./signal/signal.can:121
|
||||||
|
["event"] = nil, -- ./signal/signal.can:136
|
||||||
|
["registerEvents"] = function() -- ./signal/signal.can:141
|
||||||
|
local callbacks = { -- ./signal/signal.can:142
|
||||||
|
"displayrotated", -- ./signal/signal.can:143
|
||||||
|
"draw", -- ./signal/signal.can:143
|
||||||
|
"load", -- ./signal/signal.can:143
|
||||||
|
"lowmemory", -- ./signal/signal.can:143
|
||||||
|
"quit", -- ./signal/signal.can:143
|
||||||
|
"update", -- ./signal/signal.can:143
|
||||||
|
"directorydropped", -- ./signal/signal.can:144
|
||||||
|
"filedropped", -- ./signal/signal.can:144
|
||||||
|
"focus", -- ./signal/signal.can:144
|
||||||
|
"mousefocus", -- ./signal/signal.can:144
|
||||||
|
"resize", -- ./signal/signal.can:144
|
||||||
|
"visible", -- ./signal/signal.can:144
|
||||||
|
"keypressed", -- ./signal/signal.can:145
|
||||||
|
"keyreleased", -- ./signal/signal.can:145
|
||||||
|
"textedited", -- ./signal/signal.can:145
|
||||||
|
"textinput", -- ./signal/signal.can:145
|
||||||
|
"mousemoved", -- ./signal/signal.can:146
|
||||||
|
"mousepressed", -- ./signal/signal.can:146
|
||||||
|
"mousereleased", -- ./signal/signal.can:146
|
||||||
|
"wheelmoved", -- ./signal/signal.can:146
|
||||||
|
"gamepadaxis", -- ./signal/signal.can:147
|
||||||
|
"gamepadpressed", -- ./signal/signal.can:147
|
||||||
|
"gamepadreleased", -- ./signal/signal.can:147
|
||||||
|
"joystickadded", -- ./signal/signal.can:148
|
||||||
|
"joystickaxis", -- ./signal/signal.can:148
|
||||||
|
"joystickhat", -- ./signal/signal.can:148
|
||||||
|
"joystickpressed", -- ./signal/signal.can:148
|
||||||
|
"joystickreleased", -- ./signal/signal.can:148
|
||||||
|
"joystickremoved", -- ./signal/signal.can:148
|
||||||
|
"touchmoved", -- ./signal/signal.can:149
|
||||||
|
"touchpressed", -- ./signal/signal.can:149
|
||||||
|
"touchreleased" -- ./signal/signal.can:149
|
||||||
|
} -- ./signal/signal.can:149
|
||||||
|
local event = signal["event"] -- ./signal/signal.can:151
|
||||||
|
for _, callback in ipairs(callbacks) do -- ./signal/signal.can:152
|
||||||
|
if callback == "update" then -- ./signal/signal.can:153
|
||||||
|
if love[callback] then -- ./signal/signal.can:154
|
||||||
|
local old = love[callback] -- ./signal/signal.can:155
|
||||||
|
love[callback] = function(dt) -- ./signal/signal.can:156
|
||||||
|
old(dt) -- ./signal/signal.can:157
|
||||||
|
event:emit(callback, dt) -- ./signal/signal.can:158
|
||||||
|
end -- ./signal/signal.can:158
|
||||||
|
else -- ./signal/signal.can:158
|
||||||
|
love[callback] = function(dt) -- ./signal/signal.can:161
|
||||||
|
event:emit(callback, dt) -- ./signal/signal.can:162
|
||||||
|
end -- ./signal/signal.can:162
|
||||||
|
end -- ./signal/signal.can:162
|
||||||
|
else -- ./signal/signal.can:162
|
||||||
|
if love[callback] then -- ./signal/signal.can:166
|
||||||
|
local old = love[callback] -- ./signal/signal.can:167
|
||||||
|
love[callback] = function(...) -- ./signal/signal.can:168
|
||||||
|
old(...) -- ./signal/signal.can:169
|
||||||
|
event:emit(callback, ...) -- ./signal/signal.can:170
|
||||||
|
end -- ./signal/signal.can:170
|
||||||
|
else -- ./signal/signal.can:170
|
||||||
|
love[callback] = function(...) -- ./signal/signal.can:173
|
||||||
|
event:emit(callback, ...) -- ./signal/signal.can:174
|
||||||
|
end -- ./signal/signal.can:174
|
||||||
|
end -- ./signal/signal.can:174
|
||||||
|
end -- ./signal/signal.can:174
|
||||||
|
end -- ./signal/signal.can:174
|
||||||
|
end -- ./signal/signal.can:174
|
||||||
|
} -- ./signal/signal.can:174
|
||||||
|
signal["event"] = signal["new"]() -- ./signal/signal.can:182
|
||||||
|
return signal -- ./signal/signal.can:184
|
||||||
Loading…
Add table
Add a link
Reference in a new issue