aboutsummaryrefslogtreecommitdiff
path: root/client/message_parser.gd
diff options
context:
space:
mode:
authornokoe <nokoe@mailbox.org>2025-10-14 19:14:59 +0200
committernokoe <nokoe@mailbox.org>2025-10-14 19:17:05 +0200
commit24be32f7ada84b95c17f3eb6d545e1524d99db5e (patch)
tree05065642f8c40418957455bea810469c8efe7ecf /client/message_parser.gd
parent14f97c942ee163c1a5e32d9b72b358a3be5f4fda (diff)
downloadhurrycurry-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.gd35
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)]