diff --git a/SavegameSchema/ten_itemdata.fbs b/SavegameSchema/ten_itemdata.fbs index 91831d77e..a5ac374c3 100644 --- a/SavegameSchema/ten_itemdata.fbs +++ b/SavegameSchema/ten_itemdata.fbs @@ -108,6 +108,10 @@ table ItemNumber { num: short; } +table Short { + scalar: short; +} + table Int { scalar: ulong; } @@ -139,6 +143,7 @@ union ItemData { ulong, double,*/ Int, + Short, Float, ShortArray, ItemNumber, diff --git a/SavegameSchema/ten_itemdata_generated.h b/SavegameSchema/ten_itemdata_generated.h index 6e45a35a7..b01861c3d 100644 --- a/SavegameSchema/ten_itemdata_generated.h +++ b/SavegameSchema/ten_itemdata_generated.h @@ -87,6 +87,10 @@ struct ItemNumber; struct ItemNumberBuilder; struct ItemNumberT; +struct Short; +struct ShortBuilder; +struct ShortT; + struct Int; struct IntBuilder; struct IntT; @@ -104,34 +108,36 @@ struct Vector3; enum class ItemData : uint8_t { NONE = 0, Int = 1, - Float = 2, - ShortArray = 3, - ItemNumber = 4, - Creature = 5, - LaserHead = 6, - QuadBike = 7, - BigGun = 8, - Motorbike = 9, - Jeep = 10, - LaraInfo = 11, - Kayak = 12, - Door = 13, - Skidoo = 14, - UPV = 15, - Motorboat = 16, - GameVector = 17, - Wraith = 18, - Rubberboat = 19, - Pushable = 20, - Minecart = 21, + Short = 2, + Float = 3, + ShortArray = 4, + ItemNumber = 5, + Creature = 6, + LaserHead = 7, + QuadBike = 8, + BigGun = 9, + Motorbike = 10, + Jeep = 11, + LaraInfo = 12, + Kayak = 13, + Door = 14, + Skidoo = 15, + UPV = 16, + Motorboat = 17, + GameVector = 18, + Wraith = 19, + Rubberboat = 20, + Pushable = 21, + Minecart = 22, MIN = NONE, MAX = Minecart }; -inline const ItemData (&EnumValuesItemData())[22] { +inline const ItemData (&EnumValuesItemData())[23] { static const ItemData values[] = { ItemData::NONE, ItemData::Int, + ItemData::Short, ItemData::Float, ItemData::ShortArray, ItemData::ItemNumber, @@ -157,9 +163,10 @@ inline const ItemData (&EnumValuesItemData())[22] { } inline const char * const *EnumNamesItemData() { - static const char * const names[23] = { + static const char * const names[24] = { "NONE", "Int", + "Short", "Float", "ShortArray", "ItemNumber", @@ -199,6 +206,10 @@ template<> struct ItemDataTraits { static const ItemData enum_value = ItemData::Int; }; +template<> struct ItemDataTraits { + static const ItemData enum_value = ItemData::Short; +}; + template<> struct ItemDataTraits { static const ItemData enum_value = ItemData::Float; }; @@ -319,6 +330,14 @@ struct ItemDataUnion { return type == ItemData::Int ? reinterpret_cast(value) : nullptr; } + TEN::Save::ShortT *AsShort() { + return type == ItemData::Short ? + reinterpret_cast(value) : nullptr; + } + const TEN::Save::ShortT *AsShort() const { + return type == ItemData::Short ? + reinterpret_cast(value) : nullptr; + } TEN::Save::FloatT *AsFloat() { return type == ItemData::Float ? reinterpret_cast(value) : nullptr; @@ -1764,6 +1783,64 @@ struct ItemNumber::Traits { flatbuffers::Offset CreateItemNumber(flatbuffers::FlatBufferBuilder &_fbb, const ItemNumberT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); +struct ShortT : public flatbuffers::NativeTable { + typedef Short TableType; + int16_t scalar = 0; +}; + +struct Short FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { + typedef ShortT NativeTableType; + typedef ShortBuilder Builder; + struct Traits; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_SCALAR = 4 + }; + int16_t scalar() const { + return GetField(VT_SCALAR, 0); + } + bool Verify(flatbuffers::Verifier &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_SCALAR) && + verifier.EndTable(); + } + ShortT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const; + void UnPackTo(ShortT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const; + static flatbuffers::Offset Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); +}; + +struct ShortBuilder { + typedef Short Table; + flatbuffers::FlatBufferBuilder &fbb_; + flatbuffers::uoffset_t start_; + void add_scalar(int16_t scalar) { + fbb_.AddElement(Short::VT_SCALAR, scalar, 0); + } + explicit ShortBuilder(flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = flatbuffers::Offset(end); + return o; + } +}; + +inline flatbuffers::Offset CreateShort( + flatbuffers::FlatBufferBuilder &_fbb, + int16_t scalar = 0) { + ShortBuilder builder_(_fbb); + builder_.add_scalar(scalar); + return builder_.Finish(); +} + +struct Short::Traits { + using type = Short; + static auto constexpr Create = CreateShort; +}; + +flatbuffers::Offset CreateShort(flatbuffers::FlatBufferBuilder &_fbb, const ShortT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); + struct IntT : public flatbuffers::NativeTable { typedef Int TableType; uint64_t scalar = 0; @@ -2463,6 +2540,32 @@ inline flatbuffers::Offset CreateItemNumber(flatbuffers::FlatBufferB _num); } +inline ShortT *Short::UnPack(const flatbuffers::resolver_function_t *_resolver) const { + auto _o = std::make_unique(); + UnPackTo(_o.get(), _resolver); + return _o.release(); +} + +inline void Short::UnPackTo(ShortT *_o, const flatbuffers::resolver_function_t *_resolver) const { + (void)_o; + (void)_resolver; + { auto _e = scalar(); _o->scalar = _e; } +} + +inline flatbuffers::Offset Short::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher) { + return CreateShort(_fbb, _o, _rehasher); +} + +inline flatbuffers::Offset CreateShort(flatbuffers::FlatBufferBuilder &_fbb, const ShortT *_o, const flatbuffers::rehasher_function_t *_rehasher) { + (void)_rehasher; + (void)_o; + struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const ShortT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va; + auto _scalar = _o->scalar; + return TEN::Save::CreateShort( + _fbb, + _scalar); +} + inline IntT *Int::UnPack(const flatbuffers::resolver_function_t *_resolver) const { auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); @@ -2550,6 +2653,10 @@ inline bool VerifyItemData(flatbuffers::Verifier &verifier, const void *obj, Ite auto ptr = reinterpret_cast(obj); return verifier.VerifyTable(ptr); } + case ItemData::Short: { + auto ptr = reinterpret_cast(obj); + return verifier.VerifyTable(ptr); + } case ItemData::Float: { auto ptr = reinterpret_cast(obj); return verifier.VerifyTable(ptr); @@ -2652,6 +2759,10 @@ inline void *ItemDataUnion::UnPack(const void *obj, ItemData type, const flatbuf auto ptr = reinterpret_cast(obj); return ptr->UnPack(resolver); } + case ItemData::Short: { + auto ptr = reinterpret_cast(obj); + return ptr->UnPack(resolver); + } case ItemData::Float: { auto ptr = reinterpret_cast(obj); return ptr->UnPack(resolver); @@ -2742,6 +2853,10 @@ inline flatbuffers::Offset ItemDataUnion::Pack(flatbuffers::FlatBufferBuil auto ptr = reinterpret_cast(value); return CreateInt(_fbb, ptr, _rehasher).Union(); } + case ItemData::Short: { + auto ptr = reinterpret_cast(value); + return CreateShort(_fbb, ptr, _rehasher).Union(); + } case ItemData::Float: { auto ptr = reinterpret_cast(value); return CreateFloat(_fbb, ptr, _rehasher).Union(); @@ -2832,6 +2947,10 @@ inline ItemDataUnion::ItemDataUnion(const ItemDataUnion &u) : type(u.type), valu value = new TEN::Save::IntT(*reinterpret_cast(u.value)); break; } + case ItemData::Short: { + value = new TEN::Save::ShortT(*reinterpret_cast(u.value)); + break; + } case ItemData::Float: { value = new TEN::Save::FloatT(*reinterpret_cast(u.value)); break; @@ -2924,6 +3043,11 @@ inline void ItemDataUnion::Reset() { delete ptr; break; } + case ItemData::Short: { + auto ptr = reinterpret_cast(value); + delete ptr; + break; + } case ItemData::Float: { auto ptr = reinterpret_cast(value); delete ptr; diff --git a/SavegameSchema/ten_savegame_generated.h b/SavegameSchema/ten_savegame_generated.h index 6c97ee140..987d8bf91 100644 --- a/SavegameSchema/ten_savegame_generated.h +++ b/SavegameSchema/ten_savegame_generated.h @@ -313,6 +313,9 @@ struct Item FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { const TEN::Save::Int *data_as_Int() const { return data_type() == TEN::Save::ItemData::Int ? static_cast(data()) : nullptr; } + const TEN::Save::Short *data_as_Short() const { + return data_type() == TEN::Save::ItemData::Short ? static_cast(data()) : nullptr; + } const TEN::Save::Float *data_as_Float() const { return data_type() == TEN::Save::ItemData::Float ? static_cast(data()) : nullptr; } @@ -423,6 +426,10 @@ template<> inline const TEN::Save::Int *Item::data_as() const { return data_as_Int(); } +template<> inline const TEN::Save::Short *Item::data_as() const { + return data_as_Short(); +} + template<> inline const TEN::Save::Float *Item::data_as() const { return data_as_Float(); } diff --git a/TR5Main/Game/savegame.cpp b/TR5Main/Game/savegame.cpp index eca921102..76b4804b4 100644 --- a/TR5Main/Game/savegame.cpp +++ b/TR5Main/Game/savegame.cpp @@ -360,7 +360,7 @@ bool SaveGame::Save(int slot) creatureBuilder.add_reached_goal(creature->reachedGoal); creatureOffset = creatureBuilder.Finish(); - } + } Save::Position position = Save::Position( (int32_t)itemToSerialize.pos.xPos, @@ -412,6 +412,18 @@ bool SaveGame::Save(int slot) serializedItem.add_data_type(Save::ItemData::Creature); serializedItem.add_data(creatureOffset.Union()); } + else if (itemToSerialize.data.is()) + { + short& data = itemToSerialize.data; + serializedItem.add_data_type(Save::ItemData::Short); + serializedItem.add_data(data); + } + else if (itemToSerialize.data.is()) + { + int& data = itemToSerialize.data; + serializedItem.add_data_type(Save::ItemData::Int); + serializedItem.add_data(data); + } auto serializedItemOffset = serializedItem.Finish(); serializedItems.push_back(serializedItemOffset); @@ -771,25 +783,42 @@ bool SaveGame::Load(int slot) // Items for (int i = 0; i < s->items()->size(); i++) { - if (i >= g_Level.NumItems) - break; - const Save::Item* savedItem = s->items()->Get(i); - ITEM_INFO* item = &g_Level.Items[i]; - OBJECT_INFO* obj = &Objects[item->objectNumber]; - // Kill immediately item if already killed and continue - if (savedItem->flags() & IFLAG_KILLED) + short itemNumber = i; + bool dynamicItem = false; + + if (i >= g_Level.NumItems) { - KillItem(i); - item->status = ITEM_DEACTIVATED; - item->flags |= ONESHOT; - continue; + // Items beyond items level space must be active + if (!savedItem->active()) + continue; + + // Items beyond items level space must be initialised differently + itemNumber = CreateItem(); + if (itemNumber == NO_ITEM) + continue; + dynamicItem = true; } - // If not triggered, don't load remaining data - if (item->objectNumber != ID_LARA && !(savedItem->flags() & (TRIGGERED | CODE_BITS | ONESHOT))) - continue; + ITEM_INFO* item = &g_Level.Items[itemNumber]; + OBJECT_INFO* obj = &Objects[item->objectNumber]; + + if (!dynamicItem) + { + // Kill immediately item if already killed and continue + if (savedItem->flags() & IFLAG_KILLED) + { + KillItem(i); + item->status = ITEM_DEACTIVATED; + item->flags |= ONESHOT; + continue; + } + + // If not triggered, don't load remaining data + if (item->objectNumber != ID_LARA && !(savedItem->flags() & (TRIGGERED | CODE_BITS | ONESHOT))) + continue; + } item->pos.xPos = savedItem->position()->x_pos(); item->pos.yPos = savedItem->position()->y_pos(); @@ -798,11 +827,27 @@ bool SaveGame::Load(int slot) item->pos.yRot = savedItem->position()->y_rot(); item->pos.zRot = savedItem->position()->z_rot(); + short roomNumber = savedItem->room_number(); + + if (dynamicItem) + { + item->roomNumber = roomNumber; + + InitialiseItem(itemNumber); + + // InitialiseItem could overwrite position so restore it + item->pos.xPos = savedItem->position()->x_pos(); + item->pos.yPos = savedItem->position()->y_pos(); + item->pos.zPos = savedItem->position()->z_pos(); + item->pos.xRot = savedItem->position()->x_rot(); + item->pos.yRot = savedItem->position()->y_rot(); + item->pos.zRot = savedItem->position()->z_rot(); + } + item->speed = savedItem->speed(); item->fallspeed = savedItem->fall_speed(); // Do the correct way for assigning new room number - short roomNumber = savedItem->room_number(); if (item->objectNumber == ID_LARA) { LaraItem->location.roomNumber = roomNumber; @@ -891,6 +936,12 @@ bool SaveGame::Load(int slot) creature->patrol2 = savedCreature->patrol2(); creature->reachedGoal = savedCreature->reached_goal(); } + else if (savedItem->data_type() == Save::ItemData::Short) + { + auto data = savedItem->data(); + auto savedData = (Save::Short*)data; + item->data = savedData->scalar(); + } // Mesh stuff item->meshBits = savedItem->mesh_bits(); diff --git a/TR5Main/Specific/savegame/flatbuffers/ten_itemdata_generated.h b/TR5Main/Specific/savegame/flatbuffers/ten_itemdata_generated.h index 6e45a35a7..b01861c3d 100644 --- a/TR5Main/Specific/savegame/flatbuffers/ten_itemdata_generated.h +++ b/TR5Main/Specific/savegame/flatbuffers/ten_itemdata_generated.h @@ -87,6 +87,10 @@ struct ItemNumber; struct ItemNumberBuilder; struct ItemNumberT; +struct Short; +struct ShortBuilder; +struct ShortT; + struct Int; struct IntBuilder; struct IntT; @@ -104,34 +108,36 @@ struct Vector3; enum class ItemData : uint8_t { NONE = 0, Int = 1, - Float = 2, - ShortArray = 3, - ItemNumber = 4, - Creature = 5, - LaserHead = 6, - QuadBike = 7, - BigGun = 8, - Motorbike = 9, - Jeep = 10, - LaraInfo = 11, - Kayak = 12, - Door = 13, - Skidoo = 14, - UPV = 15, - Motorboat = 16, - GameVector = 17, - Wraith = 18, - Rubberboat = 19, - Pushable = 20, - Minecart = 21, + Short = 2, + Float = 3, + ShortArray = 4, + ItemNumber = 5, + Creature = 6, + LaserHead = 7, + QuadBike = 8, + BigGun = 9, + Motorbike = 10, + Jeep = 11, + LaraInfo = 12, + Kayak = 13, + Door = 14, + Skidoo = 15, + UPV = 16, + Motorboat = 17, + GameVector = 18, + Wraith = 19, + Rubberboat = 20, + Pushable = 21, + Minecart = 22, MIN = NONE, MAX = Minecart }; -inline const ItemData (&EnumValuesItemData())[22] { +inline const ItemData (&EnumValuesItemData())[23] { static const ItemData values[] = { ItemData::NONE, ItemData::Int, + ItemData::Short, ItemData::Float, ItemData::ShortArray, ItemData::ItemNumber, @@ -157,9 +163,10 @@ inline const ItemData (&EnumValuesItemData())[22] { } inline const char * const *EnumNamesItemData() { - static const char * const names[23] = { + static const char * const names[24] = { "NONE", "Int", + "Short", "Float", "ShortArray", "ItemNumber", @@ -199,6 +206,10 @@ template<> struct ItemDataTraits { static const ItemData enum_value = ItemData::Int; }; +template<> struct ItemDataTraits { + static const ItemData enum_value = ItemData::Short; +}; + template<> struct ItemDataTraits { static const ItemData enum_value = ItemData::Float; }; @@ -319,6 +330,14 @@ struct ItemDataUnion { return type == ItemData::Int ? reinterpret_cast(value) : nullptr; } + TEN::Save::ShortT *AsShort() { + return type == ItemData::Short ? + reinterpret_cast(value) : nullptr; + } + const TEN::Save::ShortT *AsShort() const { + return type == ItemData::Short ? + reinterpret_cast(value) : nullptr; + } TEN::Save::FloatT *AsFloat() { return type == ItemData::Float ? reinterpret_cast(value) : nullptr; @@ -1764,6 +1783,64 @@ struct ItemNumber::Traits { flatbuffers::Offset CreateItemNumber(flatbuffers::FlatBufferBuilder &_fbb, const ItemNumberT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); +struct ShortT : public flatbuffers::NativeTable { + typedef Short TableType; + int16_t scalar = 0; +}; + +struct Short FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { + typedef ShortT NativeTableType; + typedef ShortBuilder Builder; + struct Traits; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_SCALAR = 4 + }; + int16_t scalar() const { + return GetField(VT_SCALAR, 0); + } + bool Verify(flatbuffers::Verifier &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_SCALAR) && + verifier.EndTable(); + } + ShortT *UnPack(const flatbuffers::resolver_function_t *_resolver = nullptr) const; + void UnPackTo(ShortT *_o, const flatbuffers::resolver_function_t *_resolver = nullptr) const; + static flatbuffers::Offset Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); +}; + +struct ShortBuilder { + typedef Short Table; + flatbuffers::FlatBufferBuilder &fbb_; + flatbuffers::uoffset_t start_; + void add_scalar(int16_t scalar) { + fbb_.AddElement(Short::VT_SCALAR, scalar, 0); + } + explicit ShortBuilder(flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = flatbuffers::Offset(end); + return o; + } +}; + +inline flatbuffers::Offset CreateShort( + flatbuffers::FlatBufferBuilder &_fbb, + int16_t scalar = 0) { + ShortBuilder builder_(_fbb); + builder_.add_scalar(scalar); + return builder_.Finish(); +} + +struct Short::Traits { + using type = Short; + static auto constexpr Create = CreateShort; +}; + +flatbuffers::Offset CreateShort(flatbuffers::FlatBufferBuilder &_fbb, const ShortT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); + struct IntT : public flatbuffers::NativeTable { typedef Int TableType; uint64_t scalar = 0; @@ -2463,6 +2540,32 @@ inline flatbuffers::Offset CreateItemNumber(flatbuffers::FlatBufferB _num); } +inline ShortT *Short::UnPack(const flatbuffers::resolver_function_t *_resolver) const { + auto _o = std::make_unique(); + UnPackTo(_o.get(), _resolver); + return _o.release(); +} + +inline void Short::UnPackTo(ShortT *_o, const flatbuffers::resolver_function_t *_resolver) const { + (void)_o; + (void)_resolver; + { auto _e = scalar(); _o->scalar = _e; } +} + +inline flatbuffers::Offset Short::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher) { + return CreateShort(_fbb, _o, _rehasher); +} + +inline flatbuffers::Offset CreateShort(flatbuffers::FlatBufferBuilder &_fbb, const ShortT *_o, const flatbuffers::rehasher_function_t *_rehasher) { + (void)_rehasher; + (void)_o; + struct _VectorArgs { flatbuffers::FlatBufferBuilder *__fbb; const ShortT* __o; const flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va; + auto _scalar = _o->scalar; + return TEN::Save::CreateShort( + _fbb, + _scalar); +} + inline IntT *Int::UnPack(const flatbuffers::resolver_function_t *_resolver) const { auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); @@ -2550,6 +2653,10 @@ inline bool VerifyItemData(flatbuffers::Verifier &verifier, const void *obj, Ite auto ptr = reinterpret_cast(obj); return verifier.VerifyTable(ptr); } + case ItemData::Short: { + auto ptr = reinterpret_cast(obj); + return verifier.VerifyTable(ptr); + } case ItemData::Float: { auto ptr = reinterpret_cast(obj); return verifier.VerifyTable(ptr); @@ -2652,6 +2759,10 @@ inline void *ItemDataUnion::UnPack(const void *obj, ItemData type, const flatbuf auto ptr = reinterpret_cast(obj); return ptr->UnPack(resolver); } + case ItemData::Short: { + auto ptr = reinterpret_cast(obj); + return ptr->UnPack(resolver); + } case ItemData::Float: { auto ptr = reinterpret_cast(obj); return ptr->UnPack(resolver); @@ -2742,6 +2853,10 @@ inline flatbuffers::Offset ItemDataUnion::Pack(flatbuffers::FlatBufferBuil auto ptr = reinterpret_cast(value); return CreateInt(_fbb, ptr, _rehasher).Union(); } + case ItemData::Short: { + auto ptr = reinterpret_cast(value); + return CreateShort(_fbb, ptr, _rehasher).Union(); + } case ItemData::Float: { auto ptr = reinterpret_cast(value); return CreateFloat(_fbb, ptr, _rehasher).Union(); @@ -2832,6 +2947,10 @@ inline ItemDataUnion::ItemDataUnion(const ItemDataUnion &u) : type(u.type), valu value = new TEN::Save::IntT(*reinterpret_cast(u.value)); break; } + case ItemData::Short: { + value = new TEN::Save::ShortT(*reinterpret_cast(u.value)); + break; + } case ItemData::Float: { value = new TEN::Save::FloatT(*reinterpret_cast(u.value)); break; @@ -2924,6 +3043,11 @@ inline void ItemDataUnion::Reset() { delete ptr; break; } + case ItemData::Short: { + auto ptr = reinterpret_cast(value); + delete ptr; + break; + } case ItemData::Float: { auto ptr = reinterpret_cast(value); delete ptr; diff --git a/TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h b/TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h index 6c97ee140..987d8bf91 100644 --- a/TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h +++ b/TR5Main/Specific/savegame/flatbuffers/ten_savegame_generated.h @@ -313,6 +313,9 @@ struct Item FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { const TEN::Save::Int *data_as_Int() const { return data_type() == TEN::Save::ItemData::Int ? static_cast(data()) : nullptr; } + const TEN::Save::Short *data_as_Short() const { + return data_type() == TEN::Save::ItemData::Short ? static_cast(data()) : nullptr; + } const TEN::Save::Float *data_as_Float() const { return data_type() == TEN::Save::ItemData::Float ? static_cast(data()) : nullptr; } @@ -423,6 +426,10 @@ template<> inline const TEN::Save::Int *Item::data_as() const { return data_as_Int(); } +template<> inline const TEN::Save::Short *Item::data_as() const { + return data_as_Short(); +} + template<> inline const TEN::Save::Float *Item::data_as() const { return data_as_Float(); }