A cooking game made in Godot

Add proper UI for dishes and coins

assets/coin.png

This is a binary file and will not be displayed.

+34
assets/coin.png.import
··· 1 + [remap] 2 + 3 + importer="texture" 4 + type="CompressedTexture2D" 5 + uid="uid://b82673exscqgp" 6 + path="res://.godot/imported/coin.png-f04b9cd408b88aba3ab0966b4da32df0.ctex" 7 + metadata={ 8 + "vram_texture": false 9 + } 10 + 11 + [deps] 12 + 13 + source_file="res://assets/coin.png" 14 + dest_files=["res://.godot/imported/coin.png-f04b9cd408b88aba3ab0966b4da32df0.ctex"] 15 + 16 + [params] 17 + 18 + compress/mode=0 19 + compress/high_quality=false 20 + compress/lossy_quality=0.7 21 + compress/hdr_compression=1 22 + compress/normal_map=0 23 + compress/channel_pack=0 24 + mipmaps/generate=false 25 + mipmaps/limit=-1 26 + roughness/mode=0 27 + roughness/src_normal="" 28 + process/fix_alpha_border=true 29 + process/premult_alpha=false 30 + process/normal_map_invert_y=false 31 + process/hdr_as_srgb=false 32 + process/hdr_clamp_exposure=false 33 + process/size_limit=0 34 + detect_3d/compress_to=1
+5
project.godot
··· 15 15 config/features=PackedStringArray("4.4", "Mobile") 16 16 config/icon="res://assets/icon.svg" 17 17 18 + [display] 19 + 20 + window/size/viewport_width=1216 21 + window/stretch/mode="canvas_items" 22 + 18 23 [input] 19 24 20 25 move_left={
+19
scenes/dish_indicator.tscn
··· 1 + [gd_scene load_steps=2 format=3 uid="uid://6bxmmdbnxyq5"] 2 + 3 + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_q8vbr"] 4 + bg_color = Color(0, 1, 0.392157, 1) 5 + 6 + [node name="VBoxContainer" type="VBoxContainer"] 7 + offset_right = 40.0 8 + offset_bottom = 40.0 9 + 10 + [node name="TextureRect" type="TextureRect" parent="."] 11 + custom_minimum_size = Vector2(32, 32) 12 + layout_mode = 2 13 + stretch_mode = 4 14 + 15 + [node name="ProgressBar" type="ProgressBar" parent="."] 16 + layout_mode = 2 17 + theme_override_styles/fill = SubResource("StyleBoxFlat_q8vbr") 18 + value = 100.0 19 + show_percentage = false
+29 -28
scenes/main.tscn
··· 1 - [gd_scene load_steps=11 format=4 uid="uid://bdhboi1mq3tq7"] 1 + [gd_scene load_steps=12 format=4 uid="uid://bdhboi1mq3tq7"] 2 2 3 3 [ext_resource type="PackedScene" uid="uid://6xfwu8h4qqvr" path="res://scenes/player.tscn" id="1_gnn8a"] 4 4 [ext_resource type="Script" uid="uid://ccbpbehroxfe5" path="res://scripts/world.gd" id="1_jyhfs"] ··· 6 6 [ext_resource type="Texture2D" uid="uid://b2trsp635igg3" path="res://assets/conveyor.png" id="2_0wfyh"] 7 7 [ext_resource type="Script" uid="uid://bikq5kiguh2h" path="res://scripts/dish.gd" id="2_tefeu"] 8 8 [ext_resource type="Resource" uid="uid://dhyh31elxvwu5" path="res://dishes/apple.tres" id="3_o6xl0"] 9 + [ext_resource type="Texture2D" uid="uid://b82673exscqgp" path="res://assets/coin.png" id="7_tipki"] 9 10 10 11 [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_jyhfs"] 11 12 texture = ExtResource("1_sugp2") 12 13 texture_region_size = Vector2i(64, 64) 13 14 0:0/0 = 0 14 - 1:0/0 = 0 15 - 2:0/0 = 0 16 - 3:0/0 = 0 17 - 0:1/0 = 0 18 - 1:1/0 = 0 19 - 2:1/0 = 0 20 - 3:1/0 = 0 21 - 0:2/0 = 0 22 - 1:2/0 = 0 23 - 2:2/0 = 0 24 - 3:2/0 = 0 25 - 0:3/0 = 0 26 - 1:3/0 = 0 27 - 2:3/0 = 0 28 - 3:3/0 = 0 29 15 30 16 [sub_resource type="TileSet" id="TileSet_tbgi4"] 31 17 tile_size = Vector2i(64, 64) ··· 81 67 possible_dishes = Array[ExtResource("2_tefeu")]([ExtResource("3_o6xl0")]) 82 68 83 69 [node name="Floor" type="TileMapLayer" parent="."] 84 - tile_map_data = PackedByteArray("AAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAACAAEAAAAAAAAAAAACAAIAAAAAAAAAAAACAAMAAAAAAAAAAAACAAQAAAAAAAAAAAACAAUAAAAAAAAAAAACAAYAAAAAAAAAAAACAAcAAAAAAAAAAAACAAgAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAgAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAgAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAAAAAAAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAgAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAYAAAAAAAAAAAAKAAcAAAAAAAAAAAAKAAgAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAAAAAAAAAALAAgAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAYAAAAAAAAAAAAMAAcAAAAAAAAAAAAMAAgAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAMAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAPAAEAAAAAAAAAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAAAAAAAAAAPAAUAAAAAAAAAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAAAAAAAAAA=") 70 + tile_map_data = PackedByteArray("AAABAAEAAAAAAAAAAAABAAIAAAAAAAAAAAABAAMAAAAAAAAAAAABAAQAAAAAAAAAAAABAAUAAAAAAAAAAAABAAYAAAAAAAAAAAABAAcAAAAAAAAAAAABAAgAAAAAAAAAAAACAAEAAAAAAAAAAAACAAIAAAAAAAAAAAACAAMAAAAAAAAAAAACAAQAAAAAAAAAAAACAAUAAAAAAAAAAAACAAYAAAAAAAAAAAACAAcAAAAAAAAAAAACAAgAAAAAAAAAAAADAAEAAAAAAAAAAAADAAIAAAAAAAAAAAADAAMAAAAAAAAAAAADAAQAAAAAAAAAAAADAAUAAAAAAAAAAAADAAYAAAAAAAAAAAADAAcAAAAAAAAAAAADAAgAAAAAAAAAAAAEAAEAAAAAAAAAAAAEAAIAAAAAAAAAAAAEAAMAAAAAAAAAAAAEAAQAAAAAAAAAAAAEAAUAAAAAAAAAAAAEAAYAAAAAAAAAAAAEAAcAAAAAAAAAAAAEAAgAAAAAAAAAAAAFAAEAAAAAAAAAAAAFAAIAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAFAAUAAAAAAAAAAAAFAAYAAAAAAAAAAAAFAAcAAAAAAAAAAAAFAAgAAAAAAAAAAAAGAAEAAAAAAAAAAAAGAAIAAAAAAAAAAAAGAAMAAAAAAAAAAAAGAAQAAAAAAAAAAAAGAAUAAAAAAAAAAAAGAAYAAAAAAAAAAAAGAAcAAAAAAAAAAAAGAAgAAAAAAAAAAAAHAAEAAAAAAAAAAAAHAAIAAAAAAAAAAAAHAAMAAAAAAAAAAAAHAAQAAAAAAAAAAAAHAAUAAAAAAAAAAAAHAAYAAAAAAAAAAAAHAAcAAAAAAAAAAAAHAAgAAAAAAAAAAAAIAAEAAAAAAAAAAAAIAAIAAAAAAAAAAAAIAAMAAAAAAAAAAAAIAAQAAAAAAAAAAAAIAAUAAAAAAAAAAAAIAAYAAAAAAAAAAAAIAAcAAAAAAAAAAAAIAAgAAAAAAAAAAAAJAAEAAAAAAAAAAAAJAAIAAAAAAAAAAAAJAAMAAAAAAAAAAAAJAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAJAAYAAAAAAAAAAAAJAAcAAAAAAAAAAAAJAAgAAAAAAAAAAAAKAAEAAAAAAAAAAAAKAAIAAAAAAAAAAAAKAAMAAAAAAAAAAAAKAAQAAAAAAAAAAAAKAAUAAAAAAAAAAAAKAAYAAAAAAAAAAAAKAAcAAAAAAAAAAAAKAAgAAAAAAAAAAAALAAEAAAAAAAAAAAALAAIAAAAAAAAAAAALAAMAAAAAAAAAAAALAAQAAAAAAAAAAAALAAUAAAAAAAAAAAALAAYAAAAAAAAAAAALAAcAAAAAAAAAAAALAAgAAAAAAAAAAAAMAAEAAAAAAAAAAAAMAAIAAAAAAAAAAAAMAAMAAAAAAAAAAAAMAAQAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAYAAAAAAAAAAAAMAAcAAAAAAAAAAAAMAAgAAAAAAAAAAAANAAEAAAAAAAAAAAANAAIAAAAAAAAAAAANAAMAAAAAAAAAAAANAAQAAAAAAAAAAAANAAUAAAAAAAAAAAANAAYAAAAAAAAAAAANAAcAAAAAAAAAAAANAAgAAAAAAAAAAAAOAAEAAAAAAAAAAAAOAAIAAAAAAAAAAAAOAAMAAAAAAAAAAAAOAAQAAAAAAAAAAAAOAAUAAAAAAAAAAAAOAAYAAAAAAAAAAAAOAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAPAAEAAAAAAAAAAAAPAAIAAAAAAAAAAAAPAAMAAAAAAAAAAAAPAAQAAAAAAAAAAAAPAAUAAAAAAAAAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAPAAgAAAAAAAAAAAAQAAEAAAAAAAAAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAAAAAAQAAQAAAAAAAAAAAAQAAUAAAAAAAAAAAAQAAYAAAAAAAAAAAAQAAcAAAAAAAAAAAAQAAgAAAAAAAAAAAASAAAAAAAAAAAAAAASAAEAAAAAAAAAAAASAAIAAAAAAAAAAAASAAMAAAAAAAAAAAASAAQAAAAAAAAAAAASAAUAAAAAAAAAAAASAAYAAAAAAAAAAAASAAcAAAAAAAAAAAASAAgAAAAAAAAAAAASAAkAAAAAAAAAAAA=") 85 71 tile_set = SubResource("TileSet_tbgi4") 86 72 metadata/_edit_lock_ = true 87 73 ··· 93 79 z_index = 1 94 80 position = Vector2(531, 221) 95 81 96 - [node name="Coins" type="Label" parent="."] 97 - offset_right = 192.0 98 - offset_bottom = 100.0 82 + [node name="CanvasLayer" type="CanvasLayer" parent="."] 83 + 84 + [node name="PanelContainer" type="PanelContainer" parent="CanvasLayer"] 85 + anchors_preset = 1 86 + anchor_left = 1.0 87 + anchor_right = 1.0 88 + offset_left = -63.0 89 + offset_right = 1.0 90 + offset_bottom = 34.0 91 + grow_horizontal = 0 92 + 93 + [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/PanelContainer"] 94 + layout_mode = 2 95 + 96 + [node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/PanelContainer/VBoxContainer"] 97 + layout_mode = 2 98 + 99 + [node name="Coins" type="Label" parent="CanvasLayer/PanelContainer/VBoxContainer/HBoxContainer"] 100 + layout_mode = 2 99 101 theme_override_font_sizes/font_size = 24 100 - text = "Coins: 0" 102 + text = "0" 101 103 102 - [node name="Dishes" type="Label" parent="."] 103 - offset_left = 1051.0 104 - offset_top = -1.0 105 - offset_right = 1154.0 106 - offset_bottom = 33.0 107 - theme_override_font_sizes/font_size = 24 108 - text = "Dishes: 0" 104 + [node name="CoinIcon" type="TextureRect" parent="CanvasLayer/PanelContainer/VBoxContainer/HBoxContainer"] 105 + layout_mode = 2 106 + size_flags_horizontal = 3 107 + texture = ExtResource("7_tipki") 108 + expand_mode = 1 109 + stretch_mode = 4
+22 -10
scripts/world.gd
··· 2 2 class_name World 3 3 4 4 const width = 18 5 - const height = 11 5 + const height = 10 6 6 const TILE_SIZE = 64 7 7 8 8 @onready var tilemap: TileMapLayer = $Appliances 9 9 var items: Array[ItemEntity] = [] 10 10 11 + class ActiveDish: 12 + var dish: Dish 13 + var node: Node 14 + 11 15 var item_queue: Array[Item] = [] 12 - var dishes: Array[Dish] = [] 16 + var dishes: Array[ActiveDish] = [] 13 17 @export var possible_dishes: Array[Dish] 14 18 15 19 const DISH_TIMEOUT = 30 ··· 17 21 18 22 enum Direction { None, Left, Up, Right, Down } 19 23 20 - func _ready(): 24 + @onready var ui_vertical = $CanvasLayer/PanelContainer/VBoxContainer 25 + @onready var coins_label: Label = ui_vertical.get_node("HBoxContainer/Coins") 26 + 27 + func _ready(): 21 28 for i in range(width * height): 22 29 items.append(null) 23 30 24 31 var item_entity = preload("res://scenes/item_entity.tscn") 32 + var dish_indicator = preload("res://scenes/dish_indicator.tscn") 25 33 var coins = 0 26 34 27 35 func _physics_process(delta): ··· 36 44 if !dishes.is_empty(): 37 45 for i in range(dishes.size()): 38 46 var dish = dishes[i] 39 - if items[0] != null and items[0].item == dish.required_item: 47 + if items[0] != null and items[0].item == dish.dish.required_item: 40 48 var entity = items[0] 41 49 remove_item(entity.position) 42 50 entity.queue_free() 43 - coins += dish.cost 44 - $Coins.text = "Coins: " + str(coins) 51 + dish.node.queue_free() 52 + coins += dish.dish.cost 53 + coins_label.text = str(coins) 45 54 dishes.remove_at(i) 46 - $Dishes.text = "Dishes: " + str(dishes.size()) 47 55 break 48 56 49 57 time_until_next_dish -= delta 50 58 if time_until_next_dish <= 0: 51 - var dish: Dish = possible_dishes.pick_random() 52 - item_queue.append_array(dish.ingredients) 59 + var dish: ActiveDish = ActiveDish.new() 60 + dish.dish = possible_dishes.pick_random() 61 + var indicator = dish_indicator.instantiate() 62 + indicator.get_node("TextureRect").texture = dish.dish.required_item.texture 63 + dish.node = indicator 64 + ui_vertical.add_child(indicator) 65 + item_queue.append_array(dish.dish.ingredients) 53 66 dishes.append(dish) 54 - $Dishes.text = "Dishes: " + str(dishes.size()) 55 67 time_until_next_dish = DISH_TIMEOUT 56 68 57 69 func tile_data(position: Vector2) -> TileData: