diff options
| author | nokoe <nokoe@mailbox.org> | 2025-10-14 19:14:59 +0200 |
|---|---|---|
| committer | nokoe <nokoe@mailbox.org> | 2025-10-14 19:17:05 +0200 |
| commit | 24be32f7ada84b95c17f3eb6d545e1524d99db5e (patch) | |
| tree | 05065642f8c40418957455bea810469c8efe7ecf /client/message_parser.gd | |
| parent | 14f97c942ee163c1a5e32d9b72b358a3be5f4fda (diff) | |
| download | hurrycurry-24be32f7ada84b95c17f3eb6d545e1524d99db5e.tar hurrycurry-24be32f7ada84b95c17f3eb6d545e1524d99db5e.tar.bz2 hurrycurry-24be32f7ada84b95c17f3eb6d545e1524d99db5e.tar.zst | |
use item icons in tutorial; fixes #140
Diffstat (limited to 'client/message_parser.gd')
| -rw-r--r-- | client/message_parser.gd | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/client/message_parser.gd b/client/message_parser.gd index 64be0411..d9c08f88 100644 --- a/client/message_parser.gd +++ b/client/message_parser.gd @@ -18,7 +18,8 @@ extends Object var raw: Dictionary var kind := Kind.UNKNOWN -var result = null +var result +var game: Game enum Kind { ITEM, @@ -28,21 +29,43 @@ enum Kind { UNKNOWN } -func _init(raw_: Dictionary) -> void: +func _init(raw_: Dictionary, game_: Game) -> void: raw = raw_ - -func parse(game: Game) -> String: + game = game_ if "text" in raw: kind = Kind.TEXT result = raw["text"] elif "translation" in raw: kind = Kind.TRANSLATION # TODO: move function here - result = Global.get_message_str(raw) + var params: Array = raw.translation.params.map(MessageParser.new.bind(game)) + var unformatted := tr(raw.translation.id) + result = split_translation(unformatted, 0, params) + if result.size() == 1 && result[0].kind == Kind.TEXT: + kind = Kind.TEXT + result = result[0].result elif "tile" in raw: kind = Kind.TILE result = game.tile_names[raw["tile"]] elif "item" in raw: kind = Kind.ITEM result = game.item_names[raw["item"]] - return result + +func split_translation(msgstr: String, idx: int, params: Array) -> Array: + if msgstr.contains("{%d}" % idx): + var s := msgstr.split("{%d}" % idx, true, 1) + var l := split_translation(s[0], idx + 1, params) + if params[idx].kind == Kind.TRANSLATION: + l.append_array(params[idx].result) + else: + l.push_back(params[idx]) + var r := split_translation(s[1], idx + 1, params) + l.append_array(r) + var res := [l.front()] + for e: MessageParser in l.slice(1): + if res.back().kind == Kind.TEXT and e.kind == Kind.TEXT: + res.back().result = "%s%s" % [res.back().result, e.result] + else: + res.push_back(e) + return res + else: return [] if msgstr.is_empty() else [MessageParser.new({"text": msgstr}, game)] |