| /* |
| * 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. |
| */ |
| |
| // To run, use the `javascript_sample.sh` script. |
| |
| var assert = require('assert'); |
| var flatbuffers = require('../js/flatbuffers').flatbuffers; |
| var MyGame = require('./monster_generated').MyGame; |
| |
| // Example how to use FlatBuffers to create and read binary buffers. |
| function main() { |
| var builder = new flatbuffers.Builder(0); |
| |
| // Create some weapons for our Monster ('Sword' and 'Axe'). |
| var weaponOne = builder.createString('Sword'); |
| var weaponTwo = builder.createString('Axe'); |
| |
| MyGame.Sample.Weapon.startWeapon(builder); |
| MyGame.Sample.Weapon.addName(builder, weaponOne); |
| MyGame.Sample.Weapon.addDamage(builder, 3); |
| var sword = MyGame.Sample.Weapon.endWeapon(builder); |
| |
| MyGame.Sample.Weapon.startWeapon(builder); |
| MyGame.Sample.Weapon.addName(builder, weaponTwo); |
| MyGame.Sample.Weapon.addDamage(builder, 5); |
| var axe = MyGame.Sample.Weapon.endWeapon(builder); |
| |
| // Serialize the FlatBuffer data. |
| var name = builder.createString('Orc'); |
| |
| var treasure = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; |
| var inv = MyGame.Sample.Monster.createInventoryVector(builder, treasure); |
| |
| var weaps = [sword, axe]; |
| var weapons = MyGame.Sample.Monster.createWeaponsVector(builder, weaps); |
| |
| var pos = MyGame.Sample.Vec3.createVec3(builder, 1.0, 2.0, 3.0); |
| |
| MyGame.Sample.Monster.startMonster(builder); |
| MyGame.Sample.Monster.addPos(builder, pos); |
| MyGame.Sample.Monster.addHp(builder, 300); |
| MyGame.Sample.Monster.addColor(builder, MyGame.Sample.Color.Red) |
| MyGame.Sample.Monster.addName(builder, name); |
| MyGame.Sample.Monster.addInventory(builder, inv); |
| MyGame.Sample.Monster.addWeapons(builder, weapons); |
| MyGame.Sample.Monster.addEquippedType(builder, MyGame.Sample.Equipment.Weapon); |
| MyGame.Sample.Monster.addEquipped(builder, weaps[1]); |
| var orc = MyGame.Sample.Monster.endMonster(builder); |
| |
| builder.finish(orc); // You may also call 'MyGame.Example.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. |
| |
| var buf = builder.dataBuffer(); |
| |
| // Get access to the root: |
| var monster = MyGame.Sample.Monster.getRootAsMonster(buf); |
| |
| // Note: We did not set the `mana` field explicitly, so we get back the default value. |
| assert.equal(monster.mana(), 150); |
| assert.equal(monster.hp(), 300); |
| assert.equal(monster.name(), 'Orc'); |
| assert.equal(monster.color(), MyGame.Sample.Color.Red); |
| assert.equal(monster.pos().x(), 1.0); |
| assert.equal(monster.pos().y(), 2.0); |
| assert.equal(monster.pos().z(), 3.0); |
| |
| // Get and test the `inventory` FlatBuffer `vector`. |
| for (var i = 0; i < monster.inventoryLength(); i++) { |
| assert.equal(monster.inventory(i), i); |
| } |
| |
| // Get and test the `weapons` FlatBuffer `vector` of `table`s. |
| var expectedWeaponNames = ['Sword', 'Axe']; |
| var expectedWeaponDamages = [3, 5]; |
| for (var i = 0; i < monster.weaponsLength(); i++) { |
| assert.equal(monster.weapons(i).name(), expectedWeaponNames[i]); |
| assert.equal(monster.weapons(i).damage(), expectedWeaponDamages[i]); |
| } |
| |
| // Get and test the `equipped` FlatBuffer `union`. |
| assert.equal(monster.equippedType(), MyGame.Sample.Equipment.Weapon); |
| assert.equal(monster.equipped(new MyGame.Sample.Weapon()).name(), 'Axe'); |
| assert.equal(monster.equipped(new MyGame.Sample.Weapon()).damage(), 5); |
| |
| console.log('The FlatBuffer was successfully created and verified!'); |
| } |
| |
| main(); |