109 lines
4.1 KiB
Kotlin
109 lines
4.1 KiB
Kotlin
/*
|
|
* Copyright 2015 Google Inc. All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
// Run this file with the `java_sample.sh` script.
|
|
|
|
import MyGame.Sample.Color
|
|
import MyGame.Sample.Equipment
|
|
import MyGame.Sample.Monster
|
|
import MyGame.Sample.Vec3
|
|
import MyGame.Sample.Weapon
|
|
|
|
import com.google.flatbuffers.FlatBufferBuilder
|
|
|
|
class SampleBinary {
|
|
|
|
companion object {
|
|
// Example how to use FlatBuffers to create and read binary buffers.
|
|
@JvmStatic
|
|
fun main(args: Array<String>) {
|
|
val builder = FlatBufferBuilder(0)
|
|
|
|
// Create some weapons for our Monster ('Sword' and 'Axe').
|
|
val weaponOneName = builder.createString("Sword")
|
|
val weaponOneDamage: Short = 3
|
|
val weaponTwoName = builder.createString("Axe")
|
|
val weaponTwoDamage: Short = 5
|
|
|
|
// Use the `createWeapon()` helper function to create the weapons, since we set every field.
|
|
val weaps = IntArray(2)
|
|
weaps[0] = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage)
|
|
weaps[1] = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage)
|
|
|
|
// Serialize the FlatBuffer data.
|
|
val name = builder.createString("Orc")
|
|
val treasure = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
|
|
val inv = Monster.createInventoryVector(builder, treasure)
|
|
val weapons = Monster.createWeaponsVector(builder, weaps)
|
|
val pos = Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f)
|
|
|
|
Monster.startMonster(builder)
|
|
Monster.addPos(builder, pos)
|
|
Monster.addName(builder, name)
|
|
Monster.addColor(builder, Color.Red)
|
|
Monster.addHp(builder, 300.toShort())
|
|
Monster.addInventory(builder, inv)
|
|
Monster.addWeapons(builder, weapons)
|
|
Monster.addEquippedType(builder, Equipment.Weapon)
|
|
Monster.addEquipped(builder, weaps[1])
|
|
val orc = Monster.endMonster(builder)
|
|
|
|
builder.finish(orc) // You could also call `Monster.finishMonsterBuffer(builder, orc);`.
|
|
|
|
// We now have a FlatBuffer that can be stored on disk or sent over a network.
|
|
|
|
// ...Code to store to disk or send over a network goes here...
|
|
|
|
// Instead, we are going to access it right away, as if we just received it.
|
|
|
|
val buf = builder.dataBuffer()
|
|
|
|
// Get access to the root:
|
|
val monster = Monster.getRootAsMonster(buf)
|
|
|
|
// Note: We did not set the `mana` field explicitly, so we get back the default value.
|
|
assert(monster.mana == 150.toShort())
|
|
assert(monster.hp == 300.toShort())
|
|
assert(monster.name.equals("Orc"))
|
|
assert(monster.color == Color.Red)
|
|
assert(monster.pos!!.x == 1.0f)
|
|
assert(monster.pos!!.y == 2.0f)
|
|
assert(monster.pos!!.z == 3.0f)
|
|
|
|
// Get and test the `inventory` FlatBuffer `vector`.
|
|
for (i in 0 until monster.inventoryLength) {
|
|
assert(monster.inventory(i) == i.toByte().toInt())
|
|
}
|
|
|
|
// Get and test the `weapons` FlatBuffer `vector` of `table`s.
|
|
val expectedWeaponNames = arrayOf("Sword", "Axe")
|
|
val expectedWeaponDamages = intArrayOf(3, 5)
|
|
for (i in 0 until monster.weaponsLength) {
|
|
assert(monster.weapons(i)!!.name.equals(expectedWeaponNames[i]))
|
|
assert(monster.weapons(i)!!.damage.toInt() == expectedWeaponDamages[i])
|
|
}
|
|
|
|
// Get and test the `equipped` FlatBuffer `union`.
|
|
assert(monster.equippedType == Equipment.Weapon)
|
|
val equipped = monster.equipped(Weapon()) as Weapon?
|
|
assert(equipped!!.name.equals("Axe"))
|
|
assert(equipped.damage == 5.toShort())
|
|
|
|
println("The FlatBuffer was successfully created and verified!")
|
|
}
|
|
}
|
|
}
|