[submodule "lib/sol2"]
path = lib/sol2
url = https://github.com/ThePhD/sol2
+[submodule "lib/entityx"]
+ path = lib/entityx
+ url = https://github.com/tcsullivan/entityx
+ branch = remove-std-iterator
+[submodule "lib/cereal"]
+ path = lib/cereal
+ url = https://github.com/USCiLab/cereal
-lSDL2_image -lSOIL -lfreetype -lopenal -lalut
CXXFLAGS = -ggdb -std=c++17 -Wall -Wextra -Werror -pedantic \
- -Wno-class-memaccess -Wno-implicit-fallthrough -m64
-
-CXXINCS = -Isrc -I$(LIBDIR)/LuaJIT/src -I$(LIBDIR)/entityx \
- -I$(LIBDIR)/LuaBridge/Source -I$(LIBDIR)/sol2/include \
- -I$(LIBDIR)/soil -I$(LIBDIR)/cereal/include -I$(LIBDIR)/freetype
+ -Wno-class-memaccess -Wno-implicit-fallthrough -Wno-unused-parameter
+
+CXXINCS = -I$(SRCDIR) \
+ -I$(LIBDIR)/entityx \
+ -I$(LIBDIR)/LuaJIT/src \
+ -I$(LIBDIR)/LuaBridge/Source \
+ -I$(LIBDIR)/sol2/include \
+ -I$(LIBDIR)/soil \
+ -I$(LIBDIR)/cereal/include \
+ -I$(LIBDIR)/freetype
CXXSRC := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
CXXOBJ := $(patsubst $(SRCDIR)/%,$(OUTDIR)/%,$(CXXSRC:.$(SRCEXT)=.$(OBJEXT)))
--- /dev/null
+Subproject commit ddd467244713ea4fe63733628992efcdd6a9187d
--- /dev/null
+Subproject commit 39e07099da7227d7d7baec072411ddc0abfd8be4
void serialize([[maybe_unused]] cereal::JSONOutputArchive& ar) final {}
void serialize([[maybe_unused]] cereal::JSONInputArchive& ar) final {}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Audio";
}
};
virtual void serialize(cereal::JSONOutputArchive& ar) = 0;
virtual void serialize(cereal::JSONInputArchive& ar) = 0;
- void internal_serialize(bool save, void *ar) final {
+ virtual void internal_serialize(bool save, void *ar) final {
if (save)
serialize(*reinterpret_cast<cereal::JSONOutputArchive*>(ar));
else
void serialize([[maybe_unused]] cereal::JSONOutputArchive& ar) final {}
void serialize([[maybe_unused]] cereal::JSONInputArchive& ar) final {}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "EventListener";
}
};
ar(CEREAL_NVP(r), CEREAL_NVP(g), CEREAL_NVP(b), CEREAL_NVP(strength));
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Light";
}
};
ar(CEREAL_NVP(name));
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Name";
}
};
void serialize([[maybe_unused]] cereal::JSONOutputArchive& ar) final {}
void serialize([[maybe_unused]] cereal::JSONInputArchive& ar) final {}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Physics";
}
};
void serialize([[maybe_unused]] cereal::JSONOutputArchive& ar) final {}
void serialize([[maybe_unused]] cereal::JSONInputArchive& ar) final {}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Player";
}
};
ar(CEREAL_NVP(x), CEREAL_NVP(y));
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Position";
}
};
ar(CEREAL_NVP(visible), CEREAL_NVP(flipX));
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Render";
}
};
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Scripted";
}
};
ar(CEREAL_NVP(x), CEREAL_NVP(y));
}
- std::string serializeName(void) const final {
+ virtual std::string serializeName(void) const final {
return "Velocity";
}
};
#include <fstream>
+struct EntitySerializer
+{
+ template<class Archive>
+ static void serialize(entityx::EntityManager& entities, entityx::Entity entity, bool save, Archive& ar)
+ {
+ // TODO try and reimplement without modifying entityx?
+ // Or, make a new branch...
+
+ //const auto mask = entity.component_mask();
+
+ //for (size_t i = 0; i < entities.component_helpers_.size(); i++) {
+ // auto helper = entities.component_helpers_[i];
+ // if (helper && mask.test(i)) {
+ // auto* c = helper->get_component(entity);
+ // ar.setNextName(c->serializeName().c_str());
+ // ar.startNode();
+ // c->internal_serialize(save, static_cast<void*>(&ar));
+ // ar.finishNode();
+ // }
+ //}
+ }
+};
+
+
/**
* @class GameState
* Manages save files that contain entity data.
for (auto entity : entities.entities_for_debugging()) {
archive.setNextName((name + std::to_string(i++)).c_str());
archive.startNode();
- entities.entity_serialize(entity, save, archive);
+ EntitySerializer::serialize(entities, entity, save, archive);
archive.finishNode();
}
}