Multiplayer: fix bool transmission when all 0
If all bools in a block are 0 the block would never be transmitted, i.e. fix a bug whereby each block of 0..30 used to need at least one true value to transmit the block.
This commit is contained in:
parent
d6556f5c94
commit
5fe24f741c
1 changed files with 12 additions and 13 deletions
|
@ -98,9 +98,10 @@ const int V2_PROP_ID_PROTOCOL = 0x10001;
|
||||||
const int V2_PAD_MAGIC = 0x1face002;
|
const int V2_PAD_MAGIC = 0x1face002;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* boolean arrays are transmitted in blocks of 30 mapping to a single int.
|
* boolean arrays are transmitted in blocks of 31 mapping to a single int.
|
||||||
* These parameters define where these are mapped and how they are sent.
|
* These parameters define where these are mapped and how they are sent.
|
||||||
* The blocks should be in the same property range (with no other properties inside the range)
|
* The blocks should be in the same property range (with no other properties inside the range)
|
||||||
|
* The blocksize is set to 40 to allow for ints being 32 bits, so block 0 will be 0..30 (31 bits)
|
||||||
*/
|
*/
|
||||||
const int BOOLARRAY_BLOCKSIZE = 40;
|
const int BOOLARRAY_BLOCKSIZE = 40;
|
||||||
|
|
||||||
|
@ -1410,11 +1411,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TT_BOOLARRAY:
|
case TT_BOOLARRAY:
|
||||||
{
|
|
||||||
if ((*it)->int_value)
|
|
||||||
{
|
{
|
||||||
struct BoolArrayBuffer *boolBuf = nullptr;
|
struct BoolArrayBuffer *boolBuf = nullptr;
|
||||||
if ((*it)->id > BOOLARRAY_START_ID && (*it)->id <= BOOLARRAY_END_ID + BOOLARRAY_BLOCKSIZE)
|
if ((*it)->id >= BOOLARRAY_START_ID && (*it)->id <= BOOLARRAY_END_ID + BOOLARRAY_BLOCKSIZE)
|
||||||
{
|
{
|
||||||
int buffer_block = ((*it)->id - BOOLARRAY_BASE_1) / BOOLARRAY_BLOCKSIZE;
|
int buffer_block = ((*it)->id - BOOLARRAY_BASE_1) / BOOLARRAY_BLOCKSIZE;
|
||||||
boolBuf = &boolBuffer[buffer_block];
|
boolBuf = &boolBuffer[buffer_block];
|
||||||
|
@ -1423,9 +1422,9 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
|
||||||
if (boolBuf)
|
if (boolBuf)
|
||||||
{
|
{
|
||||||
int bitidx = (*it)->id - boolBuf->propertyId;
|
int bitidx = (*it)->id - boolBuf->propertyId;
|
||||||
|
if ((*it)->int_value)
|
||||||
boolBuf->boolValue |= 1 << bitidx;
|
boolBuf->boolValue |= 1 << bitidx;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case simgear::props::INT:
|
case simgear::props::INT:
|
||||||
|
|
Loading…
Reference in a new issue