void RecvInputState::serializefrom(BitStream &bs) { m_next_state.m_full_timeupdate = false; // possibly some kind of full_update flag that is used elsewhere also if(bs.GetBits(1)) extended_input(bs); m_next_state.m_has_target = bs.GetBits(1); m_next_state.m_target_idx = bs.GetPackedBits(14); // targeted entity server_index qCDebug(logTarget, "Has Target? %d | TargetIdx: %d", m_next_state.m_has_target, m_next_state.m_target_idx); TimeState prev_fld; int ctrl_idx = 0; while(bs.GetBits(1)) // receive control state array entries ? { TimeState fld; if(ctrl_idx) { fld.serializefrom_delta(bs, prev_fld); } else // initial values { fld.serializefrom_base(bs); } fld.dump(); prev_fld = fld; ctrl_idx++; } recv_client_opts(bs); // g_pak contents will follow if(bs.GetReadableBits()>0) { m_user_commands.ResetOffsets(); bs.ByteAlign(true,false); m_user_commands.StoreBitArray(bs.read_ptr(),bs.GetReadableBits()); // all remaining bits were moved to m_user_commands. bs.SetReadPos(bs.GetWritePos()); } }