mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-03 10:17:59 +03:00
Added better items handling on load and save for runtime created items
This commit is contained in:
parent
cbc8c42037
commit
2ee369e7ea
6 changed files with 378 additions and 60 deletions
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue