Difference between revisions of "Tuto tiny-ecs beatemup Part 9 Systems"
From GiderosMobile
(wip) |
(wip) |
||
Line 1: | Line 1: | ||
__TOC__ | __TOC__ | ||
− | == The | + | == The Systems == |
− | We have | + | We have our entities, we have our components, now the systems. What is an ECS '''System'''? |
− | + | 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: | |
+ | |||
+ | '''function system:update(dt)''' | ||
+ | |||
+ | There are also a few other optional callbacks: | ||
+ | *'''function system:filter(entity)''' 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. | ||
+ | *'''function system:onAdd(entity)''' Called when an Entity is added to the System. | ||
+ | *function system:onRemove(entity)''' Called when an Entity is removed from the System. | ||
+ | *'''function system:onModify(dt)''' Called when the System is modified by adding or removing Entities from the System. | ||
+ | *'''function system:onAddToWorld(world)''' Called when the System is added to the World, before any entities are added to the system. | ||
+ | *'''function system:onRemoveFromWorld(world)''' Called when the System is removed from the world, after all Entities are removed from the System. | ||
+ | *'''function system:preWrap(dt)''' Called on each system before update is called on any system. | ||
+ | *'''function system:postWrap(dt)''' Called on each system in reverse order after update is called on each system. | ||
+ | |||
+ | '''Please see [[Tiny-ecs#System_functions]] for more information''' | ||
− | + | That looks scary but worry not we won't use all the callback functions :-) | |
− | |||
− | Please create a file "''' | + | To put it simple a '''System''' manipulates entities. Let's see our first '''System'''. |
+ | |||
+ | == sDrawable.lua == | ||
+ | Please create a file "'''sDrawable.lua'''" in the '''"_S"''' folder and the code: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
− | + | SDrawable = Core.class() | |
+ | |||
+ | function SDrawable:init(xtiny) -- tiny function | ||
+ | xtiny.system(self) -- called only once on init (no update) | ||
+ | end | ||
+ | |||
+ | function SDrawable:filter(ent) -- tiny function | ||
+ | return ent.spritelayer and ent.sprite | ||
+ | end | ||
+ | |||
+ | function SDrawable:onAdd(ent) -- tiny function | ||
+ | -- print("SDrawable:onAdd(ent)") | ||
+ | ent.spritelayer:addChild(ent.sprite) | ||
+ | end | ||
− | function | + | function SDrawable:onRemove(ent) -- tiny function |
− | + | -- print("SDrawable:onRemove(ent)") | |
− | + | ent.spritelayer:removeChild(ent.sprite) | |
− | + | -- cleaning? | |
− | + | ent.sprite = nil | |
− | + | ent = nil | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | XXX | |
− | |||
− | |||
− | |||
− | |||
− | |||
== eCollectible.lua == | == eCollectible.lua == | ||
"'''eCollectible.lua'''" in the '''"_E"''' folder. The code: | "'''eCollectible.lua'''" in the '''"_E"''' folder. The code: | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 00:22, 21 November 2024
The Systems
We have our entities, we have our components, now the systems. What is an ECS System?
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: function system:update(dt) There are also a few other optional callbacks: *function system:filter(entity) 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. *function system:onAdd(entity) Called when an Entity is added to the System. *function system:onRemove(entity) Called when an Entity is removed from the System. *function system:onModify(dt) Called when the System is modified by adding or removing Entities from the System. *function system:onAddToWorld(world) Called when the System is added to the World, before any entities are added to the system. *function system:onRemoveFromWorld(world) Called when the System is removed from the world, after all Entities are removed from the System. *function system:preWrap(dt) Called on each system before update is called on any system. *function system:postWrap(dt) Called on each system in reverse order after update is called on each system. Please see Tiny-ecs#System_functions for more information
That looks scary but worry not we won't use all the callback functions :-)
To put it simple a System manipulates entities. Let's see our first System.
sDrawable.lua
Please create a file "sDrawable.lua" in the "_S" folder and the code:
SDrawable = Core.class()
function SDrawable:init(xtiny) -- tiny function
xtiny.system(self) -- called only once on init (no update)
end
function SDrawable:filter(ent) -- tiny function
return ent.spritelayer and ent.sprite
end
function SDrawable:onAdd(ent) -- tiny function
-- print("SDrawable:onAdd(ent)")
ent.spritelayer:addChild(ent.sprite)
end
function SDrawable:onRemove(ent) -- tiny function
-- print("SDrawable:onRemove(ent)")
ent.spritelayer:removeChild(ent.sprite)
-- cleaning?
ent.sprite = nil
ent = nil
end
XXX
eCollectible.lua
"eCollectible.lua" in the "_E" folder. The code:
You get the idea ;-)
We are done making all our entities!!!
Next?
The time has come to tackle the systems. I will try to make it easy :-)
Prev.: Tuto tiny-ecs beatemup Part 8 Breakables
Next: Tuto tiny-ecs beatemup Part 10 XXX