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)); }