From cc0fd1614ce421e6a640c71a3226446f230bea34 Mon Sep 17 00:00:00 2001 From: Pablo Ariel Mayobre Date: Tue, 14 Feb 2023 18:14:24 -0300 Subject: [PATCH] Serializable component You can remove the component to tell Concord an Entity shouldn't be serialized. It's given automatically on Entity creation, but this can be disabled by changing Entity.SERIALIZE_BY_DEFAULT to false. --- concord/builtins/init.lua | 5 +++++ concord/builtins/serializable.lua | 12 ++++++++++++ concord/entity.lua | 12 +++++++++++- concord/world.lua | 7 ++++--- 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 concord/builtins/init.lua create mode 100644 concord/builtins/serializable.lua 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