diff options
author | tpart <tpart120@proton.me> | 2024-09-20 22:08:27 +0200 |
---|---|---|
committer | tpart <tpart120@proton.me> | 2024-09-20 22:08:27 +0200 |
commit | 48b074ac15f8c7ec1952aa19a9aab8be1856c7c8 (patch) | |
tree | f8a4be5b464b85138ac50ca00739ee6df973d4a8 | |
parent | 2944e255e9afde09fe51bbac16be1e848baa7eab (diff) | |
download | hurrycurry-48b074ac15f8c7ec1952aa19a9aab8be1856c7c8.tar hurrycurry-48b074ac15f8c7ec1952aa19a9aab8be1856c7c8.tar.bz2 hurrycurry-48b074ac15f8c7ec1952aa19a9aab8be1856c7c8.tar.zst |
Start tutorial based on ingredients not finished meals
-rw-r--r-- | client/game.gd | 30 | ||||
-rw-r--r-- | client/global.gd | 17 | ||||
-rw-r--r-- | client/map/item_factory.gd | 22 |
3 files changed, 46 insertions, 23 deletions
diff --git a/client/game.gd b/client/game.gd index 875e5fa7..c86906b6 100644 --- a/client/game.gd +++ b/client/game.gd @@ -187,14 +187,22 @@ func handle_packet(p): if "item" in p.message: var player: Player = players[p.player] var item_name: String = item_names[p.message.item] + var parsed_item := Global.ParsedItem.new(item_name) + var ingredients := [parsed_item.name] + ingredients.append_array(parsed_item.contents) player.item_message(item_name, timeout_initial, timeout_remaining) - if player.is_customer and not Global.get_profile("tutorials_played").has(item_name) and not Global.get_setting("gameplay.tutorial_disabled"): - if tutorial_running: - tutorial_queue.push_back(item_name) - else: - tutorial_running = true - update_tutorial_running.emit(tutorial_running) - mp.send_chat(player_id, "/start-tutorial %s" % item_name) + + if player.is_customer and not Global.get_setting("gameplay.tutorial_disabled"): + var completed_ingredients: Array = Global.get_profile("tutorial_ingredients_played") + var completed := Global.array_has_all(completed_ingredients, ingredients) + + if not completed: + if tutorial_running: + tutorial_queue.push_back(item_name) + else: + tutorial_running = true + update_tutorial_running.emit(tutorial_running) + mp.send_chat(player_id, "/start-tutorial %s" % item_name) elif "text" in p.message: players[p.player].text_message(p.message.text, timeout_initial, timeout_remaining) var username: String = players[p.player].username @@ -240,9 +248,11 @@ func handle_packet(p): update_tutorial_running.emit(tutorial_running) if p.success: - var played: Array = Global.get_profile("tutorials_played") - played.append(item_names[p.item]) - Global.set_profile("tutorials_played", played) + var completed_item := Global.ParsedItem.new(item_names[p.item]) + var played: Array = Global.get_profile("tutorial_ingredients_played") + played.append(completed_item.name) + played.append_array(completed_item.contents) + Global.set_profile("tutorial_ingredients_played", played) Global.save_profile() while item_names[p.item] in tutorial_queue: diff --git a/client/global.gd b/client/global.gd index d2773f14..97f7d0e8 100644 --- a/client/global.gd +++ b/client/global.gd @@ -26,7 +26,7 @@ var default_profile := { "username": "Giovanni", "character": 0, "last_server_url": "", - "tutorials_played": [], + "tutorial_ingredients_played": [], "hints": { "has_moved": false, "has_boosted": false, @@ -230,3 +230,18 @@ func add_missing_keys(dict: Dictionary, reference: Dictionary): else: if dict[k] is Dictionary: add_missing_keys(dict[k], reference[k]) + +func array_has_all(parent: Array, children: Array) -> bool: + for i in children: + if not i in parent: + return false + return true + +class ParsedItem: + var name: String + var contents: Array + + func _init(full_name: String): + var c = Array(full_name.split(":")) + name = c[0] + contents = c[1].split(",") if c.size() > 1 else [] diff --git a/client/map/item_factory.gd b/client/map/item_factory.gd index b91a0da0..5f5fd49a 100644 --- a/client/map/item_factory.gd +++ b/client/map/item_factory.gd @@ -19,11 +19,9 @@ class_name ItemFactory extends Object static func produce(full_name: String, owned_by: Node3D) -> Item: - var c = Array(full_name.split(":")) - var name = c[0] - var contents = c[1].split(",") if c.size() > 1 else [] - - match name: + var item = Global.ParsedItem.new(full_name) + + match item.name: "bun": return Bun.new(owned_by) "cheese": return Cheese.new(owned_by) "sliced-cheese": return SlicedCheese.new(owned_by) @@ -52,11 +50,11 @@ static func produce(full_name: String, owned_by: Node3D) -> Item: "lettuce": return Lettuce.new(owned_by) "sliced-lettuce": return SlicedLettuce.new(owned_by) "dirty-plate": return Plate.new(owned_by, ["dirt"]) - - "pot": return Pot.new(owned_by, contents) - "pan": return Pan.new(owned_by, contents) - "foodprocessor": return FoodProcessor.new(owned_by, contents) - "glass": return Glass.new(owned_by, contents) - "plate": return Plate.new(owned_by, contents) - + + "pot": return Pot.new(owned_by, item.contents) + "pan": return Pan.new(owned_by, item.contents) + "foodprocessor": return FoodProcessor.new(owned_by, item.contents) + "glass": return Glass.new(owned_by, item.contents) + "plate": return Plate.new(owned_by, item.contents) + _: return GenericItem.new(owned_by, full_name) |