1*890232f2SAndroid Build Coastguard Worker /* 2*890232f2SAndroid Build Coastguard Worker * Copyright 2015 Google Inc. All rights reserved. 3*890232f2SAndroid Build Coastguard Worker * 4*890232f2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*890232f2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*890232f2SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*890232f2SAndroid Build Coastguard Worker * 8*890232f2SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*890232f2SAndroid Build Coastguard Worker * 10*890232f2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*890232f2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*890232f2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*890232f2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*890232f2SAndroid Build Coastguard Worker * limitations under the License. 15*890232f2SAndroid Build Coastguard Worker */ 16*890232f2SAndroid Build Coastguard Worker 17*890232f2SAndroid Build Coastguard Worker // Run this file with the `java_sample.sh` script. 18*890232f2SAndroid Build Coastguard Worker 19*890232f2SAndroid Build Coastguard Worker import MyGame.Sample.Color 20*890232f2SAndroid Build Coastguard Worker import MyGame.Sample.Equipment 21*890232f2SAndroid Build Coastguard Worker import MyGame.Sample.Monster 22*890232f2SAndroid Build Coastguard Worker import MyGame.Sample.Vec3 23*890232f2SAndroid Build Coastguard Worker import MyGame.Sample.Weapon 24*890232f2SAndroid Build Coastguard Worker 25*890232f2SAndroid Build Coastguard Worker import com.google.flatbuffers.FlatBufferBuilder 26*890232f2SAndroid Build Coastguard Worker 27*890232f2SAndroid Build Coastguard Worker class SampleBinary { 28*890232f2SAndroid Build Coastguard Worker 29*890232f2SAndroid Build Coastguard Worker companion object { 30*890232f2SAndroid Build Coastguard Worker // Example how to use FlatBuffers to create and read binary buffers. 31*890232f2SAndroid Build Coastguard Worker @JvmStatic mainnull32*890232f2SAndroid Build Coastguard Worker fun main(args: Array<String>) { 33*890232f2SAndroid Build Coastguard Worker val builder = FlatBufferBuilder(0) 34*890232f2SAndroid Build Coastguard Worker 35*890232f2SAndroid Build Coastguard Worker // Create some weapons for our Monster ('Sword' and 'Axe'). 36*890232f2SAndroid Build Coastguard Worker val weaponOneName = builder.createString("Sword") 37*890232f2SAndroid Build Coastguard Worker val weaponOneDamage: Short = 3 38*890232f2SAndroid Build Coastguard Worker val weaponTwoName = builder.createString("Axe") 39*890232f2SAndroid Build Coastguard Worker val weaponTwoDamage: Short = 5 40*890232f2SAndroid Build Coastguard Worker 41*890232f2SAndroid Build Coastguard Worker // Use the `createWeapon()` helper function to create the weapons, since we set every field. 42*890232f2SAndroid Build Coastguard Worker val weaps = IntArray(2) 43*890232f2SAndroid Build Coastguard Worker weaps[0] = Weapon.createWeapon(builder, weaponOneName, weaponOneDamage) 44*890232f2SAndroid Build Coastguard Worker weaps[1] = Weapon.createWeapon(builder, weaponTwoName, weaponTwoDamage) 45*890232f2SAndroid Build Coastguard Worker 46*890232f2SAndroid Build Coastguard Worker // Serialize the FlatBuffer data. 47*890232f2SAndroid Build Coastguard Worker val name = builder.createString("Orc") 48*890232f2SAndroid Build Coastguard Worker val treasure = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 49*890232f2SAndroid Build Coastguard Worker val inv = Monster.createInventoryVector(builder, treasure) 50*890232f2SAndroid Build Coastguard Worker val weapons = Monster.createWeaponsVector(builder, weaps) 51*890232f2SAndroid Build Coastguard Worker val pos = Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f) 52*890232f2SAndroid Build Coastguard Worker 53*890232f2SAndroid Build Coastguard Worker Monster.startMonster(builder) 54*890232f2SAndroid Build Coastguard Worker Monster.addPos(builder, pos) 55*890232f2SAndroid Build Coastguard Worker Monster.addName(builder, name) 56*890232f2SAndroid Build Coastguard Worker Monster.addColor(builder, Color.Red) 57*890232f2SAndroid Build Coastguard Worker Monster.addHp(builder, 300.toShort()) 58*890232f2SAndroid Build Coastguard Worker Monster.addInventory(builder, inv) 59*890232f2SAndroid Build Coastguard Worker Monster.addWeapons(builder, weapons) 60*890232f2SAndroid Build Coastguard Worker Monster.addEquippedType(builder, Equipment.Weapon) 61*890232f2SAndroid Build Coastguard Worker Monster.addEquipped(builder, weaps[1]) 62*890232f2SAndroid Build Coastguard Worker val orc = Monster.endMonster(builder) 63*890232f2SAndroid Build Coastguard Worker 64*890232f2SAndroid Build Coastguard Worker builder.finish(orc) // You could also call `Monster.finishMonsterBuffer(builder, orc);`. 65*890232f2SAndroid Build Coastguard Worker 66*890232f2SAndroid Build Coastguard Worker // We now have a FlatBuffer that can be stored on disk or sent over a network. 67*890232f2SAndroid Build Coastguard Worker 68*890232f2SAndroid Build Coastguard Worker // ...Code to store to disk or send over a network goes here... 69*890232f2SAndroid Build Coastguard Worker 70*890232f2SAndroid Build Coastguard Worker // Instead, we are going to access it right away, as if we just received it. 71*890232f2SAndroid Build Coastguard Worker 72*890232f2SAndroid Build Coastguard Worker val buf = builder.dataBuffer() 73*890232f2SAndroid Build Coastguard Worker 74*890232f2SAndroid Build Coastguard Worker // Get access to the root: 75*890232f2SAndroid Build Coastguard Worker val monster = Monster.getRootAsMonster(buf) 76*890232f2SAndroid Build Coastguard Worker 77*890232f2SAndroid Build Coastguard Worker // Note: We did not set the `mana` field explicitly, so we get back the default value. 78*890232f2SAndroid Build Coastguard Worker assert(monster.mana == 150.toShort()) 79*890232f2SAndroid Build Coastguard Worker assert(monster.hp == 300.toShort()) 80*890232f2SAndroid Build Coastguard Worker assert(monster.name.equals("Orc")) 81*890232f2SAndroid Build Coastguard Worker assert(monster.color == Color.Red) 82*890232f2SAndroid Build Coastguard Worker assert(monster.pos!!.x == 1.0f) 83*890232f2SAndroid Build Coastguard Worker assert(monster.pos!!.y == 2.0f) 84*890232f2SAndroid Build Coastguard Worker assert(monster.pos!!.z == 3.0f) 85*890232f2SAndroid Build Coastguard Worker 86*890232f2SAndroid Build Coastguard Worker // Get and test the `inventory` FlatBuffer `vector`. 87*890232f2SAndroid Build Coastguard Worker for (i in 0 until monster.inventoryLength) { 88*890232f2SAndroid Build Coastguard Worker assert(monster.inventory(i) == i.toByte().toInt()) 89*890232f2SAndroid Build Coastguard Worker } 90*890232f2SAndroid Build Coastguard Worker 91*890232f2SAndroid Build Coastguard Worker // Get and test the `weapons` FlatBuffer `vector` of `table`s. 92*890232f2SAndroid Build Coastguard Worker val expectedWeaponNames = arrayOf("Sword", "Axe") 93*890232f2SAndroid Build Coastguard Worker val expectedWeaponDamages = intArrayOf(3, 5) 94*890232f2SAndroid Build Coastguard Worker for (i in 0 until monster.weaponsLength) { 95*890232f2SAndroid Build Coastguard Worker assert(monster.weapons(i)!!.name.equals(expectedWeaponNames[i])) 96*890232f2SAndroid Build Coastguard Worker assert(monster.weapons(i)!!.damage.toInt() == expectedWeaponDamages[i]) 97*890232f2SAndroid Build Coastguard Worker } 98*890232f2SAndroid Build Coastguard Worker 99*890232f2SAndroid Build Coastguard Worker // Get and test the `equipped` FlatBuffer `union`. 100*890232f2SAndroid Build Coastguard Worker assert(monster.equippedType == Equipment.Weapon) 101*890232f2SAndroid Build Coastguard Worker val equipped = monster.equipped(Weapon()) as Weapon? 102*890232f2SAndroid Build Coastguard Worker assert(equipped!!.name.equals("Axe")) 103*890232f2SAndroid Build Coastguard Worker assert(equipped.damage == 5.toShort()) 104*890232f2SAndroid Build Coastguard Worker 105*890232f2SAndroid Build Coastguard Worker println("The FlatBuffer was successfully created and verified!") 106*890232f2SAndroid Build Coastguard Worker } 107*890232f2SAndroid Build Coastguard Worker } 108*890232f2SAndroid Build Coastguard Worker } 109