engine: common: net_encode: apply post_multiplier to integer fields, like GoldSrc does

This commit is contained in:
Alibek Omarov 2024-04-17 06:23:22 +03:00
parent 2a18cde60c
commit 6d12d84e94

View file

@ -1147,7 +1147,7 @@ static qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, v
else else
iValue = *(uint8_t *)((int8_t *)to + pField->offset ); iValue = *(uint8_t *)((int8_t *)to + pField->offset );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue *= pField->multiplier; iValue *= pField->multiplier;
iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits ); iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits );
@ -1160,7 +1160,7 @@ static qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, v
else else
iValue = *(uint16_t *)((int8_t *)to + pField->offset ); iValue = *(uint16_t *)((int8_t *)to + pField->offset );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue *= pField->multiplier; iValue *= pField->multiplier;
iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits ); iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits );
@ -1173,7 +1173,7 @@ static qboolean Delta_WriteField( sizebuf_t *msg, delta_t *pField, void *from, v
else else
iValue = *(uint32_t *)((int8_t *)to + pField->offset ); iValue = *(uint32_t *)((int8_t *)to + pField->offset );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue *= pField->multiplier; iValue *= pField->multiplier;
iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits ); iValue = Delta_ClampIntegerField( pField, iValue, signbit, pField->bits );
@ -1290,9 +1290,12 @@ static qboolean Delta_ReadField( sizebuf_t *msg, delta_t *pField, void *from, vo
if( pField->flags & DT_BYTE ) if( pField->flags & DT_BYTE )
{ {
iValue = MSG_ReadBitLong( msg, pField->bits, bSigned ); iValue = MSG_ReadBitLong( msg, pField->bits, bSigned );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue /= pField->multiplier; iValue /= pField->multiplier;
if( !Q_equal( pField->post_multiplier, 1.0 ))
iValue *= pField->post_multiplier;
if( bSigned ) if( bSigned )
*(int8_t *)((uint8_t *)to + pField->offset ) = iValue; *(int8_t *)((uint8_t *)to + pField->offset ) = iValue;
else else
@ -1301,9 +1304,12 @@ static qboolean Delta_ReadField( sizebuf_t *msg, delta_t *pField, void *from, vo
else if( pField->flags & DT_SHORT ) else if( pField->flags & DT_SHORT )
{ {
iValue = MSG_ReadBitLong( msg, pField->bits, bSigned ); iValue = MSG_ReadBitLong( msg, pField->bits, bSigned );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue /= pField->multiplier; iValue /= pField->multiplier;
if( !Q_equal( pField->post_multiplier, 1.0 ))
iValue *= pField->post_multiplier;
if( bSigned ) if( bSigned )
*(int16_t *)((uint8_t *)to + pField->offset ) = iValue; *(int16_t *)((uint8_t *)to + pField->offset ) = iValue;
else else
@ -1312,9 +1318,12 @@ static qboolean Delta_ReadField( sizebuf_t *msg, delta_t *pField, void *from, vo
else if( pField->flags & DT_INTEGER ) else if( pField->flags & DT_INTEGER )
{ {
iValue = MSG_ReadBitLong( msg, pField->bits, bSigned ); iValue = MSG_ReadBitLong( msg, pField->bits, bSigned );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
iValue /= pField->multiplier; iValue /= pField->multiplier;
if( !Q_equal( pField->post_multiplier, 1.0 ))
iValue *= pField->post_multiplier;
if( bSigned ) if( bSigned )
*(int32_t *)((uint8_t *)to + pField->offset ) = iValue; *(int32_t *)((uint8_t *)to + pField->offset ) = iValue;
else else
@ -1328,11 +1337,11 @@ static qboolean Delta_ReadField( sizebuf_t *msg, delta_t *pField, void *from, vo
else else
flValue = iValue; flValue = iValue;
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
flValue = flValue / pField->multiplier; flValue /= pField->multiplier;
if( !Q_equal( pField->post_multiplier, 1.0 ) ) if( !Q_equal( pField->post_multiplier, 1.0 ))
flValue = flValue * pField->post_multiplier; flValue *= pField->post_multiplier;
*(float *)((byte *)to + pField->offset ) = flValue; *(float *)((byte *)to + pField->offset ) = flValue;
} }
@ -1354,7 +1363,7 @@ static qboolean Delta_ReadField( sizebuf_t *msg, delta_t *pField, void *from, vo
bSigned = true; // timewindow is always signed bSigned = true; // timewindow is always signed
iValue = MSG_ReadBitLong( msg, pField->bits, bSigned ); iValue = MSG_ReadBitLong( msg, pField->bits, bSigned );
if( !Q_equal( pField->multiplier, 1.0 ) ) if( !Q_equal( pField->multiplier, 1.0 ))
flTime = ( timebase * pField->multiplier - (int)iValue ) / pField->multiplier; flTime = ( timebase * pField->multiplier - (int)iValue ) / pField->multiplier;
else else
flTime = timebase - (int)iValue; flTime = timebase - (int)iValue;