mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-07 12:18:46 +00:00
InGamePacketHandler: improve performance of input flag resolving
This commit is contained in:
parent
eb916fe43d
commit
3724479be3
@ -168,9 +168,10 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function resolveOnOffInputFlags(PlayerAuthInputPacket $packet, int $startFlag, int $stopFlag) : ?bool{
|
private function resolveOnOffInputFlags(int $inputFlags, int $startFlag, int $stopFlag) : ?bool{
|
||||||
$enabled = $packet->hasFlag($startFlag);
|
$enabled = ($inputFlags & (1 << $startFlag)) !== 0;
|
||||||
if($enabled !== $packet->hasFlag($stopFlag)){
|
$disabled = ($inputFlags & (1 << $stopFlag)) !== 0;
|
||||||
|
if($enabled !== $disabled){
|
||||||
return $enabled;
|
return $enabled;
|
||||||
}
|
}
|
||||||
//neither flag was set, or both were set
|
//neither flag was set, or both were set
|
||||||
@ -206,10 +207,11 @@ class InGamePacketHandler extends PacketHandler{
|
|||||||
// Once we get a movement within a reasonable distance, treat it as a teleport ACK and remove position lock
|
// Once we get a movement within a reasonable distance, treat it as a teleport ACK and remove position lock
|
||||||
$this->forceMoveSync = false;
|
$this->forceMoveSync = false;
|
||||||
|
|
||||||
$sneaking = $this->resolveOnOffInputFlags($packet, PlayerAuthInputFlags::START_SNEAKING, PlayerAuthInputFlags::STOP_SNEAKING);
|
$inputFlags = $packet->getInputFlags();
|
||||||
$sprinting = $this->resolveOnOffInputFlags($packet, PlayerAuthInputFlags::START_SPRINTING, PlayerAuthInputFlags::STOP_SPRINTING);
|
$sneaking = $this->resolveOnOffInputFlags($inputFlags, PlayerAuthInputFlags::START_SNEAKING, PlayerAuthInputFlags::STOP_SNEAKING);
|
||||||
$swimming = $this->resolveOnOffInputFlags($packet, PlayerAuthInputFlags::START_SWIMMING, PlayerAuthInputFlags::STOP_SWIMMING);
|
$sprinting = $this->resolveOnOffInputFlags($inputFlags, PlayerAuthInputFlags::START_SPRINTING, PlayerAuthInputFlags::STOP_SPRINTING);
|
||||||
$gliding = $this->resolveOnOffInputFlags($packet, PlayerAuthInputFlags::START_GLIDING, PlayerAuthInputFlags::STOP_GLIDING);
|
$swimming = $this->resolveOnOffInputFlags($inputFlags, PlayerAuthInputFlags::START_SWIMMING, PlayerAuthInputFlags::STOP_SWIMMING);
|
||||||
|
$gliding = $this->resolveOnOffInputFlags($inputFlags, PlayerAuthInputFlags::START_GLIDING, PlayerAuthInputFlags::STOP_GLIDING);
|
||||||
$mismatch =
|
$mismatch =
|
||||||
($sneaking !== null && !$this->player->toggleSneak($sneaking)) |
|
($sneaking !== null && !$this->player->toggleSneak($sneaking)) |
|
||||||
($sprinting !== null && !$this->player->toggleSprint($sprinting)) |
|
($sprinting !== null && !$this->player->toggleSprint($sprinting)) |
|
||||||
|
Loading…
x
Reference in New Issue
Block a user