diff --git a/framework/pipeline/writer.cpp b/framework/pipeline/writer.cpp index 7059e1f..c78c3f6 100644 --- a/framework/pipeline/writer.cpp +++ b/framework/pipeline/writer.cpp @@ -1,6 +1,7 @@ #include "xna/pipeline/writer.hpp" #include "xna/pipeline/compiler.hpp" + namespace xna { // diff --git a/inc/xna/pipeline/writer.hpp b/inc/xna/pipeline/writer.hpp index 0ea6e0a..5b2e07c 100644 --- a/inc/xna/pipeline/writer.hpp +++ b/inc/xna/pipeline/writer.hpp @@ -18,6 +18,8 @@ namespace xna { virtual Int TypeVersion() const { return 0; } //Compiles an object into binary format. virtual void Write(ContentWriter& output, Object& value){} + //Determines if deserialization into an existing object is possible. + virtual bool CanDeserializeIntoExistingObject() const { return false; } protected: ContentTypeWriter(P_Type const& targetType) : targetType(targetType) {} diff --git a/inc/xna/pipeline/writers/default.hpp b/inc/xna/pipeline/writers/default.hpp new file mode 100644 index 0000000..3f4162c --- /dev/null +++ b/inc/xna/pipeline/writers/default.hpp @@ -0,0 +1,85 @@ +#ifndef XNA_PIPELINE_WRITERS_DEFAULT_HPP +#define XNA_PIPELINE_WRITERS_DEFAULT_HPP + +#include "../writer.hpp" +#include "../../common/collision.hpp" +#include "../../common/curve.hpp" + +namespace xna { + class BooleanWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, bool& value) override { + output.Write(value); + } + }; + + class BoundingBoxWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, BoundingBox& value) override { + output.Write(value.Min); + output.Write(value.Max); + } + }; + + class BoundingFrustumWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, BoundingFrustum& value) override { + output.Write(value.GetMatrix()); + } + }; + + class BoundingSphereWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, BoundingSphere& value) override { + output.Write(value.Center); + output.Write(value.Radius); + } + }; + + class ByteWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, Byte& value) override { + output.Write(value); + } + }; + + class CharWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, Char& value) override { + output.Write(value); + } + }; + + class ColorWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, Color& value) override { + output.Write(value); + } + }; + + class CurveWriter : public BuiltinTypeWriter { + public: + void Write(ContentWriter& output, Curve& value) override { + output.Write(static_cast(value.PreLoop)); + output.Write(static_cast(value.PostLoop)); + output.Write(static_cast(value.Keys.Count())); + + for (size_t i = 0; i < value.Keys.Count(); ++i) { + const auto& key = value.Keys[i]; + + output.Write(key.Position); + output.Write(key.Value); + output.Write(key.TangentIn); + output.Write(key.TangentOut); + output.Write(static_cast(key.Continuity)); + } + } + + bool CanDeserializeIntoExistingObject() const override { + return true; + } + + }; +} + +#endif \ No newline at end of file diff --git a/inc/xna/xna.hpp b/inc/xna/xna.hpp index 502df4b..4e2b038 100644 --- a/inc/xna/xna.hpp +++ b/inc/xna/xna.hpp @@ -55,6 +55,7 @@ #include "input/mouse.hpp" #include "pipeline/writer.hpp" #include "pipeline/compiler.hpp" +#include "pipeline/writers/default.hpp" namespace xna { //Exposes functions that must be implemented by the platform