From 36759f2909efa9ed1e242fa529961617c2acea5f Mon Sep 17 00:00:00 2001 From: Sebastian Morr Date: Tue, 13 Oct 2020 14:16:36 +0200 Subject: [PATCH] Simple card game prototype in the Cardgame scene --- card.gd | 23 +++++++++++++++++++++-- card.tscn | 41 ++++++++++++++++++++++++++++------------- cardgame.gd | 19 +++++++++++++++++++ cardgame.tscn | 27 +++++++++++++++++++++++---- drop_area.gd | 19 +++++++++++++++++++ drop_area.tscn | 17 +++++++++++++++++ game.gd | 2 ++ node.tscn | 18 ++++++++++++++++-- repository.gd | 12 ++++++------ repository.tscn | 6 +++--- 10 files changed, 154 insertions(+), 30 deletions(-) create mode 100644 cardgame.gd create mode 100644 drop_area.gd create mode 100644 drop_area.tscn diff --git a/card.gd b/card.gd index 4cca88f..04e805b 100644 --- a/card.gd +++ b/card.gd @@ -1,5 +1,6 @@ extends Node2D +var hovered = false var dragged = false var drag_offset @@ -12,10 +13,28 @@ func _process(delta): position = mousepos - drag_offset func _unhandled_input(event): - print("input event!") if event is InputEventMouseButton: - if event.button_index == BUTTON_LEFT and event.pressed: + if event.button_index == BUTTON_LEFT and event.pressed and hovered: dragged = true + game.dragged_object = self drag_offset = get_viewport().get_mouse_position() - global_position + get_tree().set_input_as_handled() + modulate.a = 0.5 elif event.button_index == BUTTON_LEFT and !event.pressed: dragged = false + game.dragged_object = null + modulate.a = 1 + + +func _mouse_entered(): + hovered = true + +func _mouse_exited(): + hovered = false + +func dropped_on(other): + #print("I have been dropped on "+str(other.id)) + print("Running " + $Label.text + " " + other.id) + var command = $Label.text + " " + other.id + $"../Terminal".send_command(command) + queue_free() diff --git a/card.tscn b/card.tscn index efb9377..7c91f87 100644 --- a/card.tscn +++ b/card.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://card.gd" type="Script" id=1] +[ext_resource path="res://fonts/default.tres" type="DynamicFont" id=2] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 105.74, 143.46 ) @@ -8,20 +9,34 @@ extents = Vector2( 105.74, 143.46 ) [node name="Card" type="Node2D"] script = ExtResource( 1 ) -[node name="KinematicBody2D" type="KinematicBody2D" parent="."] -position = Vector2( 536.216, 510.56 ) -input_pickable = true - -[node name="Panel" type="Panel" parent="KinematicBody2D"] -visible = false -margin_left = -104.0 -margin_top = -143.0 -margin_right = 106.0 -margin_bottom = 141.0 +[node name="ColorRect" type="ColorRect" parent="."] +margin_left = -103.0 +margin_top = -145.0 +margin_right = 103.0 +margin_bottom = 144.0 +mouse_filter = 2 +color = Color( 0.105882, 0.67451, 0.847059, 1 ) __meta__ = { "_edit_use_anchors_": false } -[node name="CollisionShape2D" type="CollisionShape2D" parent="KinematicBody2D"] +[node name="Area2D" type="Area2D" parent="."] +position = Vector2( 0, 6.10352e-05 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +position = Vector2( -6.10352e-05, 0.00012207 ) shape = SubResource( 1 ) -[connection signal="input_event" from="KinematicBody2D" to="." method="_input_event"] + +[node name="Label" type="Label" parent="."] +margin_left = -89.1555 +margin_top = -131.488 +margin_right = -38.1555 +margin_bottom = -117.488 +custom_fonts/font = ExtResource( 2 ) +custom_colors/font_color = Color( 0, 0, 0, 1 ) +text = "git checkout" +__meta__ = { +"_edit_use_anchors_": false +} +[connection signal="mouse_entered" from="Area2D" to="." method="_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_mouse_exited"] diff --git a/cardgame.gd b/cardgame.gd new file mode 100644 index 0000000..8e48ade --- /dev/null +++ b/cardgame.gd @@ -0,0 +1,19 @@ +extends Node2D + +func _ready(): + + var path = game.tmp_prefix_inside+"/repos/sandbox/" + helpers.careful_delete(path) + + game.global_shell.run("mkdir " + path) + game.global_shell.cd(path) + game.global_shell.run("git init") + game.global_shell.run("git symbolic-ref HEAD refs/heads/main") + game.global_shell.run("git commit --allow-empty -m 'Initial commit'") + + $Repository.path = path + + $Terminal.repository = $Repository + +func _update_repo(): + $Repository.update_everything() diff --git a/cardgame.tscn b/cardgame.tscn index c2e9160..69589b9 100644 --- a/cardgame.tscn +++ b/cardgame.tscn @@ -1,13 +1,32 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://card.tscn" type="PackedScene" id=1] +[ext_resource path="res://drop_area.tscn" type="PackedScene" id=2] +[ext_resource path="res://repository.tscn" type="PackedScene" id=3] +[ext_resource path="res://cardgame.gd" type="Script" id=4] +[ext_resource path="res://terminal.tscn" type="PackedScene" id=5] [node name="Cardgame" type="Node2D"] +script = ExtResource( 4 ) -[node name="Card" parent="." instance=ExtResource( 1 )] +[node name="Repository" parent="." instance=ExtResource( 3 )] +margin_right = 1481.0 +margin_bottom = 592.0 + +[node name="DropArea" parent="." instance=ExtResource( 2 )] [node name="Card2" parent="." instance=ExtResource( 1 )] -position = Vector2( 118.019, -91.0798 ) +position = Vector2( 948.833, 814.382 ) [node name="Card3" parent="." instance=ExtResource( 1 )] -position = Vector2( 474.641, 118.019 ) +position = Vector2( 1348, 830.017 ) + +[node name="Card" parent="." instance=ExtResource( 1 )] +position = Vector2( 558.857, 824.539 ) + +[node name="Terminal" parent="." instance=ExtResource( 5 )] +margin_left = 1488.0 +margin_top = 5.0 +margin_right = 1914.0 +margin_bottom = 586.0 +[connection signal="command_done" from="Terminal" to="." method="_update_repo"] diff --git a/drop_area.gd b/drop_area.gd new file mode 100644 index 0000000..5fb5376 --- /dev/null +++ b/drop_area.gd @@ -0,0 +1,19 @@ +extends Node2D + +var hovered = false + +func _ready(): + pass + +func _mouse_entered(): + hovered = true + +func _mouse_exited(): + hovered = false + +func _input(event): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT and !event.pressed and hovered: + if game.dragged_object: + print(game.dragged_object) + game.dragged_object.dropped_on($"..") diff --git a/drop_area.tscn b/drop_area.tscn new file mode 100644 index 0000000..fc24c71 --- /dev/null +++ b/drop_area.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://drop_area.gd" type="Script" id=1] + +[sub_resource type="CircleShape2D" id=1] +radius = 23.5871 + +[node name="DropArea" type="Node2D"] +position = Vector2( -0.197731, 0.0673599 ) +script = ExtResource( 1 ) + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource( 1 ) +[connection signal="mouse_entered" from="Area2D" to="." method="_mouse_entered"] +[connection signal="mouse_exited" from="Area2D" to="." method="_mouse_exited"] diff --git a/game.gd b/game.gd index 92ad7ed..54a0320 100644 --- a/game.gd +++ b/game.gd @@ -5,6 +5,8 @@ var tmp_prefix_inside = _tmp_prefix_inside() var global_shell var fake_editor +var dragged_object + var _file = "user://savegame.json" var state = {} diff --git a/node.tscn b/node.tscn index 8b21267..a0572bf 100644 --- a/node.tscn +++ b/node.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://node.gd" type="Script" id=1] [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=2] [ext_resource path="res://nodes/blob.svg" type="Texture" id=3] [ext_resource path="res://nodes/pop.wav" type="AudioStream" id=4] +[ext_resource path="res://drop_area.tscn" type="PackedScene" id=5] [sub_resource type="StyleBoxFlat" id=1] content_margin_left = 5.0 @@ -16,17 +17,21 @@ corner_radius_top_right = 5 corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 +[sub_resource type="CircleShape2D" id=2] +radius = 23.6295 + [node name="Node" type="Node2D"] script = ExtResource( 1 ) [node name="Arrows" type="Node2D" parent="."] [node name="Rect" type="ColorRect" parent="."] +visible = false margin_left = -29.0 margin_top = -28.0 margin_right = 29.0 margin_bottom = 29.0 -mouse_filter = 1 +mouse_filter = 2 color = Color( 1, 1, 1, 0 ) __meta__ = { "_edit_use_anchors_": false @@ -64,5 +69,14 @@ custom_colors/font_color = Color( 1, 1, 1, 1 ) __meta__ = { "_edit_use_anchors_": false } + +[node name="DropArea" parent="." instance=ExtResource( 5 )] + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource( 2 ) [connection signal="mouse_entered" from="Rect" to="." method="_on_hover"] [connection signal="mouse_exited" from="Rect" to="." method="_on_unhover"] +[connection signal="mouse_entered" from="Area2D" to="." method="_on_hover"] +[connection signal="mouse_exited" from="Area2D" to="." method="_on_unhover"] diff --git a/repository.gd b/repository.gd index 8a68d8d..e6443e0 100644 --- a/repository.gd +++ b/repository.gd @@ -40,12 +40,12 @@ func _process(_delta): if path: apply_forces() -func _input(event): - if mouse_inside: - if event.is_action_pressed("zoom_out") and nodes.rect_scale.x > 0.3: - nodes.rect_scale -= Vector2(0.05, 0.05) - if event.is_action_pressed("zoom_in") and nodes.rect_scale.x < 2: - nodes.rect_scale += Vector2(0.05, 0.05) +#func _input(event): +# if mouse_inside: +# if event.is_action_pressed("zoom_out") and nodes.rect_scale.x > 0.3: +# nodes.rect_scale -= Vector2(0.05, 0.05) +# if event.is_action_pressed("zoom_in") and nodes.rect_scale.x < 2: +# nodes.rect_scale += Vector2(0.05, 0.05) func there_is_a_git(): return shell.run("test -d .git && echo yes || echo no") == "yes\n" diff --git a/repository.tscn b/repository.tscn index cf9d538..7db428b 100644 --- a/repository.tscn +++ b/repository.tscn @@ -8,7 +8,7 @@ [node name="Repository" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 -mouse_filter = 1 +mouse_filter = 2 theme = ExtResource( 2 ) script = ExtResource( 1 ) __meta__ = { @@ -18,7 +18,7 @@ __meta__ = { [node name="Rows" type="VSplitContainer" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 -mouse_filter = 1 +mouse_filter = 2 __meta__ = { "_edit_use_anchors_": false } @@ -26,7 +26,7 @@ __meta__ = { [node name="RepoVis" type="Control" parent="Rows"] margin_right = 1920.0 margin_bottom = 925.0 -mouse_filter = 1 +mouse_filter = 2 size_flags_vertical = 3 __meta__ = { "_edit_use_anchors_": false