[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; 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) bool Actor::HandleEvent(Event* evt)
{ {
if (!components_.IsEmpty()) if (!components_.IsEmpty())

View File

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

View File

@ -20,6 +20,7 @@
#pragma once #pragma once
#include <kiwano/core/Common.h> #include <kiwano/core/Common.h>
#include <kiwano/math/Math.h>
namespace kiwano namespace kiwano
{ {
@ -397,19 +398,41 @@ public:
virtual void DoDeserialize(Deserializer* deserializer) = 0; 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()) // operator<< for Serializer
{ //
dest.Deserialize(bytes); 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 } // namespace kiwano