diff --git a/concord/builtins/init.lua b/concord/builtins/init.lua new file mode 100644 index 0000000..d5b749d --- /dev/null +++ b/concord/builtins/init.lua @@ -0,0 +1,5 @@ +local PATH = (...):gsub("(%.init)$", "") + +return { + serializable = require(PATH..".serializable"), +} diff --git a/concord/builtins/serializable.lua b/concord/builtins/serializable.lua new file mode 100644 index 0000000..125f76b --- /dev/null +++ b/concord/builtins/serializable.lua @@ -0,0 +1,12 @@ +local PATH = (...):gsub('%.builtins%.[^%.]+$', '') + +local Component = require(PATH..".component") + +local Serializable = Component("serializable") + +function Serializable:serialize () + -- Don't serialize this Component + return nil +end + +return Serializable \ No newline at end of file diff --git a/concord/entity.lua b/concord/entity.lua index fb4617c..ca972e9 100644 --- a/concord/entity.lua +++ b/concord/entity.lua @@ -8,7 +8,13 @@ local Components = require(PATH..".components") local Type = require(PATH..".type") local Utils = require(PATH..".utils") -local Entity = {} +-- Initialize built-in Components (as soon as possible) +local Builtins = require(PATH..".builtins") + +local Entity = { + SERIALIZE_BY_DEFAULT = true, +} + Entity.__mt = { __index = Entity, } @@ -31,6 +37,10 @@ function Entity.new(world) world:addEntity(e) end + if Entity.SERIALIZE_BY_DEFAULT then + e:give("serializable") + end + return e end diff --git a/concord/world.lua b/concord/world.lua index bdd0af5..71b3485 100644 --- a/concord/world.lua +++ b/concord/world.lua @@ -323,9 +323,10 @@ function World:serialize() for i = 1, self.__entities.size do local entity = self.__entities[i] - local entityData = entity:serialize() - - data[i] = entityData + if entity.serializable then + local entityData = entity:serialize() + table.insert(data, entityData) + end end return data