saltysystems / overworld

Open source framework for scalable multiplayer games.
Mozilla Public License 2.0
20 stars 3 forks source link

protobuf sub messages cause gdscript errors #2

Closed cmdrk closed 2 years ago

cmdrk commented 2 years ago

e.g.,:

This works ✔️

message outbound_msg {
  required string text = 1;
  required int64 id = 2;
}

message state_transfer {
  repeated outbound_msg msgs = 1;
}

This is a bit broken ❌

message state_transfer {
  message outbound_msg {
    required string text = 1;
    required int64 id = 2;
  }
  repeated outbound_msg msgs = 1;
}

Symptoms of the error in GDScript:

 res://scripts/libow.gd:171 - Parse Error: The function "unpack_state_transfer" already exists in this class (at line 115).

The offending generated code does not parse, specifically the function named unpack_state_transfer.outbound_msg:

func unpack_state_transfer(object):
    if typeof(object) == TYPE_ARRAY and object != []:
        var array = []
        for obj in object:
            var msgs = unpack_state_transfer.outbound_msg(obj.get_msgs())
            var dict = {'msgs': msgs, }
            array.append(dict)
        return array
    elif typeof(object) == TYPE_ARRAY and object == []:
        return []
    else:
        var msgs = unpack_state_transfer.outbound_msg(object.get_msgs())
        var dict = {'msgs': msgs, }
        return dict
# ...
func unpack_state_transfer.outbound_msg(object):
    if typeof(object) == TYPE_ARRAY and object != []:
        var array = []
        for obj in object:
            var id = obj.get_id()
            var text = obj.get_text()
            var dict = {'text': text, 'id': id, }
            array.append(dict)
        return array

I think we need to make this something like unpack_state_transfer_outbound_msg(...) instead.