R-Type 0.1
Loading...
Searching...
No Matches
InputPayload.hpp
1#pragma once
2
3#include <cstdint>
4
5#include "BigEndian.hpp"
6
7namespace rtype::protocol {
16enum class InputAction : std::uint8_t {
17 NoneAction = 0x00,
18 Up = 0x01,
19 Down = 0x02,
20 Left = 0x04,
21 Right = 0x08,
22 Shoot = 0x10
23};
24
32 return static_cast<InputAction>(static_cast<std::uint8_t>(left) |
33 static_cast<std::uint8_t>(right));
34}
35
42constexpr bool hasAction(InputAction actions, InputAction action) {
43 return static_cast<std::uint8_t>(actions) & static_cast<std::uint8_t>(action);
44}
45
60};
61
62static_assert(sizeof(InputPayload) ==
63 sizeof(be32) + sizeof(be32) + sizeof(InputAction),
64 "InputPayload must not contain padding");
65
67} // namespace rtype::protocol
constexpr bool hasAction(InputAction actions, InputAction action)
Tells whether an action set contains an action.
Definition InputPayload.hpp:42
BigEndian< std::uint32_t > be32
32-bit unsigned integer stored in big-endian order.
Definition BigEndian.hpp:87
constexpr InputAction operator|(InputAction left, InputAction right)
Combines two action sets.
Definition InputPayload.hpp:31
InputAction
Bit flags of the actions held by a player.
Definition InputPayload.hpp:16
@ NoneAction
No action held.
@ Shoot
Shoot button held.
Payload of an Input message, 9 bytes, sent by a client every frame with the actions currently held.
Definition InputPayload.hpp:56
be32 clientTick
Client frame counter.
Definition InputPayload.hpp:58
be32 inputSequence
Increases for each Input sent.
Definition InputPayload.hpp:57
InputAction actions
Actions currently held.
Definition InputPayload.hpp:59