// automatically generated by the FlatBuffers compiler, do not modify

import * as flatbuffers from 'flatbuffers';

import { Color } from '../../my-game/example/color.js';
import { Test, TestT } from '../../my-game/example/test.js';


export class Vec3 implements flatbuffers.IUnpackableObject<Vec3T> {
  bb: flatbuffers.ByteBuffer|null = null;
  bb_pos = 0;
  __init(i:number, bb:flatbuffers.ByteBuffer):Vec3 {
  this.bb_pos = i;
  this.bb = bb;
  return this;
}

x():number {
  return this.bb!.readFloat32(this.bb_pos);
}

mutate_x(value:number):boolean {
  this.bb!.writeFloat32(this.bb_pos + 0, value);
  return true;
}

y():number {
  return this.bb!.readFloat32(this.bb_pos + 4);
}

mutate_y(value:number):boolean {
  this.bb!.writeFloat32(this.bb_pos + 4, value);
  return true;
}

z():number {
  return this.bb!.readFloat32(this.bb_pos + 8);
}

mutate_z(value:number):boolean {
  this.bb!.writeFloat32(this.bb_pos + 8, value);
  return true;
}

test1():number {
  return this.bb!.readFloat64(this.bb_pos + 16);
}

mutate_test1(value:number):boolean {
  this.bb!.writeFloat64(this.bb_pos + 16, value);
  return true;
}

test2():Color {
  return this.bb!.readUint8(this.bb_pos + 24);
}

mutate_test2(value:Color):boolean {
  this.bb!.writeUint8(this.bb_pos + 24, value);
  return true;
}

test3(obj?:Test):Test|null {
  return (obj || new Test()).__init(this.bb_pos + 26, this.bb!);
}

static getFullyQualifiedName():string {
  return 'MyGame.Example.Vec3';
}

static sizeOf():number {
  return 32;
}

static createVec3(builder:flatbuffers.Builder, x: number, y: number, z: number, test1: number, test2: Color, test3_a: number, test3_b: number):flatbuffers.Offset {
  builder.prep(8, 32);
  builder.pad(2);
  builder.prep(2, 4);
  builder.pad(1);
  builder.writeInt8(test3_b);
  builder.writeInt16(test3_a);
  builder.pad(1);
  builder.writeInt8(test2);
  builder.writeFloat64(test1);
  builder.pad(4);
  builder.writeFloat32(z);
  builder.writeFloat32(y);
  builder.writeFloat32(x);
  return builder.offset();
}


unpack(): Vec3T {
  return new Vec3T(
    this.x(),
    this.y(),
    this.z(),
    this.test1(),
    this.test2(),
    (this.test3() !== null ? this.test3()!.unpack() : null)
  );
}


unpackTo(_o: Vec3T): void {
  _o.x = this.x();
  _o.y = this.y();
  _o.z = this.z();
  _o.test1 = this.test1();
  _o.test2 = this.test2();
  _o.test3 = (this.test3() !== null ? this.test3()!.unpack() : null);
}
}

export class Vec3T implements flatbuffers.IGeneratedObject {
constructor(
  public x: number = 0.0,
  public y: number = 0.0,
  public z: number = 0.0,
  public test1: number = 0.0,
  public test2: Color = Color.Red,
  public test3: TestT|null = null
){}


pack(builder:flatbuffers.Builder): flatbuffers.Offset {
  return Vec3.createVec3(builder,
    this.x,
    this.y,
    this.z,
    this.test1,
    this.test2,
    (this.test3?.a ?? 0),
    (this.test3?.b ?? 0)
  );
}
}
