コード例 #1
0
ファイル: InputState.cpp プロジェクト: broxen/Segs
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());
    }
}