def from_bytes(data): movement = Movement() data_io = io.BytesIO(data) header_data = read_struct(data_io, Movement.HEADER_BIN) movement.flags, movement.time = header_data movement.position = Position.from_io(data_io) if movement.flags & MovementFlags.ON_TRANSPORT.value: transport_data = read_struct(data_io, Movement.TRANSPORT_HEADER_BIN) movement.transport_guid = transport_data[0] movement.transport_position = Position.from_io(data_io) if movement.flags & MovementFlags.IS_SWIMMING.value: swimming_data = read_struct(data_io, Movement.SWIMMING_BIN) movement.swim_pitch = swimming_data[0] if movement.flags & MovementFlags.IS_FALLING.value: movement.jump_data = JumpData.from_io(data_io) if movement.flags & MovementFlags.SPLINE_ELEVATION.value: elevation_data = read_struct(data_io, Movement.SPLINE_ELEVATION_BIN) movement.spline_elevation_unk = elevation_data[0] return movement