Beispiel #1
0
void Node::serialize(IOPacket& packet) {
    packet.stream(mId, "uuid");
    packet.stream(mName, "name", mName);
    packet.stream(mPosition, "position");
    packet.stream(mScale, "scale", Ogre::Vector3::UNIT_SCALE);
    packet.stream(mRotation, "rotation");
    packet.stream(mIsEnabled, "enabled");
    onSerialize(packet);

    // Components
    uint32_t count = packet.beginList(mComponents.size(), "components");

    if(packet.getDirection() == IOPacket::SERIALIZE) {
        // serialize
        for(auto iter = mComponents.begin(); iter != mComponents.end(); ++iter) {
            packet.beginObject();
            iter->second->serialize(packet);
            packet.endObject();
        }
    } else {
        for(uint32_t i = 0; i < count; ++i) {
            packet.beginObject();
            std::string type;
            packet.stream(type, "type", std::string(""));
            Component* c = Serializer::createComponent(type);
            c->serialize(packet);
            addComponent(c);
            packet.endObject();
        }
    }
    packet.endList();

    // Children
    count = packet.beginList(mChildren.size(), "children");

    if(packet.getDirection() == IOPacket::SERIALIZE) {
        for(auto iter = mChildren.begin(); iter != mChildren.end(); ++iter) {
            packet.beginObject();
            iter->second->serialize(packet);
            packet.endObject();
        }
    } else {
        for(uint32_t i = 0; i < count; ++i) {
            packet.beginObject();
            Node* n = new Node;
            n->serialize(packet);
            addChildNode(n);
            packet.endObject();
        }
    }
    packet.endList();
}
 void VariantContainer<T>::OnSerialize(Json::object &output) const
 {
     onSerialize( output );
 }