mirror of
https://github.com/bakpakin/tiny-ecs.git
synced 2024-11-17 04:44:23 +00:00
635 lines
16 KiB
HTML
635 lines
16 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<head>
|
|
<title>tiny-ecs API</title>
|
|
<link rel="stylesheet" href="ldoc_fixed.css" type="text/css" />
|
|
</head>
|
|
<body>
|
|
|
|
<div id="container">
|
|
|
|
<div id="product">
|
|
<div id="product_logo"></div>
|
|
<div id="product_name"><big><b></b></big></div>
|
|
<div id="product_description"></div>
|
|
</div> <!-- id="product" -->
|
|
|
|
|
|
<div id="main">
|
|
|
|
|
|
<!-- Menu -->
|
|
|
|
<div id="navigation">
|
|
<br/>
|
|
<h1>tiny-ecs</h1>
|
|
|
|
|
|
<h2>Contents</h2>
|
|
<ul>
|
|
<li><a href="#Filter_functions">Filter functions </a></li>
|
|
<li><a href="#System_functions">System functions </a></li>
|
|
<li><a href="#World_functions">World functions </a></li>
|
|
</ul>
|
|
|
|
|
|
<h2>Modules</h2>
|
|
<ul class="$(kind=='Topics' and '' or 'nowrap'">
|
|
<li><strong>tiny-ecs</strong></li>
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div id="content">
|
|
|
|
<h1>Module <code>tiny-ecs</code></h1>
|
|
<p>
|
|
|
|
</p>
|
|
<p>
|
|
|
|
</p>
|
|
<h3>Info:</h3>
|
|
<ul>
|
|
<li><strong>Copyright</strong>: 2015</li>
|
|
<li><strong>License</strong>: MIT</li>
|
|
<li><strong>Author</strong>: Calvin Rose</li>
|
|
</ul>
|
|
|
|
|
|
<h2><a href="#Filter_functions">Filter functions </a></h2>
|
|
<table class="function_list">
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.requireAll">tiny.requireAll (...)</a></td>
|
|
<td class="summary">Makes a Filter that selects Entities with all specified Components and
|
|
Filters.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.requireAny">tiny.requireAny (...)</a></td>
|
|
<td class="summary">Makes a Filter that selects Entities with at least one of the specified
|
|
Components and Filters.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.rejectAll">tiny.rejectAll (...)</a></td>
|
|
<td class="summary">Makes a Filter that rejects Entities with all specified Components and
|
|
Filters, and selects all other Entities.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.rejectAny">tiny.rejectAny (...)</a></td>
|
|
<td class="summary">Makes a Filter that rejects Entities with at least one of the specified
|
|
Components and Filters, and selects all other Entities.</td>
|
|
</tr>
|
|
</table>
|
|
<h2><a href="#System_functions">System functions </a></h2>
|
|
<table class="function_list">
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.system">tiny.system (table, attributes)</a></td>
|
|
<td class="summary">Creates a new System or System class.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.processingSystem">tiny.processingSystem (table)</a></td>
|
|
<td class="summary">Creates a new Processing System or Processing System class.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.getSystemEntityCount">tiny.getSystemEntityCount (system)</a></td>
|
|
<td class="summary">Get number of Entities in the System.</td>
|
|
</tr>
|
|
</table>
|
|
<h2><a href="#World_functions">World functions </a></h2>
|
|
<table class="function_list">
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.world">tiny.world (...)</a></td>
|
|
<td class="summary">Creates a new World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.addEntity">tiny.addEntity (world, entity)</a></td>
|
|
<td class="summary">Adds an Entity to the world.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.addSystem">tiny.addSystem (world, system)</a></td>
|
|
<td class="summary">Adds a System to the world.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.add">tiny.add (world, ...)</a></td>
|
|
<td class="summary">Shortcut for adding multiple Entities and Systems to the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.removeEntity">tiny.removeEntity (world, entity)</a></td>
|
|
<td class="summary">Removes an Entity to the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.removeSystem">tiny.removeSystem (world, system)</a></td>
|
|
<td class="summary">Removes a System from the world.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.remove">tiny.remove (world, ...)</a></td>
|
|
<td class="summary">Shortcut for removing multiple Entities and Systems from the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.update">tiny.update (world, dt, filter)</a></td>
|
|
<td class="summary">Updates the World by dt (delta time).</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.clearEntities">tiny.clearEntities (world)</a></td>
|
|
<td class="summary">Removes all Entities from the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.clearSystems">tiny.clearSystems (world)</a></td>
|
|
<td class="summary">Removes all Systems from the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.getEntityCount">tiny.getEntityCount (world)</a></td>
|
|
<td class="summary">Gets number of Entities in the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.getSystemCount">tiny.getSystemCount (world)</a></td>
|
|
<td class="summary">Gets number of Systems in World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.getSystemIndex">tiny.getSystemIndex (world, system)</a></td>
|
|
<td class="summary">Gets the index of a System in the World.</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="name" nowrap><a href="#tiny.setSystemIndex">tiny.setSystemIndex (world, system, index)</a></td>
|
|
<td class="summary">Sets the index of a System in the World, and returns the old index.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br/>
|
|
<br/>
|
|
|
|
|
|
<h2 class="section-header has-description"><a name="Filter_functions"></a>Filter functions </h2>
|
|
|
|
<div class="section-description">
|
|
|
|
|
|
<p> A Filter is a function that selects which Entities apply to a System.
|
|
Filters take two parameters, the System and the Entity, and return a boolean
|
|
value indicating if the Entity should be processed by the System.</p>
|
|
|
|
<p> Filters must be added to Systems by setting the <code>filter</code> field of the System.
|
|
Filter's returned by <a href="index.html#tiny.requireAll">tiny.requireAll</a> and <a href="index.html#tiny.requireAny">tiny.requireAny</a> are immutable
|
|
and can be used by multiple Systems.</p>
|
|
|
|
<pre><code>local f1 = tiny.requireAll("position", "velocity", "size")
|
|
local f2 = tiny.requireAny("position", "velocity", "size")
|
|
|
|
local e1 = {
|
|
position = {2, 3},
|
|
velocity = {3, 3},
|
|
size = {4, 4}
|
|
}
|
|
|
|
local entity2 = {
|
|
position = {4, 5},
|
|
size = {4, 4}
|
|
}
|
|
|
|
local e3 = {
|
|
position = {2, 3},
|
|
velocity = {3, 3}
|
|
}
|
|
|
|
print(f1(nil, e1), f1(nil, e2), f1(nil, e3)) -- prints true, false, false
|
|
print(f2(nil, e1), f2(nil, e2), f2(nil, e3)) -- prints true, true, true
|
|
</code></pre>
|
|
|
|
<p> Filters can also be passed as arguments to other Filter constructors. This is
|
|
a powerful way to create complex, custom Filters that select a very specific
|
|
set of Entities.</p>
|
|
|
|
<pre><code>-- Selects Entities with an "image" Component, but not Entities with a
|
|
-- "Player" or "Enemy" Component.
|
|
filter = tiny.requireAll("image", tiny.rejectAny("Player", "Enemy"))
|
|
</code></pre>
|
|
|
|
|
|
</div>
|
|
<dl class="function">
|
|
<dt>
|
|
<a name = "tiny.requireAll"></a>
|
|
<strong>tiny.requireAll (...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Makes a Filter that selects Entities with all specified Components and
|
|
Filters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.requireAny"></a>
|
|
<strong>tiny.requireAny (...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Makes a Filter that selects Entities with at least one of the specified
|
|
Components and Filters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.rejectAll"></a>
|
|
<strong>tiny.rejectAll (...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Makes a Filter that rejects Entities with all specified Components and
|
|
Filters, and selects all other Entities.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.rejectAny"></a>
|
|
<strong>tiny.rejectAny (...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Makes a Filter that rejects Entities with at least one of the specified
|
|
Components and Filters, and selects all other Entities.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
</dl>
|
|
<h2 class="section-header has-description"><a name="System_functions"></a>System functions </h2>
|
|
|
|
<div class="section-description">
|
|
|
|
|
|
<p> A System is a wrapper around function callbacks for manipulating Entities.
|
|
Systems are implemented as tables that contain at least one method;
|
|
an update function that takes parameters like so:</p>
|
|
|
|
<ul>
|
|
<li><code>function system:update(dt)</code>.</li>
|
|
</ul>
|
|
|
|
<p> There are also a few other optional callbacks:</p>
|
|
|
|
<ul>
|
|
<li><code>function system:filter(entity)</code> - Returns true if this System should
|
|
include this Entity, otherwise should return false. If this isn't specified,
|
|
no Entities are included in the System.</li>
|
|
<li><code>function system:onAdd(entity)</code> - Called when an Entity is added to the
|
|
System.</li>
|
|
<li><code>function system:onRemove(entity)</code> - Called when an Entity is removed
|
|
from the System.</li>
|
|
<li><code>function system:onModify(dt)</code> - Called when the System is modified by
|
|
adding or removing Entities from the System.</li>
|
|
</ul>
|
|
|
|
<p> For Filters, it is convenient to use <a href="index.html#tiny.requireAll">tiny.requireAll</a> or <a href="index.html#tiny.requireAny">tiny.requireAny</a>,
|
|
but one can write their own filters as well. Set the Filter of a System like
|
|
so:</p>
|
|
<pre><code>system.filter = tiny.requireAll("a", "b", "c")
|
|
</code></pre>
|
|
<p> or</p>
|
|
<pre><code>function system:filter(entity)
|
|
return entity.myRequiredComponentName ~= nil
|
|
end
|
|
</code></pre>
|
|
|
|
<p> All Systems also have a few important fields that are initialized when the
|
|
system is added to the World. A few are important, and few should be less
|
|
commonly used.</p>
|
|
|
|
<ul>
|
|
<li>The <code>active</code> flag is whether or not the System is updated automatically.
|
|
Inactive Systems should be updated manually or not at all via
|
|
<code>system:update(dt)</code>. Defaults to true.</li>
|
|
<li>The 'entities' field is an ordered list of Entities in the System. This
|
|
list can be used to quickly iterate through all Entities in a System.</li>
|
|
<li>The <code>indices</code> field is a table of Entity keys to their indices in the
|
|
<code>entities</code> list. Most Systems can ignore this.</li>
|
|
<li>The <code>modified</code> flag is an indicator if the System has been modified in
|
|
the last update. If so, the <code>onModify</code> callback will be called on the System
|
|
in the next update, if it has one. This is usually managed by tiny-ecs, so
|
|
users should mostly ignore this, too.</li>
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
<dl class="function">
|
|
<dt>
|
|
<a name = "tiny.system"></a>
|
|
<strong>tiny.system (table, attributes)</strong>
|
|
</dt>
|
|
<dd>
|
|
Creates a new System or System class. An optinal list of attributes may be
|
|
passed to specify the behavior of the System. Currently, the three supported
|
|
attributes are <code>"process"</code>, <code>"sorted"</code>, and <code>"interval"</code>.</p>
|
|
|
|
<ul>
|
|
<li><code>"process"</code> marks the new System as a Processing System. Processing
|
|
Systems process each entity individual, and are usually what is needed.
|
|
Processing Systems have three extra callbacks compared to a vanilla System.
|
|
<ul>
|
|
<li><code>function system:preProcess(entities, dt)</code> - Called before iterating
|
|
over each Entity.</li>
|
|
<li><code>function system:postProcess(entities, dt)</code> - Called for each Entity in
|
|
the System.</li>
|
|
<li><code>function system:process(entity, dt)</code> - Called after iteration.
|
|
Processing Systems have their own <a href="index.html#tiny.update">update</a> method, so don't implement a
|
|
a custom <a href="index.html#tiny.update">update</a> callback for Processing Systems.</li>
|
|
</ul></li>
|
|
<li><code>"sorted"</code> marks the new System as a Sorted System. Sorted Systems sort
|
|
their Entities according to a user-defined method, <code>system:compare(e1, e2)</code>,
|
|
which should return true if <code>e1</code> should come before <code>e2</code> and false otherwise.</li>
|
|
<li><code>"interval"</code> marks the new System as an Interval System. Interval
|
|
Systems are updated regulary according to an interval rather than every time
|
|
the world is update. This is useful for Systems that don't need to be updated
|
|
often or need be deterministic. Interval Systems have a user-defined field
|
|
<code>interval</code> that is the time interval between updates. If no interval is
|
|
specified, a default of 1 is used.</li>
|
|
</ul>
|
|
|
|
<p> If <a href="http://www.lua.org/manual/5.2/manual.html#6.5">table</a> is <code>nil</code>, this function uses an empty table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.processingSystem"></a>
|
|
<strong>tiny.processingSystem (table)</strong>
|
|
</dt>
|
|
<dd>
|
|
Creates a new Processing System or Processing System class. Shortcut for
|
|
<code>tiny.system(table, { "process" })</code>.
|
|
|
|
|
|
|
|
|
|
|
|
<h3>See also:</h3>
|
|
<ul>
|
|
<a href="index.html#tiny.system">system</a>
|
|
</ul>
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.getSystemEntityCount"></a>
|
|
<strong>tiny.getSystemEntityCount (system)</strong>
|
|
</dt>
|
|
<dd>
|
|
Get number of Entities in the System.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
</dl>
|
|
<h2 class="section-header has-description"><a name="World_functions"></a>World functions </h2>
|
|
|
|
<div class="section-description">
|
|
A World is a container that manages Entities and Systems. Typically, a
|
|
program uses one World at a time.</p>
|
|
|
|
<p> For all World functions except <code>tiny.world(...)</code>, object-oriented syntax can
|
|
be used instead of the documented syntax. For example,
|
|
<code>tiny.add(world, e1, e2, e3)</code> is the same as <code>world:add(e1, e2, e3)</code>.
|
|
</div>
|
|
<dl class="function">
|
|
<dt>
|
|
<a name = "tiny.world"></a>
|
|
<strong>tiny.world (...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Creates a new World.
|
|
Can optionally add default Systems and Entities.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.addEntity"></a>
|
|
<strong>tiny.addEntity (world, entity)</strong>
|
|
</dt>
|
|
<dd>
|
|
Adds an Entity to the world.
|
|
Also call this on Entities that have changed Components such that they
|
|
match different Filters.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.addSystem"></a>
|
|
<strong>tiny.addSystem (world, system)</strong>
|
|
</dt>
|
|
<dd>
|
|
Adds a System to the world.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.add"></a>
|
|
<strong>tiny.add (world, ...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Shortcut for adding multiple Entities and Systems to the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.removeEntity"></a>
|
|
<strong>tiny.removeEntity (world, entity)</strong>
|
|
</dt>
|
|
<dd>
|
|
Removes an Entity to the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.removeSystem"></a>
|
|
<strong>tiny.removeSystem (world, system)</strong>
|
|
</dt>
|
|
<dd>
|
|
Removes a System from the world.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.remove"></a>
|
|
<strong>tiny.remove (world, ...)</strong>
|
|
</dt>
|
|
<dd>
|
|
Shortcut for removing multiple Entities and Systems from the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.update"></a>
|
|
<strong>tiny.update (world, dt, filter)</strong>
|
|
</dt>
|
|
<dd>
|
|
Updates the World by dt (delta time). Takes an optional parameter, <code>filter</code>,
|
|
which is a Filter that selects Systems from the World. Only selected Systems
|
|
are updated. Put this function in your main loop.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.clearEntities"></a>
|
|
<strong>tiny.clearEntities (world)</strong>
|
|
</dt>
|
|
<dd>
|
|
Removes all Entities from the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.clearSystems"></a>
|
|
<strong>tiny.clearSystems (world)</strong>
|
|
</dt>
|
|
<dd>
|
|
Removes all Systems from the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.getEntityCount"></a>
|
|
<strong>tiny.getEntityCount (world)</strong>
|
|
</dt>
|
|
<dd>
|
|
Gets number of Entities in the World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.getSystemCount"></a>
|
|
<strong>tiny.getSystemCount (world)</strong>
|
|
</dt>
|
|
<dd>
|
|
Gets number of Systems in World.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.getSystemIndex"></a>
|
|
<strong>tiny.getSystemIndex (world, system)</strong>
|
|
</dt>
|
|
<dd>
|
|
Gets the index of a System in the World. Lower indexed Systems are processed
|
|
before higher indexed systems.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
<dt>
|
|
<a name = "tiny.setSystemIndex"></a>
|
|
<strong>tiny.setSystemIndex (world, system, index)</strong>
|
|
</dt>
|
|
<dd>
|
|
Sets the index of a System in the World, and returns the old index. Changes
|
|
the order in which they Systems processed, because lower indexed Systems are
|
|
processed first.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</dd>
|
|
</dl>
|
|
|
|
|
|
</div> <!-- id="content" -->
|
|
</div> <!-- id="main" -->
|
|
<div id="about">
|
|
<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.3</a></i>
|
|
<i style="float:right;">Last updated 2015-06-16 23:50:18 </i>
|
|
</div> <!-- id="about" -->
|
|
</div> <!-- id="container" -->
|
|
</body>
|
|
</html>
|