From 3cea73b82a4523c84957bcf3281b867499dd3eba Mon Sep 17 00:00:00 2001 From: potatoxel Date: Fri, 18 Nov 2022 22:52:10 +0300 Subject: [PATCH] proposal stock price done --- scenes/game/country.gd | 13 ++++++++ scenes/game/game.gd | 53 +++++++++++++++++++++++++++-- scenes/game/game.tscn | 75 ++++++++++++++++++++++++++++++++++-------- 3 files changed, 125 insertions(+), 16 deletions(-) diff --git a/scenes/game/country.gd b/scenes/game/country.gd index 08259cd..3fd0b88 100644 --- a/scenes/game/country.gd +++ b/scenes/game/country.gd @@ -8,6 +8,8 @@ var money = 8 var stock_price = 1 var total_stocks = 0 var player_stocks = [0,0,0] +var player_acceptance = [false, false, false] +var proposal = 0 var tile_positions var armies = [] var boats = [] @@ -40,3 +42,14 @@ func get_controller_id(): if player_stocks[i] >= 4: return i return -1 + +func process_proposal(): + for i in len(player_acceptance): + var acceptance = player_acceptance[i] + var stocks = player_stocks[i] + if (not acceptance) and stocks > 0: + return false + stock_price += proposal + proposal = 0 + player_acceptance = [false, false, false] + return true diff --git a/scenes/game/game.gd b/scenes/game/game.gd index b8597d5..dbb1c58 100644 --- a/scenes/game/game.gd +++ b/scenes/game/game.gd @@ -91,10 +91,18 @@ func _setup_stock_ui(): buy_btn.text = "Buy" var sell_btn = Button.new() sell_btn.text = "Sell" + var proposal_lbl = Label.new() + proposal_lbl.text = "0$" + var acceptance_btn = Button.new() + acceptance_btn.text = "Accept" + acceptance_btn.toggle_mode = true + acceptance_btn.connect("toggled", self, "_on_acceptance_btn_toggled", [country]) stocks_ui.append({ stock_price_lbl = stock_price_lbl, - stock_lbl = stock_lbl + stock_lbl = stock_lbl, + proposal_lbl = proposal_lbl, + acceptance_btn = acceptance_btn, }) buy_btn.connect("pressed", self, "_on_stock_buy_button_pressed", [country]) @@ -105,6 +113,8 @@ func _setup_stock_ui(): $CanvasLayer/Control/VBoxContainer/Stocks.add_child(stock_lbl) $CanvasLayer/Control/VBoxContainer/Stocks.add_child(buy_btn) $CanvasLayer/Control/VBoxContainer/Stocks.add_child(sell_btn) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(proposal_lbl) + $CanvasLayer/Control/VBoxContainer/Stocks.add_child(acceptance_btn) func _refresh_stock_ui(): for country in countries: @@ -112,6 +122,34 @@ func _refresh_stock_ui(): 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]) + ui.proposal_lbl.text = str(country.proposal) + "$" + ui.acceptance_btn.pressed = country.player_acceptance[turn.object.id] + +func set_proposal_display(cur_btn): + cur_btn.pressed = true + for button in $CanvasLayer/Control/VBoxContainer/CountryProposal.get_children(): + if button is Button and button != cur_btn: + button.pressed = false + +func _on_ProposalMinus1_pressed(): + if turn.object.stock_price > 1: + set_proposal_display($CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalMinus1) + turn.object.proposal = -1 + else: + $CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalMinus1.pressed = false + +func _on_ProposalZero_pressed(): + set_proposal_display($CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalZero) + turn.object.proposal = 0 + +func _on_ProposalPlus1_pressed(): + set_proposal_display($CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalPlus1) + turn.object.proposal = 1 + +func _on_acceptance_btn_toggled(value, country): + country.player_acceptance[turn.object.id] = value + country.process_proposal() + _refresh_stock_ui() func _on_stock_buy_button_pressed(country): if turn.object.money >= country.stock_price and country.total_stocks < 7: @@ -148,7 +186,7 @@ func _process(delta): $CanvasLayer/Control/VBoxContainer/BuyBoat.visible = turn.layer == "country" $CanvasLayer/Control/VBoxContainer/Stocks.visible = turn.layer == "player" $CanvasLayer/Control/VBoxContainer/PayDividends.visible = turn.layer == "country" - + $CanvasLayer/Control/VBoxContainer/CountryProposal.visible = turn.layer == "country" func _on_EndTurnButton_pressed(): @@ -168,9 +206,16 @@ func _on_EndTurnButton_pressed(): _refresh_stock_ui() else: $CanvasLayer/Control/ControllerLabel.text = "Controller: " + (players[turn.object.get_controller_id()].name if turn.object.get_controller_id() >= 0 else "none") + var proposal_btns = [ + $CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalMinus1, + $CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalZero, + $CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalPlus1 + ] + set_proposal_display(proposal_btns[turn.object.proposal + 1]) $CanvasLayer/Control/ControllerLabel.visible = turn.layer == "country" $CanvasLayer/Control/VBoxContainer/TurnLabel.text = turn.object.name + "'s turn." - + + func _on_BuyFactory_pressed(): if button_selected: button_selected.pressed = false @@ -227,3 +272,5 @@ func _input(event): button_selected.pressed = false mouse_click_mode = null + + diff --git a/scenes/game/game.tscn b/scenes/game/game.tscn index 4c92655..4c97084 100644 --- a/scenes/game/game.tscn +++ b/scenes/game/game.tscn @@ -22,61 +22,95 @@ mouse_filter = 2 [node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/Control"] anchor_left = 1.0 anchor_right = 1.0 -margin_left = -267.0 -margin_bottom = 140.0 +margin_left = -373.0 +margin_bottom = 188.0 [node name="TurnLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] -margin_right = 267.0 +margin_right = 373.0 margin_bottom = 14.0 text = "TURN: ####" align = 2 [node name="CountryMoneyLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 18.0 -margin_right = 267.0 +margin_right = 373.0 margin_bottom = 32.0 text = "?????$" align = 2 [node name="StockPriceLabel" type="Label" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 36.0 -margin_right = 267.0 +margin_right = 373.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 = 267.0 +margin_right = 373.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 = 267.0 +margin_right = 373.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 = 267.0 +margin_right = 373.0 margin_bottom = 122.0 toggle_mode = true text = "Buy boat" [node name="PayDividends" type="Button" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 126.0 -margin_right = 267.0 +margin_right = 373.0 margin_bottom = 146.0 text = "Pay dividends" -[node name="Stocks" type="GridContainer" parent="CanvasLayer/Control/VBoxContainer"] +[node name="CountryProposal" type="HBoxContainer" parent="CanvasLayer/Control/VBoxContainer"] margin_top = 150.0 -margin_right = 267.0 -margin_bottom = 164.0 -columns = 5 +margin_right = 373.0 +margin_bottom = 170.0 + +[node name="Label" type="Label" parent="CanvasLayer/Control/VBoxContainer/CountryProposal"] +margin_top = 3.0 +margin_right = 288.0 +margin_bottom = 17.0 +size_flags_horizontal = 3 +text = "Current Proposal: " + +[node name="ProposalMinus1" type="Button" parent="CanvasLayer/Control/VBoxContainer/CountryProposal"] +margin_left = 292.0 +margin_right = 317.0 +margin_bottom = 20.0 +toggle_mode = true +text = "-1" + +[node name="ProposalZero" type="Button" parent="CanvasLayer/Control/VBoxContainer/CountryProposal"] +margin_left = 321.0 +margin_right = 341.0 +margin_bottom = 20.0 +toggle_mode = true +pressed = true +text = "0" + +[node name="ProposalPlus1" type="Button" parent="CanvasLayer/Control/VBoxContainer/CountryProposal"] +margin_left = 345.0 +margin_right = 373.0 +margin_bottom = 20.0 +toggle_mode = true +text = "+1" + +[node name="Stocks" type="GridContainer" parent="CanvasLayer/Control/VBoxContainer"] +margin_top = 174.0 +margin_right = 373.0 +margin_bottom = 188.0 +columns = 7 [node name="Label" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] margin_right = 38.0 @@ -107,6 +141,18 @@ margin_right = 212.0 margin_bottom = 14.0 text = "Sell" +[node name="Label6" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 216.0 +margin_right = 271.0 +margin_bottom = 14.0 +text = "Proposal" + +[node name="Label7" type="Label" parent="CanvasLayer/Control/VBoxContainer/Stocks"] +margin_left = 275.0 +margin_right = 349.0 +margin_bottom = 14.0 +text = "Acceptance" + [node name="EndTurnButton" type="Button" parent="CanvasLayer/Control"] anchor_left = 1.0 anchor_top = 1.0 @@ -129,4 +175,7 @@ text = "CONTROLLER" [connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/BuyArmy" to="." method="_on_BuyArmy_pressed"] [connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/BuyBoat" to="." method="_on_BuyBoat_pressed"] [connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/PayDividends" to="." method="_on_PayDividends_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalMinus1" to="." method="_on_ProposalMinus1_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalZero" to="." method="_on_ProposalZero_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/VBoxContainer/CountryProposal/ProposalPlus1" to="." method="_on_ProposalPlus1_pressed"] [connection signal="pressed" from="CanvasLayer/Control/EndTurnButton" to="." method="_on_EndTurnButton_pressed"]