From 5f8bbd297b52ae6526317074b8881e419d3887bf Mon Sep 17 00:00:00 2001 From: potatoxel Date: Fri, 18 Nov 2022 21:16:26 +0300 Subject: [PATCH] stocks ui done --- scenes/game/country.gd | 1 + scenes/game/game.gd | 64 ++++++++++++++++++++++++++++++++++++++++-- scenes/game/game.tscn | 51 +++++++++++++++++++++++++++------ scenes/game/player.gd | 6 +++- 4 files changed, 111 insertions(+), 11 deletions(-) diff --git a/scenes/game/country.gd b/scenes/game/country.gd index e8db60b..8431f05 100644 --- a/scenes/game/country.gd +++ b/scenes/game/country.gd @@ -6,6 +6,7 @@ var name var color var money = 8 var stock_price = 1 +var total_stocks = 0 var tile_positions var armies = [] var boats = [] diff --git a/scenes/game/game.gd b/scenes/game/game.gd index 5d857e5..d12d71c 100644 --- a/scenes/game/game.gd +++ b/scenes/game/game.gd @@ -21,11 +21,15 @@ var player_count = 3 var button_selected = null var mouse_click_mode = null +var stocks_ui = [] + + func _ready(): randomize() _setup_players() _setup_countries() _setup_turns() + _setup_stock_ui() turn = turns[turn_id] _on_EndTurnButton_pressed() @@ -73,6 +77,58 @@ func _setup_turns(): object = country }) +func _setup_stock_ui(): + stocks_ui.append({}) + for country in countries: + if country.id == 0: continue + var name_lbl = Label.new() + name_lbl.text = country.name + var stock_price_lbl = Label.new() + stock_price_lbl.text = str(country.stock_price) + var stock_lbl = Label.new() + stock_lbl.text = "??" + var buy_btn = Button.new() + buy_btn.text = "Buy" + var sell_btn = Button.new() + sell_btn.text = "Sell" + + stocks_ui.append({ + stock_price_lbl = stock_price_lbl, + stock_lbl = stock_lbl + }) + + buy_btn.connect("pressed", self, "_on_stock_buy_button_pressed", [country]) + sell_btn.connect("pressed", self, "_on_stock_sell_button_pressed", [country]) + + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(name_lbl) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(stock_price_lbl) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(stock_lbl) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(buy_btn) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(sell_btn) + +func _refresh_stock_ui(): + for country in countries: + if country.id == 0: continue + var ui = stocks_ui[country.id] + ui.stock_price_lbl.text = str(country.stock_price) + ui.stock_lbl.text = str(turn.object.stocks[country.id]) + +func _on_stock_buy_button_pressed(country): + if turn.object.money >= country.stock_price and country.total_stocks < 7: + country.total_stocks += 1 + turn.object.stocks[country.id] += 1 + turn.object.money -= country.stock_price + country.money += country.stock_price + _refresh_stock_ui() + +func _on_stock_sell_button_pressed(country): + if country.money >= country.stock_price and turn.object.stocks[country.id] > 0: + country.total_stocks -= 1 + turn.object.stocks[country.id] -= 1 + turn.object.money += country.stock_price + country.money -= country.stock_price + _refresh_stock_ui() + func _process(delta): $CanvasLayer/Control/VBoxContainer/CountryMoneyLabel.text = str(turns[turn_id].object.money) + "$" if turn.layer == "country": @@ -81,14 +137,16 @@ func _process(delta): $CanvasLayer/Control/VBoxContainer/BuyFactory.visible = turn.layer == "country" $CanvasLayer/Control/VBoxContainer/BuyArmy.visible = turn.layer == "country" $CanvasLayer/Control/VBoxContainer/BuyBoat.visible = turn.layer == "country" - + + + + func _on_EndTurnButton_pressed(): if turn.layer == "country": for army in turn.object.armies: army.entity.current_turn_movable = true for boat in turn.object.boats: boat.entity.current_turn_movable = true - turn.object.compute_balance() $Grid.selected_thing = null @@ -96,6 +154,8 @@ func _on_EndTurnButton_pressed(): if turn_id == len(turns): turn_id = 0 turn = turns[turn_id] + if turn.layer == "player": + _refresh_stock_ui() $CanvasLayer/Control/VBoxContainer/TurnLabel.text = turn.object.name + "'s turn." diff --git a/scenes/game/game.tscn b/scenes/game/game.tscn index f454bc6..88dcd5f 100644 --- a/scenes/game/game.tscn +++ b/scenes/game/game.tscn @@ -22,50 +22,85 @@ mouse_filter = 2 [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control"] anchor_left = 1.0 anchor_right = 1.0 -margin_left = -176.0 -margin_bottom = 135.0 +margin_left = -267.0 +margin_bottom = 140.0 [node name="TurnLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 14.0 text = "TURN: ####" align = 2 [node name="CountryMoneyLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 18.0 -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 32.0 text = "?????$" align = 2 [node name="StockPriceLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 36.0 -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 50.0 text = "STOCK PRICE: ?????$" align = 2 [node name="BuyFactory" type="Button" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 54.0 -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 74.0 toggle_mode = true text = "Buy factory" [node name="BuyArmy" type="Button" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 78.0 -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 98.0 toggle_mode = true text = "Buy army" [node name="BuyBoat" type="Button" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 102.0 -margin_right = 176.0 +margin_right = 267.0 margin_bottom = 122.0 toggle_mode = true text = "Buy boat" +[node name="Stocks" type="GridContainer" parent="CanvasLayer/Control/VBoxContainer"] +margin_top = 126.0 +margin_right = 267.0 +margin_bottom = 140.0 +columns = 5 + +[node name="Label" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_right = 38.0 +margin_bottom = 14.0 +text = "Name" + +[node name="Label2" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 42.0 +margin_right = 112.0 +margin_bottom = 14.0 +text = "Stock Price" + +[node name="Label3" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 116.0 +margin_right = 157.0 +margin_bottom = 14.0 +text = "Stocks" + +[node name="Label4" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 161.0 +margin_right = 185.0 +margin_bottom = 14.0 +text = "Buy" + +[node name="Label5" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 189.0 +margin_right = 212.0 +margin_bottom = 14.0 +text = "Sell" + [node name="EndTurnButton" type="Button" parent="CanvasLayer/Control"] anchor_left = 1.0 anchor_top = 1.0 diff --git a/scenes/game/player.gd b/scenes/game/player.gd index 646c848..18af06a 100644 --- a/scenes/game/player.gd +++ b/scenes/game/player.gd @@ -3,8 +3,12 @@ extends Reference var id var name -var money = 8 +var money = 4 var stocks = [] #Array of numbers stock[country_id] = stock_amount +func _init(): + for i in 8: #Country count + stocks.append(0) + func compute_balance(): pass