
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

#include "schema.h"

namespace cfg {


bool Attr::Basic::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(hp)) return false;
    if(!_buf.readFloat(arp)) return false;
    if(!_buf.readFloat(ap)) return false;
    if(!_buf.readFloat(mp)) return false;

    return true;
}

bool Attr::Basic::deserializeBasic(::luban::ByteBuf& _buf, ::luban::SharedPtr<Attr::Basic>& _out)
{
    _out.reset(LUBAN_NEW(Attr::Basic));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Attr::Battle::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(attack)) return false;
    if(!_buf.readFloat(defence)) return false;
    if(!_buf.readFloat(speed)) return false;
    if(!_buf.readFloat(critical)) return false;
    if(!_buf.readFloat(hit)) return false;
    if(!_buf.readFloat(dodge)) return false;

    return true;
}

bool Attr::Battle::deserializeBattle(::luban::ByteBuf& _buf, ::luban::SharedPtr<Attr::Battle>& _out)
{
    _out.reset(LUBAN_NEW(Attr::Battle));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Attr::Core::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(strength)) return false;
    if(!_buf.readFloat(agility)) return false;
    if(!_buf.readFloat(toughness)) return false;
    if(!_buf.readFloat(perception)) return false;
    if(!_buf.readFloat(willpower)) return false;
    if(!_buf.readFloat(intelligence)) return false;
    if(!_buf.readFloat(fellowship)) return false;

    return true;
}

bool Attr::Core::deserializeCore(::luban::ByteBuf& _buf, ::luban::SharedPtr<Attr::Core>& _out)
{
    _out.reset(LUBAN_NEW(Attr::Core));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Character::CharacterTable::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readString(id)) return false;
    if(!Uni::BasicInfo::deserializeBasicInfo(_buf, basicInfo)) return false;
    if(!_buf.readInt(age)) return false;
    if(!_buf.readString(story)) return false;
    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; faction = Character::Faction(__enum_temp__); }
    if(!Attr::Basic::deserializeBasic(_buf, initAttrBasic)) return false;
    if(!Attr::Core::deserializeCore(_buf, initAttrCore)) return false;
    if(!Attr::Battle::deserializeBattle(_buf, initAttrBattle)) return false;
    {::luban::int32 n; if(!_buf.readSize(n)) return false; n = std::min(n, ::luban::int32(_buf.size())); initGearList.reserve(n);for(int i = 0 ; i < n ; i++) { ::luban::int32 _e; if(!_buf.readInt(_e)) return false; initGearList.push_back(_e);}}

    return true;
}

bool Character::CharacterTable::deserializeCharacterTable(::luban::ByteBuf& _buf, ::luban::SharedPtr<Character::CharacterTable>& _out)
{
    _out.reset(LUBAN_NEW(Character::CharacterTable));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Item::ArmorTable::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readInt(id)) return false;
    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; type = Item::ArmorType(__enum_temp__); }
    if(!_buf.readInt(level)) return false;
    if(!_buf.readInt(levelR)) return false;
    if(!Attr::Basic::deserializeBasic(_buf, attrBasic)) return false;
    if(!Attr::Core::deserializeCore(_buf, attrCore)) return false;
    if(!Attr::Core::deserializeCore(_buf, attrCoreR)) return false;
    if(!Attr::Battle::deserializeBattle(_buf, attrBattle)) return false;

    return true;
}

bool Item::ArmorTable::deserializeArmorTable(::luban::ByteBuf& _buf, ::luban::SharedPtr<Item::ArmorTable>& _out)
{
    _out.reset(LUBAN_NEW(Item::ArmorTable));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Item::ItemData::deserialize(::luban::ByteBuf& _buf)
{

    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; type = Item::ItemType(__enum_temp__); }
    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; quality = Item::ItemQuality(__enum_temp__); }
    if(!_buf.readFloat(weight)) return false;
    if(!_buf.readFloat(buy)) return false;
    if(!_buf.readFloat(sell)) return false;
    if (!_buf.readBool(stackable)) return false;
    if(!_buf.readInt(maxStack)) return false;

    return true;
}

bool Item::ItemData::deserializeItemData(::luban::ByteBuf& _buf, ::luban::SharedPtr<Item::ItemData>& _out)
{
    _out.reset(LUBAN_NEW(Item::ItemData));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Item::ItemTable::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readInt(id)) return false;
    if(!Uni::BasicInfo::deserializeBasicInfo(_buf, basicInfo)) return false;
    if(!Item::ItemData::deserializeItemData(_buf, itemData)) return false;

    return true;
}

bool Item::ItemTable::deserializeItemTable(::luban::ByteBuf& _buf, ::luban::SharedPtr<Item::ItemTable>& _out)
{
    _out.reset(LUBAN_NEW(Item::ItemTable));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Item::WeaponTable::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readInt(id)) return false;
    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; type = Item::WeaponType(__enum_temp__); }
    {int __enum_temp__; if(!_buf.readInt(__enum_temp__)) return false; atkType = Item::WeaponAtkType(__enum_temp__); }
    if (!_buf.readBool(TwoHand)) return false;
    if(!_buf.readInt(level)) return false;
    if(!_buf.readInt(levelR)) return false;
    if(!_buf.readString(model)) return false;
    if(!_buf.readString(socket)) return false;
    if(!_buf.readString(idleAnimTag)) return false;
    if(!Attr::Basic::deserializeBasic(_buf, attrBasic)) return false;
    if(!Attr::Core::deserializeCore(_buf, attrCore)) return false;
    if(!Attr::Core::deserializeCore(_buf, attrCoreR)) return false;
    if(!Attr::Battle::deserializeBattle(_buf, attrBattle)) return false;
    if(!_buf.readFloat(baseDamage)) return false;
    if(!_buf.readInt(range)) return false;
    { bool _has_value_; if(!_buf.readBool(_has_value_)){return false;}  if(_has_value_) { clipAmmo.reset(new ::luban::int32()); if(!_buf.readInt(*clipAmmo)) return false; } else { clipAmmo.reset(); } }
    { bool _has_value_; if(!_buf.readBool(_has_value_)){return false;}  if(_has_value_) { maxAmmo.reset(new ::luban::int32()); if(!_buf.readInt(*maxAmmo)) return false; } else { maxAmmo.reset(); } }
    { bool _has_value_; if(!_buf.readBool(_has_value_)){return false;}  if(_has_value_) { shotAmmo.reset(new ::luban::int32()); if(!_buf.readInt(*shotAmmo)) return false; } else { shotAmmo.reset(); } }
    { bool _has_value_; if(!_buf.readBool(_has_value_)){return false;}  if(_has_value_) { fireRate.reset(new ::luban::float32()); if(!_buf.readFloat(*fireRate)) return false; } else { fireRate.reset(); } }

    return true;
}

bool Item::WeaponTable::deserializeWeaponTable(::luban::ByteBuf& _buf, ::luban::SharedPtr<Item::WeaponTable>& _out)
{
    _out.reset(LUBAN_NEW(Item::WeaponTable));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Uni::BasicInfo::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readString(name)) return false;
    if(!_buf.readString(desc)) return false;
    if(!_buf.readString(icon)) return false;

    return true;
}

bool Uni::BasicInfo::deserializeBasicInfo(::luban::ByteBuf& _buf, ::luban::SharedPtr<Uni::BasicInfo>& _out)
{
    _out.reset(LUBAN_NEW(Uni::BasicInfo));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool Uni::LocalizationTable::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readString(id)) return false;
    if(!_buf.readString(cn)) return false;
    if(!_buf.readString(en)) return false;

    return true;
}

bool Uni::LocalizationTable::deserializeLocalizationTable(::luban::ByteBuf& _buf, ::luban::SharedPtr<Uni::LocalizationTable>& _out)
{
    _out.reset(LUBAN_NEW(Uni::LocalizationTable));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool vector2::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(x)) return false;
    if(!_buf.readFloat(y)) return false;

    return true;
}

bool vector2::deserializevector2(::luban::ByteBuf& _buf, ::luban::SharedPtr<vector2>& _out)
{
    _out.reset(LUBAN_NEW(vector2));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool vector3::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(x)) return false;
    if(!_buf.readFloat(y)) return false;
    if(!_buf.readFloat(z)) return false;

    return true;
}

bool vector3::deserializevector3(::luban::ByteBuf& _buf, ::luban::SharedPtr<vector3>& _out)
{
    _out.reset(LUBAN_NEW(vector3));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}


bool vector4::deserialize(::luban::ByteBuf& _buf)
{

    if(!_buf.readFloat(x)) return false;
    if(!_buf.readFloat(y)) return false;
    if(!_buf.readFloat(z)) return false;
    if(!_buf.readFloat(w)) return false;

    return true;
}

bool vector4::deserializevector4(::luban::ByteBuf& _buf, ::luban::SharedPtr<vector4>& _out)
{
    _out.reset(LUBAN_NEW(vector4));
    if (_out->deserialize(_buf))
    {
        return true;
    }
    else
    { 
        _out.reset();
        return false;
    }
}

}

