public GameStatePacket BuildGameStatePacket() { FlatBufferBuilder builder = new FlatBufferBuilder(100); int ballStateOffset = -1; if (BallState != null) { ballStateOffset = BallState.ToFlatBuffer(builder).Value; } VectorOffset carStateVector = CreateCarStateVector(builder, carStates); DesiredGameState.StartDesiredGameState(builder); if (BallState != null) { DesiredGameState.AddBallState(builder, new Offset <DesiredBallState>(ballStateOffset)); } DesiredGameState.AddCarStates(builder, carStateVector); builder.Finish(DesiredGameState.EndDesiredGameState(builder).Value); return(new GameStatePacket(builder.SizedByteArray())); }
private static VectorOffset CreateCarStateVector(FlatBufferBuilder builder, Dictionary <int, CarState> carStates) { if (carStates.Count == 0) { return(DesiredGameState.CreateCarStatesVector(builder, new Offset <DesiredCarState> [0])); } int numCars = carStates.Keys.Max() + 1; Offset <DesiredCarState>[] carStateOffsets = new Offset <DesiredCarState> [numCars]; for (int i = 0; i < numCars; i++) { if (carStates.ContainsKey(i) && carStates[i] != null) { carStateOffsets[i] = carStates[i].ToFlatBuffer(builder); } else { carStateOffsets[i] = new CarState().ToFlatBuffer(builder); } } return(DesiredGameState.CreateCarStatesVector(builder, carStateOffsets)); }
public static Offset <DesiredGameState> ToFlatBuffer(this WorldState worldState, FlatBufferBuilder builder) { DesiredGameState.StartDesiredGameState(builder); DesiredGameState.AddBallState(builder, worldState.Ball.ToFlatBuffer(builder)); DesiredGameInfoState.StartDesiredGameInfoState(builder); DesiredGameInfoState.AddGameSpeed(builder, Float.CreateFloat(builder, worldState.GameSpeed)); DesiredGameInfoState.AddWorldGravityZ(builder, Float.CreateFloat(builder, worldState.WorldGravityZ)); DesiredGameInfoState.EndDesiredGameInfoState(builder); var carStates = new List <Offset <DesiredCarState> >(); foreach (var player in worldState.Players) { carStates.Add(player.ToFlatBuffer(builder)); } var carStateVector = DesiredGameState.CreateCarStatesVector(builder, carStates.ToArray()); DesiredGameState.AddCarStates(builder, carStateVector); return(DesiredGameState.EndDesiredGameState(builder)); }