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