summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/game.gd30
-rw-r--r--client/global.gd17
-rw-r--r--client/map/item_factory.gd22
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)