flatbuffers

Форк
0
/
sample_binary.lua 
107 строк · 3.4 Кб
1
-- need to update the Lua path to point to the local flatbuffers implementation
2
package.path = string.format("../lua/?.lua;%s",package.path)
3
package.path = string.format("./lua/?.lua;%s",package.path)
4

5
-- require the library
6
local flatbuffers = require("flatbuffers")
7

8
local binaryArray = flatbuffers.binaryArray-- for hex dump utility
9

10
-- require the files generated from the schema
11
local weapon = require("MyGame.Sample.Weapon")
12
local monster = require("MyGame.Sample.Monster")
13
local vec3 = require("MyGame.Sample.Vec3")
14
local color = require("MyGame.Sample.Color")
15
local equipment = require("MyGame.Sample.Equipment")
16

17
-- get access to the builder, providing an array of size 1024
18
local builder = flatbuffers.Builder(1024)
19

20
local weaponOne = builder:CreateString("Sword")
21
local weaponTwo = builder:CreateString("Axe")
22

23
-- Create the first 'Weapon'
24
weapon.Start(builder)
25
weapon.AddName(builder, weaponOne)
26
weapon.AddDamage(builder, 3)
27
local sword = weapon.End(builder)
28

29
-- Create the second 'Weapon'
30
weapon.Start(builder)
31
weapon.AddName(builder, weaponTwo)
32
weapon.AddDamage(builder, 5)
33
local axe = weapon.End(builder)
34

35
-- Serialize a name for our mosnter, called 'orc'
36
local name = builder:CreateString("Orc")
37

38
-- Create a `vector` representing the inventory of the Orc. Each number
39
-- could correspond to an item that can be claimed after he is slain.
40
-- Note: Since we prepend the bytes, this loop iterates in reverse.
41
monster.StartInventoryVector(builder, 10)
42
for i=10,1,-1 do
43
    builder:PrependByte(i)
44
end
45
local inv = builder:EndVector(10)
46

47
-- Create a FlatBuffer vector and prepend the weapons.
48
-- Note: Since we prepend the data, prepend them in reverse order.
49
monster.StartWeaponsVector(builder, 2)
50
builder:PrependUOffsetTRelative(axe)
51
builder:PrependUOffsetTRelative(sword)
52
local weapons = builder:EndVector(2)
53

54
-- Create our monster by using Start() andEnd()
55
monster.Start(builder)
56
monster.AddPos(builder, vec3.CreateVec3(builder, 1.0, 2.0, 3.0))
57
monster.AddHp(builder, 300)
58
monster.AddName(builder, name)
59
monster.AddInventory(builder, inv)
60
monster.AddColor(builder, color.Red)
61
monster.AddWeapons(builder, weapons)
62
monster.AddEquippedType(builder, equipment.Weapon)
63
monster.AddEquipped(builder, axe)
64
local orc = monster.End(builder)
65

66
-- Call 'Finish()' to instruct the builder that this monster is complete.
67
builder:Finish(orc)
68

69
-- Get the flatbuffer as a string containing the binary data
70
local bufAsString = builder:Output()
71

72
-- Convert the string representation into binary array Lua structure
73
local buf = flatbuffers.binaryArray.New(bufAsString)
74

75
-- Get an accessor to the root object insert the buffer
76
local mon = monster.GetRootAsMonster(buf, 0)
77

78
assert(mon:Mana() == 150)
79
assert(mon:Hp() == 300)
80
assert(mon:Name() == "Orc")
81
assert(mon:Color() == color.Red)
82
assert(mon:Pos():X() == 1.0)
83
assert(mon:Pos():Y() == 2.0)
84
assert(mon:Pos():Z() == 3.0)
85

86
for i=1,mon:InventoryLength() do
87
    assert(mon:Inventory(i) == i)
88
end
89

90
local expected = { 
91
    {w = 'Sword', d = 3}, 
92
    {w = 'Axe', d = 5}
93
}
94

95
for i=1,mon:WeaponsLength() do
96
   assert(mon:Weapons(i):Name() == expected[i].w)
97
   assert(mon:Weapons(i):Damage() == expected[i].d)
98
end
99

100
assert(mon:EquippedType() == equipment.Weapon)
101

102
local unionWeapon = weapon.New()
103
unionWeapon:Init(mon:Equipped().bytes,mon:Equipped().pos)
104
assert(unionWeapon:Name() == "Axe")
105
assert(unionWeapon:Damage() == 5)
106

107
print("The Lua FlatBuffer example was successfully created and verified!")

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.