Added better items handling on load and save for runtime created items

This commit is contained in:
MontyTRC89 2021-10-29 06:49:34 +02:00
parent cbc8c42037
commit 2ee369e7ea
6 changed files with 378 additions and 60 deletions

View file

@ -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,

View file

@ -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<TEN::Save::Int> {
static const ItemData enum_value = ItemData::Int;
};
template<> struct ItemDataTraits<TEN::Save::Short> {
static const ItemData enum_value = ItemData::Short;
};
template<> struct ItemDataTraits<TEN::Save::Float> {
static const ItemData enum_value = ItemData::Float;
};
@ -319,6 +330,14 @@ struct ItemDataUnion {
return type == ItemData::Int ?
reinterpret_cast<const TEN::Save::IntT *>(value) : nullptr;
}
TEN::Save::ShortT *AsShort() {
return type == ItemData::Short ?
reinterpret_cast<TEN::Save::ShortT *>(value) : nullptr;
}
const TEN::Save::ShortT *AsShort() const {
return type == ItemData::Short ?
reinterpret_cast<const TEN::Save::ShortT *>(value) : nullptr;
}
TEN::Save::FloatT *AsFloat() {
return type == ItemData::Float ?
reinterpret_cast<TEN::Save::FloatT *>(value) : nullptr;
@ -1764,6 +1783,64 @@ struct ItemNumber::Traits {
flatbuffers::Offset<ItemNumber> 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<int16_t>(VT_SCALAR, 0);
}
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int16_t>(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<Short> 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<int16_t>(Short::VT_SCALAR, scalar, 0);
}
explicit ShortBuilder(flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
flatbuffers::Offset<Short> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = flatbuffers::Offset<Short>(end);
return o;
}
};
inline flatbuffers::Offset<Short> 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<Short> 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<ItemNumber> CreateItemNumber(flatbuffers::FlatBufferB
_num);
}
inline ShortT *Short::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
auto _o = std::make_unique<ShortT>();
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> Short::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
return CreateShort(_fbb, _o, _rehasher);
}
inline flatbuffers::Offset<Short> 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<IntT>();
UnPackTo(_o.get(), _resolver);
@ -2550,6 +2653,10 @@ inline bool VerifyItemData(flatbuffers::Verifier &verifier, const void *obj, Ite
auto ptr = reinterpret_cast<const TEN::Save::Int *>(obj);
return verifier.VerifyTable(ptr);
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::Short *>(obj);
return verifier.VerifyTable(ptr);
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::Float *>(obj);
return verifier.VerifyTable(ptr);
@ -2652,6 +2759,10 @@ inline void *ItemDataUnion::UnPack(const void *obj, ItemData type, const flatbuf
auto ptr = reinterpret_cast<const TEN::Save::Int *>(obj);
return ptr->UnPack(resolver);
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::Short *>(obj);
return ptr->UnPack(resolver);
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::Float *>(obj);
return ptr->UnPack(resolver);
@ -2742,6 +2853,10 @@ inline flatbuffers::Offset<void> ItemDataUnion::Pack(flatbuffers::FlatBufferBuil
auto ptr = reinterpret_cast<const TEN::Save::IntT *>(value);
return CreateInt(_fbb, ptr, _rehasher).Union();
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::ShortT *>(value);
return CreateShort(_fbb, ptr, _rehasher).Union();
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::FloatT *>(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<TEN::Save::IntT *>(u.value));
break;
}
case ItemData::Short: {
value = new TEN::Save::ShortT(*reinterpret_cast<TEN::Save::ShortT *>(u.value));
break;
}
case ItemData::Float: {
value = new TEN::Save::FloatT(*reinterpret_cast<TEN::Save::FloatT *>(u.value));
break;
@ -2924,6 +3043,11 @@ inline void ItemDataUnion::Reset() {
delete ptr;
break;
}
case ItemData::Short: {
auto ptr = reinterpret_cast<TEN::Save::ShortT *>(value);
delete ptr;
break;
}
case ItemData::Float: {
auto ptr = reinterpret_cast<TEN::Save::FloatT *>(value);
delete ptr;

View file

@ -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<const TEN::Save::Int *>(data()) : nullptr;
}
const TEN::Save::Short *data_as_Short() const {
return data_type() == TEN::Save::ItemData::Short ? static_cast<const TEN::Save::Short *>(data()) : nullptr;
}
const TEN::Save::Float *data_as_Float() const {
return data_type() == TEN::Save::ItemData::Float ? static_cast<const TEN::Save::Float *>(data()) : nullptr;
}
@ -423,6 +426,10 @@ template<> inline const TEN::Save::Int *Item::data_as<TEN::Save::Int>() const {
return data_as_Int();
}
template<> inline const TEN::Save::Short *Item::data_as<TEN::Save::Short>() const {
return data_as_Short();
}
template<> inline const TEN::Save::Float *Item::data_as<TEN::Save::Float>() const {
return data_as_Float();
}

View file

@ -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>())
{
short& data = itemToSerialize.data;
serializedItem.add_data_type(Save::ItemData::Short);
serializedItem.add_data(data);
}
else if (itemToSerialize.data.is<int>())
{
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();

View file

@ -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<TEN::Save::Int> {
static const ItemData enum_value = ItemData::Int;
};
template<> struct ItemDataTraits<TEN::Save::Short> {
static const ItemData enum_value = ItemData::Short;
};
template<> struct ItemDataTraits<TEN::Save::Float> {
static const ItemData enum_value = ItemData::Float;
};
@ -319,6 +330,14 @@ struct ItemDataUnion {
return type == ItemData::Int ?
reinterpret_cast<const TEN::Save::IntT *>(value) : nullptr;
}
TEN::Save::ShortT *AsShort() {
return type == ItemData::Short ?
reinterpret_cast<TEN::Save::ShortT *>(value) : nullptr;
}
const TEN::Save::ShortT *AsShort() const {
return type == ItemData::Short ?
reinterpret_cast<const TEN::Save::ShortT *>(value) : nullptr;
}
TEN::Save::FloatT *AsFloat() {
return type == ItemData::Float ?
reinterpret_cast<TEN::Save::FloatT *>(value) : nullptr;
@ -1764,6 +1783,64 @@ struct ItemNumber::Traits {
flatbuffers::Offset<ItemNumber> 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<int16_t>(VT_SCALAR, 0);
}
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<int16_t>(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<Short> 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<int16_t>(Short::VT_SCALAR, scalar, 0);
}
explicit ShortBuilder(flatbuffers::FlatBufferBuilder &_fbb)
: fbb_(_fbb) {
start_ = fbb_.StartTable();
}
flatbuffers::Offset<Short> Finish() {
const auto end = fbb_.EndTable(start_);
auto o = flatbuffers::Offset<Short>(end);
return o;
}
};
inline flatbuffers::Offset<Short> 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<Short> 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<ItemNumber> CreateItemNumber(flatbuffers::FlatBufferB
_num);
}
inline ShortT *Short::UnPack(const flatbuffers::resolver_function_t *_resolver) const {
auto _o = std::make_unique<ShortT>();
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> Short::Pack(flatbuffers::FlatBufferBuilder &_fbb, const ShortT* _o, const flatbuffers::rehasher_function_t *_rehasher) {
return CreateShort(_fbb, _o, _rehasher);
}
inline flatbuffers::Offset<Short> 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<IntT>();
UnPackTo(_o.get(), _resolver);
@ -2550,6 +2653,10 @@ inline bool VerifyItemData(flatbuffers::Verifier &verifier, const void *obj, Ite
auto ptr = reinterpret_cast<const TEN::Save::Int *>(obj);
return verifier.VerifyTable(ptr);
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::Short *>(obj);
return verifier.VerifyTable(ptr);
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::Float *>(obj);
return verifier.VerifyTable(ptr);
@ -2652,6 +2759,10 @@ inline void *ItemDataUnion::UnPack(const void *obj, ItemData type, const flatbuf
auto ptr = reinterpret_cast<const TEN::Save::Int *>(obj);
return ptr->UnPack(resolver);
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::Short *>(obj);
return ptr->UnPack(resolver);
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::Float *>(obj);
return ptr->UnPack(resolver);
@ -2742,6 +2853,10 @@ inline flatbuffers::Offset<void> ItemDataUnion::Pack(flatbuffers::FlatBufferBuil
auto ptr = reinterpret_cast<const TEN::Save::IntT *>(value);
return CreateInt(_fbb, ptr, _rehasher).Union();
}
case ItemData::Short: {
auto ptr = reinterpret_cast<const TEN::Save::ShortT *>(value);
return CreateShort(_fbb, ptr, _rehasher).Union();
}
case ItemData::Float: {
auto ptr = reinterpret_cast<const TEN::Save::FloatT *>(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<TEN::Save::IntT *>(u.value));
break;
}
case ItemData::Short: {
value = new TEN::Save::ShortT(*reinterpret_cast<TEN::Save::ShortT *>(u.value));
break;
}
case ItemData::Float: {
value = new TEN::Save::FloatT(*reinterpret_cast<TEN::Save::FloatT *>(u.value));
break;
@ -2924,6 +3043,11 @@ inline void ItemDataUnion::Reset() {
delete ptr;
break;
}
case ItemData::Short: {
auto ptr = reinterpret_cast<TEN::Save::ShortT *>(value);
delete ptr;
break;
}
case ItemData::Float: {
auto ptr = reinterpret_cast<TEN::Save::FloatT *>(value);
delete ptr;

View file

@ -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<const TEN::Save::Int *>(data()) : nullptr;
}
const TEN::Save::Short *data_as_Short() const {
return data_type() == TEN::Save::ItemData::Short ? static_cast<const TEN::Save::Short *>(data()) : nullptr;
}
const TEN::Save::Float *data_as_Float() const {
return data_type() == TEN::Save::ItemData::Float ? static_cast<const TEN::Save::Float *>(data()) : nullptr;
}
@ -423,6 +426,10 @@ template<> inline const TEN::Save::Int *Item::data_as<TEN::Save::Int>() const {
return data_as_Int();
}
template<> inline const TEN::Save::Short *Item::data_as<TEN::Save::Short>() const {
return data_as_Short();
}
template<> inline const TEN::Save::Float *Item::data_as<TEN::Save::Float>() const {
return data_as_Float();
}