[deploy] make Actor serializable

This commit is contained in:
Nomango 2020-04-15 17:05:57 +08:00
parent 92a845a23a
commit 768ce17586
3 changed files with 57 additions and 12 deletions

View File

@ -220,6 +220,20 @@ bool Actor::DispatchEvent(Event* evt)
return true;
}
void Actor::DoSerialize(Serializer* serializer) const
{
ObjectBase::DoSerialize(serializer);
(*serializer) << visible_ << update_pausing_ << cascade_opacity_ << responsible_ << z_order_ << opacity_ << anchor_
<< size_ << transform_;
}
void Actor::DoDeserialize(Deserializer* deserializer)
{
ObjectBase::DoDeserialize(deserializer);
(*deserializer) >> visible_ >> update_pausing_ >> cascade_opacity_ >> responsible_ >> z_order_ >> opacity_
>> anchor_ >> size_ >> transform_;
}
bool Actor::HandleEvent(Event* evt)
{
if (!components_.IsEmpty())

View File

@ -446,6 +446,14 @@ public:
/// @return 是否继续分发该事件
virtual bool DispatchEvent(Event* evt);
/// \~chinese
/// @brief ÐòÁл¯
void DoSerialize(Serializer* serializer) const override;
/// \~chinese
/// @brief ·´ÐòÁл¯
void DoDeserialize(Deserializer* deserializer) override;
/// \~chinese
/// @brief 设置默认锚点
static void SetDefaultAnchor(float anchor_x, float anchor_y);

View File

@ -20,6 +20,7 @@
#pragma once
#include <kiwano/core/Common.h>
#include <kiwano/math/Math.h>
namespace kiwano
{
@ -397,19 +398,41 @@ public:
virtual void DoDeserialize(Deserializer* deserializer) = 0;
};
/// \~chinese
/// @brief 使用序列化克隆对象
template <typename _Ty, typename _Ty2>
void SerializedClone(const _Ty& src, _Ty2& dest)
{
static_assert(std::is_base_of<Serializable, _Ty>::value && std::is_base_of<Serializable, _Ty2>::value,
"Serialized object must be serializable.");
String bytes = src.Serialize();
if (!bytes.empty())
{
dest.Deserialize(bytes);
}
//
// operator<< for Serializer
//
inline Serializer& operator<<(Serializer& serializer, const math::Vec2T<float>& vec)
{
return serializer << vec.x << vec.y;
}
inline Serializer& operator<<(Serializer& serializer, const math::RectT<float>& rect)
{
return serializer << rect.left_top << rect.right_bottom;
}
inline Serializer& operator<<(Serializer& serializer, const math::TransformT<float>& transform)
{
return serializer << transform.position << transform.rotation << transform.scale << transform.skew;
}
//
// operator>> for Deserializer
//
inline Deserializer& operator>>(Deserializer& deserializer, math::Vec2T<float>& vec)
{
return deserializer >> vec.x >> vec.y;
}
inline Deserializer& operator>>(Deserializer& deserializer, math::RectT<float>& rect)
{
return deserializer >> rect.left_top >> rect.right_bottom;
}
inline Deserializer& operator>>(Deserializer& deserializer, math::TransformT<float>& transform)
{
return deserializer >> transform.position >> transform.rotation >> transform.scale >> transform.skew;
}
} // namespace kiwano