Add enums and local aliases supprot to protocol
This commit is contained in:
parent
1ead4a1590
commit
54f346b096
|
@ -142,6 +142,8 @@ namespace Feather
|
|||
|
||||
client.SendMessage(spawnPos);
|
||||
|
||||
using RelativeFlags = Play::ClientboundPlayerPositionAndLook::RelativeFlags;
|
||||
|
||||
Play::ClientboundPlayerPositionAndLook playerPos =
|
||||
{
|
||||
.x = 0,
|
||||
|
@ -149,7 +151,7 @@ namespace Feather
|
|||
.z = 0,
|
||||
.xRot = 0,
|
||||
.yRot = 0,
|
||||
.flags = 0,
|
||||
.flags = (RelativeFlags)0,
|
||||
.id = 0,
|
||||
};
|
||||
|
||||
|
|
|
@ -64,12 +64,12 @@ def get_type_size(type):
|
|||
print(type)
|
||||
assert False
|
||||
|
||||
def print_states(states):
|
||||
add_text('enum class ProtocolState : int32_t')
|
||||
def print_enum(name, dict, primitive = 'int32_t'):
|
||||
add_text('enum class {} : {}', name, primitive)
|
||||
add_text('{{')
|
||||
indent()
|
||||
for state, value in states.items():
|
||||
add_text('{} = {},', state, value)
|
||||
for key, value in dict.items():
|
||||
add_text('{} = {},', key, value)
|
||||
unindent()
|
||||
add_text('}};')
|
||||
|
||||
|
@ -87,7 +87,7 @@ def get_rw_func(primitiveType, aliasedType, read):
|
|||
else:
|
||||
return '{}<{}>'.format(prefix, primitiveType)
|
||||
|
||||
def print_messages(list, aliases, primitives):
|
||||
def print_messages(list, global_aliases, primitives):
|
||||
global text
|
||||
for state, direction_list in list.items():
|
||||
add_text('namespace {}', state.capitalize())
|
||||
|
@ -96,6 +96,15 @@ def print_messages(list, aliases, primitives):
|
|||
for direction, messages in direction_list.items():
|
||||
serverbound = direction == 'serverbound'
|
||||
for message_name, message in messages.items():
|
||||
|
||||
# global and local aliases
|
||||
aliases = global_aliases.copy()
|
||||
|
||||
# add any local aliases
|
||||
if 'aliases' in message:
|
||||
for alias in message['aliases']:
|
||||
aliases[alias] = message['aliases'][alias]
|
||||
|
||||
global varint_max_size
|
||||
size = varint_max_size # Packet Length
|
||||
size += varint_max_size # Packet Id
|
||||
|
@ -111,6 +120,15 @@ def print_messages(list, aliases, primitives):
|
|||
add_text('static constexpr ProtocolState PacketState = ProtocolState::{};', state.capitalize())
|
||||
add_text('static constexpr size_t MaxSize = {};', size)
|
||||
newline()
|
||||
if 'enums' in message:
|
||||
for enum in message['enums']:
|
||||
if enum in aliases:
|
||||
# lookup enum primitive type from aliases
|
||||
prim = resolve_type(primitives, aliases[enum])
|
||||
print_enum(enum, message['enums'][enum], prim)
|
||||
else:
|
||||
print_enum(enum, message['enums'][enum])
|
||||
newline()
|
||||
if serverbound:
|
||||
add_text('{}(PacketReader& reader)', struct_name)
|
||||
add_text('{{')
|
||||
|
@ -198,7 +216,7 @@ def print_protocol():
|
|||
with open(sys.argv[1]) as message_file:
|
||||
message_scheme = hjson.load(message_file)
|
||||
|
||||
print_states(message_scheme['states'])
|
||||
print_enum('ProtocolState', message_scheme['states'])
|
||||
|
||||
newline()
|
||||
|
||||
|
|
|
@ -159,6 +159,18 @@
|
|||
PlayerPositionAndLook:
|
||||
{
|
||||
id: 0x36
|
||||
enums: {
|
||||
RelativeFlags: {
|
||||
X: 1,
|
||||
Y: 2,
|
||||
Z: 4,
|
||||
Y_ROT: 8,
|
||||
X_ROT: 16,
|
||||
}
|
||||
}
|
||||
aliases: {
|
||||
RelativeFlags: byte
|
||||
}
|
||||
vars: {
|
||||
x: double
|
||||
y: double
|
||||
|
@ -166,7 +178,7 @@
|
|||
// xRot is yaw, yRot is pitch
|
||||
xRot: float
|
||||
yRot: float
|
||||
flags: byte
|
||||
flags: RelativeFlags
|
||||
id: varint
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue