diff --git a/Systems/Game/ChessGame.gd b/Systems/Game/ChessGame.gd index a8604fc..35c6654 100644 --- a/Systems/Game/ChessGame.gd +++ b/Systems/Game/ChessGame.gd @@ -46,6 +46,7 @@ var is_initialized: bool = false @onready var turnIndicator: ColorRect = $TurnIndicator @onready var p1String: RichTextLabel = $Player1Points @onready var p2String: RichTextLabel = $Player2Points +@onready var gold: int = 1000 @onready var deckManager: DeckManager @onready var tileManager: TileManager @onready var cameraController: CameraController diff --git a/Systems/Game/Map/MapGenerator.gd b/Systems/Game/Map/MapGenerator.gd index 1207c5a..8e009bd 100644 --- a/Systems/Game/Map/MapGenerator.gd +++ b/Systems/Game/Map/MapGenerator.gd @@ -1,15 +1,7 @@ extends RefCounted class_name ChessMapGenerator -# Room type enum -enum RoomType { - STARTING, - NORMAL, - BOSS, - FINAL, - SHOP, - EVENT -} + var min_levels = 10 var max_levels = 20 @@ -42,19 +34,25 @@ func generate_map(): var start_node = { "id": _get_next_id(), - "type": RoomType.STARTING, + "type": Utils.RoomType.STARTING, "level": 0, "position": Vector2(3, 0), + "metadata": { + "is_escape": false, + }, "elo": starting_elo } nodes.append(start_node) - # Create final boss node (always at position 3, highest level) + # Create final boss node var final_node = { "id": _get_next_id(), - "type": RoomType.FINAL, + "type": Utils.RoomType.FINAL, "level": num_levels - 1, "position": Vector2(3, num_levels - 1), + "metadata": { + "is_escape": true, + }, "elo": final_elo } nodes.append(final_node) @@ -79,8 +77,10 @@ func generate_map(): "type": node_type, "level": level, "position": Vector2(available_positions[i], level), - "elo": level_elo + "elo": level_elo, + "metadata": {} } + node = generate_node_data(node) nodes.append(node) level_nodes.append(node) @@ -162,7 +162,19 @@ func generate_map(): if from_valid and to_valid: valid_connections.append(conn) - + var index = 0 + for valid_node in valid_nodes: + var isLeaf = true; + for connection in valid_connections: + # if theres outgoing connection we arent at a dead end + # dont change final node colour + if connection.from == valid_node.id || valid_node.id == 1: + isLeaf = false + break; + valid_node.metadata.is_escape = isLeaf + valid_nodes[index] = valid_node; + index += 1 + return { "nodes": valid_nodes, "connections": valid_connections, @@ -180,13 +192,13 @@ func _get_random_room_type(level, total_levels): var roll = _rng.randf() if roll < boss_chance: - return RoomType.BOSS + return Utils.RoomType.BOSS elif roll < boss_chance + shop_chance: - return RoomType.SHOP + return Utils.RoomType.SHOP elif roll < boss_chance + shop_chance + event_chance: - return RoomType.EVENT + return Utils.RoomType.EVENT else: - return RoomType.NORMAL + return Utils.RoomType.NORMAL func _is_node_connected_to(node_id, connections): for conn in connections: @@ -217,3 +229,78 @@ func get_weighted_node_count(min_count, max_count): node_count = max_count return node_count + +func generate_node_data(node): + var data = { + "id": node.id, + "type": node.type, + "level": node.level, + "position": node.position, + "elo": node.elo, + "metadata": node.metadata + } + + match data.type: + Utils.RoomType.STARTING: + data.metadata = generate_starting_data(data, ) + Utils.RoomType.NORMAL: + data.metadata = generate_chess_data(data) + Utils.RoomType.BOSS: + data.metadata = {} + Utils.RoomType.FINAL: + data.metadata = { "is_escape": true} + Utils.RoomType.SHOP: + data.metadata = generate_shop_data(data) + Utils.RoomType.EVENT: + data.metadata = {} + _: + data.metadata = {} + return data + +func generate_shop_data(node): + return { + "is_escape": node.metadata.is_escape if node.metadata.has("is_escape") else false, + "gold": 1000, + "cards": generate_shop_cards(), + } +func generate_shop_cards(): + var shop_cards = [] + + var all_cards = [] + var card_classes = [ + HopscotchCard, + FieryCapeCard, + FieryTrailCard, + ExplosiveBootsCard, + DoubleTimeCard, + DrunkDrivingCard, + SupernovaCard + ] + + for card_class in card_classes: + var card = card_class.new() + all_cards.append(card) + + all_cards.shuffle() + + var num_shop_cards = min(randi_range(5, 7), all_cards.size()) + + for i in range(num_shop_cards): + shop_cards.append(all_cards[i % card_classes.size()]) + + return shop_cards + + +func generate_starting_data(node): + return { + "fen": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + "elo": node.elo, + } + + +func generate_chess_data(node): + return { + "is_escape": node.metadata.is_escape if node.metadata.has("is_escape") else false, + "fen": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", + "elo": node.elo, + } diff --git a/Systems/Game/Map/MapScreen.gd b/Systems/Game/Map/MapScreen.gd index 268d492..9c96590 100644 --- a/Systems/Game/Map/MapScreen.gd +++ b/Systems/Game/Map/MapScreen.gd @@ -6,14 +6,6 @@ signal node_selected(node_data) const MapGenerator = preload("res://Systems/Game/Map/MapGenerator.gd") # Room type constants -enum RoomType { - STARTING, - NORMAL, - BOSS, - FINAL, - SHOP, - EVENT -} # Node config const NODE_SIZE = Vector2(60, 60) @@ -28,21 +20,21 @@ const NODE_COLOR = Color(0.1, 0.1, 0.1, 0.5) const NODE_LEAF = Color(0.2, 0.6, 0.2) # Node symbols and colors const NODE_SYMBOLS = { - RoomType.STARTING: "O", # Circle - RoomType.NORMAL: "■", # Square - RoomType.BOSS: "★", # Star - RoomType.FINAL: "✱", # Burst - RoomType.SHOP: "₵", # Star - RoomType.EVENT: "?" # Burst + Utils.RoomType.STARTING: "O", # Circle + Utils.RoomType.NORMAL: "■", # Square + Utils.RoomType.BOSS: "★", # Star + Utils.RoomType.FINAL: "✱", # Burst + Utils.RoomType.SHOP: "₵", # Star + Utils.RoomType.EVENT: "?" # Burst } const NODE_COLORS = { - RoomType.STARTING: Color(1, 1, 1), # White - RoomType.NORMAL: Color(0.2, 0.2, 0.2), # Dark gray - RoomType.BOSS: Color(0.9, 0.2, 0.2), # Red - RoomType.FINAL: Color(0.9, 0.9, 0.2), # Yellow - RoomType.SHOP: Color(0.2, 0.7, 0.9), # Yellow - RoomType.EVENT: Color(0.8, 0.4, 0.9) # Yellow + Utils.RoomType.STARTING: Color(1, 1, 1), # White + Utils.RoomType.NORMAL: Color(0.2, 0.2, 0.2), # Dark gray + Utils.RoomType.BOSS: Color(0.9, 0.2, 0.2), # Red + Utils.RoomType.FINAL: Color(0.9, 0.9, 0.2), # Yellow + Utils.RoomType.SHOP: Color(0.2, 0.7, 0.9), # Yellow + Utils.RoomType.EVENT: Color(0.8, 0.4, 0.9) # Yellow } var map_nodes = [] @@ -57,6 +49,8 @@ const SCROLL_PADDING_BOTTOM = 80 const SCROLL_PADDING_LEFT = 60 const SCROLL_PADDING_RIGHT = 100 +var node_popup_scene = preload("res://node_map_popup.tscn") +var selected_node_panel: NodePopup = null @onready var map_container = $MapScrollContainer/MapContainer @onready var back_button = $BackButton @@ -72,17 +66,23 @@ func _ready(): create_legend() generate_map() display_map() + selected_node_panel = node_popup_scene.instantiate() + selected_node_panel.visible = false + add_child(selected_node_panel) + + if selected_node_panel: + selected_node_panel.pressed.connect(on_node_panel_pressed) func create_legend(): # Create legend for room types var legend_items = [ - {"type": RoomType.BOSS, "text": "Boss"}, - {"type": RoomType.STARTING, "text": "Starting Room"}, - {"type": RoomType.FINAL, "text": "Final Boss"}, - {"type": RoomType.NORMAL, "text": "Normal Room"}, - {"type": RoomType.SHOP, "text": "Shop"}, - {"type": RoomType.EVENT, "text": "Event"}, - {"type": RoomType.NORMAL, "text": "Escape Room"} + {"type": Utils.RoomType.BOSS, "text": "Boss"}, + {"type": Utils.RoomType.STARTING, "text": "Starting Room"}, + {"type": Utils.RoomType.FINAL, "text": "Final Boss"}, + {"type": Utils.RoomType.NORMAL, "text": "Normal Room"}, + {"type": Utils.RoomType.SHOP, "text": "Shop"}, + {"type": Utils.RoomType.EVENT, "text": "Event"}, + {"type": Utils.RoomType.NORMAL, "text": "Escape Room"} ] for item in legend_items: @@ -112,7 +112,7 @@ func generate_map(): # Create starting node # var start_node = { # "id": 0, - # "type": RoomType.STARTING, + # "type": Utils.RoomType.STARTING, # "level": 0, # "position": Vector2(3, 4) # Column, Row # } @@ -122,7 +122,7 @@ func generate_map(): # # Create final boss node # var final_node = { # "id": 1, - # "type": RoomType.FINAL, + # "type": Utils.RoomType.FINAL, # "level": levels - 1, # "position": Vector2(3, 0) # Column, Row # } @@ -133,7 +133,8 @@ func generate_map(): node_data.type, node_data.level, node_data.position, - node_data.elo + node_data.elo, + node_data.metadata ) # Store elo rating if needed @@ -148,13 +149,14 @@ func generate_map(): add_connection(connection.from, connection.to) -func add_node(id, type, level, position, elo): +func add_node(id, type, level, position, elo, metadata): map_nodes.append({ "id": id, "type": type, "level": level, "position": position, - "elo": elo + "elo": elo, + "metadata": metadata, }) func add_connection(from_id, to_id): @@ -278,7 +280,6 @@ func draw_node(node_data): # Connect signal button.pressed.connect(func(): _on_node_pressed(node_data)) - # Add to map map_container.add_child(button) node_buttons[node_data.id] = button @@ -287,6 +288,23 @@ func draw_node(node_data): if current_node and node_data.id == current_node.id: highlight_current_node(button) +func on_node_panel_pressed(id): + # print("on_node_panel_pressed ", id ) + if id != null: + + current_node = null + for node in map_nodes: + if node.id == id: + current_node = node + break + + traversed_node(current_node) + # Refresh display to update highlights + display_map() + + # Emit signal with selected node data + emit_signal("node_selected", current_node) + selected_node_panel.visible = false; func draw_connection(from_node, to_node): var line = Line2D.new() line.width = LINE_WIDTH @@ -319,14 +337,22 @@ func highlight_current_node(button): func _on_node_pressed(node_data): if is_node_accessible(node_data) || is_node_path_accessible(node_data): - # Update current node - current_node = node_data - traversed_node(node_data) - # Refresh display to update highlights - display_map() + # Get node type description + var node_name = get_node_type_name(node_data.type) + var node_desc = get_node_description(node_data) - # Emit signal with selected node data - emit_signal("node_selected", node_data) + # Position the popup near the clicked node + var button_pos = node_buttons[node_data.id].global_position + var popup_pos = button_pos + Vector2(NODE_SIZE.x/2, NODE_SIZE.y/2) + selected_node_panel.global_position = popup_pos + + # Set popup data and make it visible + selected_node_panel.set_card(node_data.id, node_name, node_desc) + if traversed_map.has(node_data.id): + selected_node_panel._disable_enter() + else: + selected_node_panel._enable_enter() + selected_node_panel.visible = true else: print("Node not accessible from current position", node_data) @@ -335,7 +361,7 @@ func traversed_node(node_data): func is_node_path_accessible(node_data): if current_node == null: - return node_data.type == RoomType.STARTING + return node_data.type == Utils.RoomType.STARTING # Check if there's a direct connection from current node to the path travelled for id in traversed_map: @@ -348,7 +374,7 @@ func is_node_path_accessible(node_data): func is_node_accessible(node_data): if current_node == null: - return node_data.type == RoomType.STARTING + return node_data.type == Utils.RoomType.STARTING # Check if there's a direct connection from current node to target node for connection in map_connections: @@ -432,3 +458,54 @@ func quadratic_bezier(p0: Vector2, p1: Vector2, p2: Vector2, t: float) -> Vector var q1 = p1.lerp(p2, t) return q0.lerp(q1, t) + + + + +func get_node_type_name(type): + match type: + Utils.RoomType.STARTING: + return "Starting Room" + Utils.RoomType.NORMAL: + return "Chess Match" + Utils.RoomType.BOSS: + return "Boss Battle" + Utils.RoomType.FINAL: + return "Final Boss" + Utils.RoomType.SHOP: + return "Card Shop" + Utils.RoomType.EVENT: + return "Random Event" + _: + return "Unknown Room" + + +func get_node_description(node_data): + var desc = "" + match node_data.type: + Utils.RoomType.STARTING: + desc = "Begin the dungeon" + Utils.RoomType.NORMAL: + desc = "A chess match \n\n ELO: " + str(node_data.elo) + Utils.RoomType.BOSS: + desc = "Maybe add some Boss lore? \n\n ELO: " + str(node_data.elo) + Utils.RoomType.FINAL: + desc = "BHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA" + Utils.RoomType.SHOP: + desc = "Purchase new cards" + Utils.RoomType.EVENT: + desc = "A random event from pawn zerg to slot machine" + _: + desc = "An unknown room type." + + # Add additional info if this is a leaf node (dead end) + var isLeaf = true + for connection in map_connections: + if connection.from == node_data.id || node_data.id == 1: + isLeaf = false + break + + if isLeaf && node_data.type != Utils.RoomType.FINAL: + desc += "\n\nWarning: This is an escape node" + + return desc diff --git a/Systems/Game/Map/NodePopup.gd b/Systems/Game/Map/NodePopup.gd new file mode 100644 index 0000000..5edf7ef --- /dev/null +++ b/Systems/Game/Map/NodePopup.gd @@ -0,0 +1,132 @@ +# Add or modify this in your CardVisual.gd script + +extends Control +class_name NodePopup + +signal pressed(id) +# Node references +@onready var card_container = $CardContainer +@onready var name_label = $CardContainer/VBoxContainer/NameLabel +@onready var desc_label = $CardContainer/VBoxContainer/DescriptionLabel +@onready var enter_btn = $CardContainer/VBoxContainer/HBoxContainer/EnterButton +@onready var close_btn = $CardContainer/VBoxContainer/HBoxContainer/CloseButton +var node_id = null; +var animation_tween + + +func _ready(): + + mouse_filter = Control.MOUSE_FILTER_STOP + gui_input.connect(_on_gui_input) + if card_container: + card_container.mouse_filter = Control.MOUSE_FILTER_PASS + for child in get_children(): + if child is Control: + child.mouse_filter = Control.MOUSE_FILTER_PASS + + if enter_btn: + enter_btn.connect("pressed", Callable(self, "_on_enter_button_pressed")) + + if close_btn: + close_btn.connect("pressed", Callable(self, "_on_close_button_pressed")) + card_container.visible = false + # Setup initial scale for animation + card_container.scale = Vector2(0.8, 0.8) + set_process_input(true) + + +func set_card(id:int, name: String, desc: String): + if id == null: + card_container.visible = false + return + + node_id = id + card_container.visible = true + + name_label.text = name + desc_label.text = desc + + # Animate popup appearance + if animation_tween: + animation_tween.kill() + + animation_tween = create_tween() + animation_tween.tween_property(card_container, "scale", Vector2(1.0, 1.0), 0.2).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) + + # Make sure popup is fully visible on screen + call_deferred("ensure_on_screen") + +func ensure_on_screen(): + await get_tree().process_frame + # Get viewport size + var viewport_size = get_viewport_rect().size + # Get popup global position and size + var popup_rect = Rect2(global_position, card_container.size) + + # Adjust if off-screen + if popup_rect.position.x < 0: + global_position.x = 10 + elif popup_rect.position.x + popup_rect.size.x > viewport_size.x: + global_position.x = viewport_size.x - popup_rect.size.x - 10 + + if popup_rect.position.y < 0: + global_position.y = 10 + elif popup_rect.position.y + popup_rect.size.y > viewport_size.y: + global_position.y = viewport_size.y - popup_rect.size.y - 10 + + +func _on_gui_input(event): + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + var tween = create_tween() + tween.tween_property(card_container, "scale", Vector2(1.05, 1.05), 0.1) + tween.tween_property(card_container, "scale", Vector2(1.0, 1.0), 0.1) + +# Handle dragging the popup +var dragging = false +var drag_start_pos = Vector2() + +func _input(event): + if not visible or not card_container.visible: + return + + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_LEFT: + if event.pressed: + # Check if mouse is over the card container + var local_mouse_pos = get_local_mouse_position() + if card_container.get_rect().has_point(local_mouse_pos): + dragging = true + drag_start_pos = local_mouse_pos - card_container.position + else: + dragging = false + + elif event is InputEventMouseMotion and dragging: + card_container.position = get_local_mouse_position() - drag_start_pos +func _on_enter_button_pressed(): + # Add a confirmation animation before closing + var tween = create_tween() + tween.tween_property(card_container, "scale", Vector2(1.1, 1.1), 0.1) + tween.tween_property(card_container, "scale", Vector2(0.8, 0.8), 0.2) + tween.tween_callback(func(): _confirm_selection()) + +func _disable_enter(): + enter_btn.disabled = true; +func _enable_enter(): + enter_btn.disabled = false; + +func _confirm_selection(): + emit_signal("pressed", node_id) + card_container.visible = false + visible = false + +func _on_close_button_pressed(): + # Add a closing animation + var tween = create_tween() + tween.tween_property(card_container, "scale", Vector2(0.8, 0.8), 0.2) + tween.tween_callback(func(): _cancel_selection()) + +func _cancel_selection(): + emit_signal("pressed", null) + card_container.visible = false + visible = false \ No newline at end of file diff --git a/Systems/Game/Map/NodePopup.gd.uid b/Systems/Game/Map/NodePopup.gd.uid new file mode 100644 index 0000000..c2f4fb1 --- /dev/null +++ b/Systems/Game/Map/NodePopup.gd.uid @@ -0,0 +1 @@ +uid://tsgxcwb1u8uc diff --git a/Systems/Game/Menu/MenuContainer.gd b/Systems/Game/Menu/MenuContainer.gd index f7d7351..450a554 100644 --- a/Systems/Game/Menu/MenuContainer.gd +++ b/Systems/Game/Menu/MenuContainer.gd @@ -21,8 +21,9 @@ signal card_purchased(card, price) @onready var mapScreen = get_node("/root/Board/MapScreen") @onready var stateMachine = get_node("/root/Board/StateMachine") @onready var shopScreen = get_node("/root/Board/ShopScreen") - -var player_gold = 1000 +# back up if game isn't loaded yet? +var player_gold = 10 +var back_to_map = false func _ready(): # Connect menu option signals @@ -121,26 +122,42 @@ func _on_shop_open_requested(options): if options == null: options = {} - options["gold"] = player_gold + + var game = get_node_or_null("/root/Board") as ChessGame + + if "gold" in options: + if game and "gold" in game: + options["gold"] = game.gold + else: + options["gold"] = player_gold if shopScreen: shopScreen.visible = true shopScreen.initialize(options) emit_signal("shop_open_requested", options) func _on_shop_back_pressed(): + var game = get_node_or_null("/root/Board") as ChessGame if shopScreen: shopScreen.visible = false - player_gold = shopScreen.player_gold + if game and "gold" in game: + game.gold = shopScreen.player_gold + else: + player_gold = shopScreen.player_gold # Show game menu again - if gameMenuScreen: + if not back_to_map and gameMenuScreen: gameMenuScreen.visible = true - + if back_to_map: + mapScreen.visible = true # Emit signal that shop was closed emit_signal("shop_closed") func _on_shop_card_purchased(card, price): - player_gold -= price + var game = get_node_or_null("/root/Board") as ChessGame + if game and "gold" in game: + game.gold -= price + else: + player_gold -= price # Forward the signal emit_signal("card_purchased", card, price) @@ -168,7 +185,10 @@ func _on_deckmanager_open_requested(options): func _on_deck_manager_back_pressed(): # Return to game menu screen deckManagerScreen.visible = false - gameMenuScreen.visible = true + if not back_to_map: + gameMenuScreen.visible = true + else: + mapScreen.visible = true func _on_map_open_requested(options): @@ -190,6 +210,10 @@ func _on_map_back_pressed(): # Map node selection func _on_map_node_selected(node_data): print("Selected map node: ", node_data) + if node_data.type == Utils.RoomType.SHOP: + back_to_map = true + _on_shop_open_requested(node_data.metadata) + # Implement logic for map node selection # For example, start a battle based on the node type diff --git a/Systems/Game/Shop/ShopScreen.gd b/Systems/Game/Shop/ShopScreen.gd index b092604..d96a3ef 100644 --- a/Systems/Game/Shop/ShopScreen.gd +++ b/Systems/Game/Shop/ShopScreen.gd @@ -179,7 +179,6 @@ func select_card(index): for i in range(card_carousel.get_child_count()): var card_visual = card_carousel.get_child(i) - print(i ," vi ", visual_index, " Ind ", index, " cp ", cards_per_page) card_visual.set_selected(i == visual_index) if card_preview and selected_card: diff --git a/Utils/Utils.gd b/Utils/Utils.gd index 5d77a1c..d5ccc95 100644 --- a/Utils/Utils.gd +++ b/Utils/Utils.gd @@ -56,4 +56,13 @@ static var LIGHT_CELL = Color(0.5, 0.5, 0.5, 1) static var DARK_CELL = Color(0.2, 0.2, 0.2, 1) static var GREEN_CELL = Color(0.36, 0.62, 0.43, 1) static var WALL_CELL = Color(0.59, 0.29, 0.0, 1) # Brown (#964B00) -static var DOUBLE_WALL = Color(0.36, 0.17, 0.0, 1) # Dark Brown (#5C2B00) \ No newline at end of file +static var DOUBLE_WALL = Color(0.36, 0.17, 0.0, 1) # Dark Brown (#5C2B00) + +enum RoomType { + STARTING, + NORMAL, + BOSS, + FINAL, + SHOP, + EVENT +} diff --git a/board.tscn b/board.tscn index cd6ba2f..bface88 100644 --- a/board.tscn +++ b/board.tscn @@ -396,6 +396,7 @@ visible = false layout_mode = 1 [node name="ShopScreen" parent="." instance=ExtResource("30_5rfmq")] +visible = false layout_mode = 1 [node name="MapContainer" type="Control" parent="ShopScreen"] diff --git a/node_map_popup.tscn b/node_map_popup.tscn new file mode 100644 index 0000000..15f3461 --- /dev/null +++ b/node_map_popup.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=3 format=3 uid="uid://b6ldneayg8mqq"] + +[ext_resource type="Script" uid="uid://tsgxcwb1u8uc" path="res://Systems/Game/Map/NodePopup.gd" id="1_5o0ng"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mkr1p"] +bg_color = Color(0.14902, 0.14902, 0.188235, 1) +border_color = Color(1, 0.8, 0, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[node name="NodePopup" type="Control"] +custom_minimum_size = Vector2(150, 250) +layout_mode = 3 +anchors_preset = 0 +size_flags_horizontal = 4 +size_flags_vertical = 4 +script = ExtResource("1_5o0ng") + +[node name="CardContainer" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = -50.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(75, 125) +theme_override_styles/panel = SubResource("StyleBoxFlat_mkr1p") + +[node name="VBoxContainer" type="VBoxContainer" parent="CardContainer"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 10.0 +offset_top = 10.0 +offset_right = -10.0 +offset_bottom = -10.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="NameLabel" type="Label" parent="CardContainer/VBoxContainer"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_font_sizes/font_size = 18 +text = "Node Name" +horizontal_alignment = 1 +autowrap_mode = 3 + +[node name="HSeparator" type="HSeparator" parent="CardContainer/VBoxContainer"] +layout_mode = 2 + +[node name="DescriptionLabel" type="Label" parent="CardContainer/VBoxContainer"] +custom_minimum_size = Vector2(50, 0) +layout_mode = 2 +theme_override_font_sizes/font_size = 11 +text = "SomeDescription for the selected node and can probalby shrink this text" +horizontal_alignment = 1 +autowrap_mode = 2 + +[node name="Spacer" type="Control" parent="CardContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="CardContainer/VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="EnterButton" type="Button" parent="CardContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Enter" + +[node name="VSeparator" type="VSeparator" parent="CardContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 + +[node name="CloseButton" type="Button" parent="CardContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Close +" diff --git a/shop_screen.tscn b/shop_screen.tscn index 8e83f9f..bc7efef 100644 --- a/shop_screen.tscn +++ b/shop_screen.tscn @@ -133,20 +133,3 @@ size_flags_vertical = 4 theme_override_font_sizes/font_size = 18 theme_override_styles/normal = SubResource("StyleBoxFlat_jk2fb") text = "BUY (50 gold)" - -[node name="BottomBar" type="HBoxContainer" parent="."] -visible = false -layout_mode = 1 -anchors_preset = 12 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = -80.0 -offset_bottom = -20.0 -grow_horizontal = 2 -grow_vertical = 0 -alignment = 1 - -[node name="Spacer" type="Control" parent="BottomBar"] -layout_mode = 2 -size_flags_horizontal = 3