mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-08-31 17:38:29 -04:00
Fix naming of system:clear, system:setEnable
This commit is contained in:
parent
90b949f8a5
commit
cf51bccb81
3 changed files with 114 additions and 23 deletions
131
README.md
131
README.md
|
@ -151,23 +151,27 @@ All the above applies the same to all the other containers.
|
||||||
When defining a ComponentClass you usually pass in a `populate` function. This will fill the Component with values.
|
When defining a ComponentClass you usually pass in a `populate` function. This will fill the Component with values.
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
-- Define the ComponentClass.
|
-- Create the ComponentClass with a populate function
|
||||||
-- The component variable is the actual Component given to an Entity
|
-- The component variable is the actual Component given to an Entity
|
||||||
-- The x and y variables are values we pass in when we create the Component
|
-- The x and y variables are values we pass in when we create the Component
|
||||||
local PositionComponentClass = Concord.component(function(component, x, y)
|
local positionComponentClass = Concord.component(function(component, x, y)
|
||||||
component.x = x or 0
|
component.x = x or 0
|
||||||
component.y = y or 0
|
component.y = y or 0
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- We can manually register the Component to the container if we want
|
-- Create a ComponentClass without a populate function
|
||||||
Concord.components.register("positionComponent", PositionComponentClass)
|
-- Components of this type won't have any fields.
|
||||||
|
-- This can be useful to indiciate state.
|
||||||
-- Otherwise we just return the Component so it can be required
|
local pushableComponentClass = Concord.component()
|
||||||
return PositionComponentClass
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also pass nothing. This will keep the Component empty.
|
```lua
|
||||||
This can be useful for Components that define a boolean state. For example `pushable` or `crouching`.
|
-- Manually register the Component to the container if we want
|
||||||
|
Concord.components.register("positionComponent", positionComponentClass)
|
||||||
|
|
||||||
|
-- Otherwise return the Component so it can be required
|
||||||
|
return positionComponentClass
|
||||||
|
```
|
||||||
|
|
||||||
### Entities
|
### Entities
|
||||||
Entities can be freely made and be given Components. You pass the ComponentClass and the values you want to pass. It will then create the Component for you.
|
Entities can be freely made and be given Components. You pass the ComponentClass and the values you want to pass. It will then create the Component for you.
|
||||||
|
@ -183,28 +187,28 @@ local myEntity = Entity(myWorld) -- To add it to a world immediately ( See World
|
||||||
```
|
```
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
-- Give the entity the position component defined above
|
-- Give the entity the position Component defined above
|
||||||
-- x will become 100. y will become 50
|
-- x will become 100. y will become 50
|
||||||
myEntity:give(Concord.components.positionComponent, 100, 50)
|
myEntity:give(positionComponentClass, 100, 50)
|
||||||
```
|
```
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
-- Retrieve a Component
|
-- Retrieve a Component
|
||||||
local positionComponent = myEntity[Concord.components.positionComponent]
|
local positionComponent = myEntity[positionComponentClass]
|
||||||
-- or
|
-- or
|
||||||
local positionComponent = myEntity:get(Concord.components.positionComponents)
|
local positionComponent = myEntity:get(positionComponentClass)
|
||||||
|
|
||||||
print(positionComponent.x, positionComponent.y) -- 100, 50
|
print(positionComponent.x, positionComponent.y) -- 100, 50
|
||||||
```
|
```
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
-- Remove a Component
|
-- Remove a Component
|
||||||
myEntity:remove(Concord.components.positionComponent)
|
myEntity:remove(positionComponentClass)
|
||||||
```
|
```
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
-- Check if the Entity has a Component
|
-- Check if the Entity has a Component
|
||||||
local hasPositionComponent = myEntity:has(Concord.components.positionComponent)
|
local hasPositionComponent = myEntity:has(positionComponentClass)
|
||||||
print(hasPositionComponent) -- false
|
print(hasPositionComponent) -- false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -212,16 +216,16 @@ print(hasPositionComponent) -- false
|
||||||
-- Entity:give will override a Component if the Entity already has it
|
-- Entity:give will override a Component if the Entity already has it
|
||||||
-- Entity:ensure will only put the Component if the Entity does not already have it
|
-- Entity:ensure will only put the Component if the Entity does not already have it
|
||||||
|
|
||||||
Entity:ensure(Concord.components.positionComponents, 0, 0) -- Will give
|
Entity:ensure(positionComponentClass, 0, 0) -- Will give
|
||||||
-- Position is {x = 0, y = 0}
|
-- Position is {x = 0, y = 0}
|
||||||
|
|
||||||
Entity:give(Concord.components.positionComponent, 50, 50) -- Will override
|
Entity:give(positionComponentClass, 50, 50) -- Will override
|
||||||
-- Position is {x = 50, y = 50}
|
-- Position is {x = 50, y = 50}
|
||||||
|
|
||||||
Entity:give(Concord.components.positionComponent, 100, 100) -- Will override
|
Entity:give(positionComponentClass, 100, 100) -- Will override
|
||||||
-- Position is {x = 100, y = 100}
|
-- Position is {x = 100, y = 100}
|
||||||
|
|
||||||
Entity:ensure(Concord.components.positionComponents, 0, 0) -- Wont do anything
|
Entity:ensure(positionComponentClass, 0, 0) -- Wont do anything
|
||||||
-- Position is {x = 100, y = 100}
|
-- Position is {x = 100, y = 100}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -255,7 +259,94 @@ myEntity:destroy()
|
||||||
|
|
||||||
### Systems
|
### Systems
|
||||||
|
|
||||||
TODO
|
Systems are definded as a SystemClass. Concord will automatically create an instance of a System when it is needed.
|
||||||
|
|
||||||
|
Systems get access to Entities through `pools`. They are created using a filter.
|
||||||
|
Systems can have multiple pools.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Create a System
|
||||||
|
local mySystemClass = Concord.system({positionComponentClass}) -- Pool will contain all Entities with a position Component
|
||||||
|
|
||||||
|
-- Create a System with multiple pools
|
||||||
|
local mySystemClass = Concord.system(
|
||||||
|
{ -- This Pool's name will default to 'pool'
|
||||||
|
positionCompomponentClass,
|
||||||
|
velocityComponentClass,
|
||||||
|
},
|
||||||
|
{ -- This Pool's name will be 'secondPool'
|
||||||
|
healthComponentClass,
|
||||||
|
damageableComponentClass,
|
||||||
|
"secondPool",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Manually register the Component to the container if we want
|
||||||
|
Concord.system.register("mySystem", mySystemClass)
|
||||||
|
|
||||||
|
-- Otherwise return the Component so it can be required
|
||||||
|
return mySystemClass
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- If a System has a :init function it will be called on creation
|
||||||
|
|
||||||
|
-- world is the World the System was created for
|
||||||
|
function mySystemClass:init(world)
|
||||||
|
-- Do stuff
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Defining a function
|
||||||
|
function mySystemClass:update(dt)
|
||||||
|
-- Iterate over all entities in the Pool
|
||||||
|
for _, e in ipairs(self.pool)
|
||||||
|
-- Get the Entity's Components
|
||||||
|
local positionComponent = e[positionComponentClass]
|
||||||
|
local velocityComponent = e[velocityComponentClass]
|
||||||
|
|
||||||
|
-- Do something with the Components
|
||||||
|
positionComponent.x = positionComponent.x + velocityComponent.x * dt
|
||||||
|
positionComponent.y = positionComponent.y + velocityComponent.y * dt
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Iterate over all entities in the second Pool
|
||||||
|
for _, e in ipairs(self.secondPool)
|
||||||
|
-- Do something
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Systems can be enabled and disabled
|
||||||
|
-- Systems are enabled by default
|
||||||
|
|
||||||
|
-- Enable a System
|
||||||
|
mySystem:enable()
|
||||||
|
-- or
|
||||||
|
mySystem:setEnable(true)
|
||||||
|
|
||||||
|
-- Disable a System
|
||||||
|
mySystem:disable()
|
||||||
|
-- or
|
||||||
|
mySystem:setEnable(false)
|
||||||
|
|
||||||
|
-- Toggle the enable state
|
||||||
|
mySystem:toggleEnabled()
|
||||||
|
|
||||||
|
-- Get enabled state
|
||||||
|
local isEnabled = mySystem:isEnabled()
|
||||||
|
print(isEnabled) -- true
|
||||||
|
```
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Get the World the System is in
|
||||||
|
local world = System:getWorld()
|
||||||
|
```
|
||||||
|
|
||||||
### Worlds
|
### Worlds
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ end
|
||||||
|
|
||||||
--- Internal: Clears all Entities from the System.
|
--- Internal: Clears all Entities from the System.
|
||||||
-- @return self
|
-- @return self
|
||||||
function System:clear()
|
function System:__clear()
|
||||||
for i = 1, #self.__pools do
|
for i = 1, #self.__pools do
|
||||||
self.__pools[i]:__clear()
|
self.__pools[i]:__clear()
|
||||||
end
|
end
|
||||||
|
@ -145,7 +145,7 @@ end
|
||||||
|
|
||||||
--- Toggles if the System is enabled.
|
--- Toggles if the System is enabled.
|
||||||
-- @return self
|
-- @return self
|
||||||
function System:toggleEnable()
|
function System:toggleEnabled()
|
||||||
self:setEnabled(not self.__enabled)
|
self:setEnabled(not self.__enabled)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
|
@ -268,7 +268,7 @@ function World:clear()
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 1, self.systems.size do
|
for i = 1, self.systems.size do
|
||||||
self.systems[i]:clear()
|
self.systems[i]:__clear()
|
||||||
end
|
end
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue