From 4bf15fdd97f3f3689bfaa9ed431d817a1060d66e Mon Sep 17 00:00:00 2001 From: Dorian Pula Date: Thu, 17 Dec 2020 10:55:29 -0500 Subject: [PATCH] Implement a basic clicker game. --- Game.gd | 44 +++++++++++++++++++++++++++++++++++++ Game.tscn | 52 +++++++++++++++++++++++++++++++++++++++++++- README.md | 4 ++++ kenpixel_future.ttf | Bin 0 -> 27380 bytes 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 Game.gd create mode 100644 kenpixel_future.ttf diff --git a/Game.gd b/Game.gd new file mode 100644 index 0000000..de516bb --- /dev/null +++ b/Game.gd @@ -0,0 +1,44 @@ +extends Node2D + +var player_score = 0 +var player_name = "Unknown" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + player_name = get_player_name() + update_player_text() + +# Update the score text when the score changes +func update_score_text(): + var score_text = "Score: {score}".format({"score": player_score}) + $ButtonContainer/PlayerScore.text = score_text + +func update_player_text(): + var player_text = "Hello {name}".format({"name": player_name}) + $ButtonContainer/PlayerName.text = player_text + +func _on_ClickerButton_pressed(): + player_score += 5 + update_score_text() + +# Are we running in the web? +func is_web_env(): + return OS.has_feature('JavaScript') + +# Get the player name from the HTML shell +func get_player_name(): + var name = "Unknown" + if is_web_env(): + name = JavaScript.eval("getPlayerName()") + return name + +func exit_game(score): + if is_web_env(): + JavaScript.eval("finishGame({score})".format({"score": score})) + else: + get_tree().quit() + + +func _on_QuitButton_pressed(): + exit_game(player_score) diff --git a/Game.tscn b/Game.tscn index 5ce68d7..62ea45d 100644 --- a/Game.tscn +++ b/Game.tscn @@ -1,3 +1,53 @@ -[gd_scene format=2] +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://kenpixel_future.ttf" type="DynamicFontData" id=1] +[ext_resource path="res://Game.gd" type="Script" id=2] + +[sub_resource type="DynamicFont" id=1] +size = 32 +font_data = ExtResource( 1 ) + +[sub_resource type="DynamicFont" id=2] +size = 20 +font_data = ExtResource( 1 ) [node name="MainWindow" type="Node2D"] +script = ExtResource( 2 ) + +[node name="ButtonContainer" type="VBoxContainer" parent="."] +margin_left = 247.0 +margin_top = 194.0 +margin_right = 838.0 +margin_bottom = 402.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="PlayerName" type="Label" parent="ButtonContainer"] +margin_right = 591.0 +margin_bottom = 40.0 +custom_fonts/font = SubResource( 1 ) +text = "Hello Player" + +[node name="PlayerScore" type="Label" parent="ButtonContainer"] +margin_top = 44.0 +margin_right = 591.0 +margin_bottom = 84.0 +custom_fonts/font = SubResource( 1 ) +text = "Score: 0" + +[node name="ClickerButton" type="Button" parent="ButtonContainer"] +margin_top = 88.0 +margin_right = 591.0 +margin_bottom = 119.0 +custom_fonts/font = SubResource( 2 ) +text = "Click Me!" + +[node name="QuitButton" type="Button" parent="ButtonContainer"] +margin_top = 123.0 +margin_right = 591.0 +margin_bottom = 154.0 +custom_fonts/font = SubResource( 2 ) +text = "I'm Done" +[connection signal="pressed" from="ButtonContainer/ClickerButton" to="." method="_on_ClickerButton_pressed"] +[connection signal="pressed" from="ButtonContainer/QuitButton" to="." method="_on_QuitButton_pressed"] diff --git a/README.md b/README.md index af0e671..9699e07 100644 --- a/README.md +++ b/README.md @@ -26,3 +26,7 @@ Godot devs) can be found between the `` and [js-from-godot]: https://docs.godotengine.org/en/stable/getting_started/workflow/export/exporting_for_web.html#calling-javascript-from-script [custom-html-shell]: https://docs.godotengine.org/en/stable/tutorials/platform/customizing_html5_shell.html#doc-customizing-html5-shell [custom-fixed-size-template]: https://github.com/godotengine/godot/blob/master/misc/dist/html/fixed-size.html + +## Credits + +* [Fonts by Kenney](https://opengameart.org/content/kenney-fonts) diff --git a/kenpixel_future.ttf b/kenpixel_future.ttf new file mode 100644 index 0000000000000000000000000000000000000000..719f8dd55ed886aef135ba8b938b5536a98a7aa4 GIT binary patch literal 27380 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