From 6a48e495158839d8b7044831e163394d0ceca876 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Mon, 2 Oct 2023 17:53:13 +0200 Subject: [PATCH] Add balumissing stuff --- bottle/bottle.tscn | 2 +- bottle/placeable_area.gd | 4 + bottle/placeable_area.tscn | 16 ++++ converters/converter_placement_body.tscn | 9 ++ .../copper_to_silver/copper_converter.tscn | 5 +- converters/full_converter_shape.tscn | 8 ++ converters/gold_to_gem/gem_converter.tscn | 5 +- converters/item_converter/item_converter.tscn | 5 +- .../silver_to_gold/silver_converter.tscn | 5 +- game/game.tscn | 12 +-- interface/ghost.gd | 88 +++++++++++++------ interface/ghost.tscn | 18 ++-- project.godot | 2 +- 13 files changed, 125 insertions(+), 54 deletions(-) create mode 100644 bottle/placeable_area.gd create mode 100644 bottle/placeable_area.tscn create mode 100644 converters/converter_placement_body.tscn create mode 100644 converters/full_converter_shape.tscn diff --git a/bottle/bottle.tscn b/bottle/bottle.tscn index fc6930b..51a532b 100644 --- a/bottle/bottle.tscn +++ b/bottle/bottle.tscn @@ -105,7 +105,7 @@ texture = ExtResource("1_qvgnf") 4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) [sub_resource type="TileSet" id="TileSet_tr7be"] -physics_layer_0/collision_layer = 2 +physics_layer_0/collision_layer = 18 physics_layer_0/collision_mask = 0 physics_layer_0/physics_material = SubResource("PhysicsMaterial_y0g3v") sources/1 = SubResource("TileSetAtlasSource_6tyce") diff --git a/bottle/placeable_area.gd b/bottle/placeable_area.gd new file mode 100644 index 0000000..4ac5220 --- /dev/null +++ b/bottle/placeable_area.gd @@ -0,0 +1,4 @@ +extends Area2D +class_name PlaceableArea + +# This script itself does nothing, it's just so that [Ghost] can identify this specific area. diff --git a/bottle/placeable_area.tscn b/bottle/placeable_area.tscn new file mode 100644 index 0000000..ac40dbf --- /dev/null +++ b/bottle/placeable_area.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://4d0al27t7axe"] + +[ext_resource type="Script" path="res://bottle/placeable_area.gd" id="1_1i0ue"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_rh35r"] +size = Vector2(240, 384) + +[node name="PlaceableArea" type="Area2D"] +position = Vector2(136, 272) +collision_layer = 16 +collision_mask = 0 +script = ExtResource("1_1i0ue") + +[node name="BottleShape" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_rh35r") +debug_color = Color(0, 0.6, 0.701961, 0) diff --git a/converters/converter_placement_body.tscn b/converters/converter_placement_body.tscn new file mode 100644 index 0000000..1b5f201 --- /dev/null +++ b/converters/converter_placement_body.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=3 uid="uid://bevj27e1ha8m3"] + +[ext_resource type="PackedScene" uid="uid://c3p0jdf7416ac" path="res://converters/full_converter_shape.tscn" id="1_qs7xk"] + +[node name="ConverterPlacementBody" type="StaticBody2D"] +collision_layer = 16 +collision_mask = 0 + +[node name="FullConverterShape" parent="." instance=ExtResource("1_qs7xk")] diff --git a/converters/copper_to_silver/copper_converter.tscn b/converters/copper_to_silver/copper_converter.tscn index 6ae1582..db203d4 100644 --- a/converters/copper_to_silver/copper_converter.tscn +++ b/converters/copper_to_silver/copper_converter.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=21 format=3 uid="uid://ratkps4plkhl"] +[gd_scene load_steps=22 format=3 uid="uid://ratkps4plkhl"] [ext_resource type="Script" path="res://converters/converter.gd" id="1_mas6k"] [ext_resource type="PackedScene" uid="uid://dme22vvfgme5f" path="res://entity/coin_silver/coin_silver.tscn" id="2_h5aul"] @@ -11,6 +11,7 @@ [ext_resource type="PackedScene" uid="uid://c67lfbk4gf1ga" path="res://spawner/spawner.tscn" id="9_2wvgu"] [ext_resource type="AudioStream" uid="uid://br25ip30mu174" path="res://audio/conversione/mechanic_sound.wav" id="10_6hhch"] [ext_resource type="AudioStream" uid="uid://7tw5efuo3gxj" path="res://audio/conversione/coin_to_coin.wav" id="11_r8505"] +[ext_resource type="PackedScene" uid="uid://bevj27e1ha8m3" path="res://converters/converter_placement_body.tscn" id="12_5qhgs"] [sub_resource type="AtlasTexture" id="AtlasTexture_62dyi"] atlas = ExtResource("4_exnn7") @@ -132,6 +133,8 @@ stream = ExtResource("10_6hhch") [node name="SoundComplete" type="AudioStreamPlayer" parent="."] stream = ExtResource("11_r8505") +[node name="ConverterPlacementBody" parent="." instance=ExtResource("12_5qhgs")] + [connection signal="collected" from="Collector" to="." method="_on_collector_collected"] [connection signal="goal" from="Collector" to="." method="_on_collector_goal"] [connection signal="timeout" from="ConversionTimer" to="." method="_on_timer_timeout"] diff --git a/converters/full_converter_shape.tscn b/converters/full_converter_shape.tscn new file mode 100644 index 0000000..7fcf0b0 --- /dev/null +++ b/converters/full_converter_shape.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=2 format=3 uid="uid://c3p0jdf7416ac"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_np8fu"] +size = Vector2(32, 35) + +[node name="FullConverterShape" type="CollisionShape2D"] +shape = SubResource("RectangleShape2D_np8fu") +debug_color = Color(0, 1, 1, 0) diff --git a/converters/gold_to_gem/gem_converter.tscn b/converters/gold_to_gem/gem_converter.tscn index c0059e5..88325a6 100644 --- a/converters/gold_to_gem/gem_converter.tscn +++ b/converters/gold_to_gem/gem_converter.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=3 uid="uid://c4ew8x4gch275"] +[gd_scene load_steps=24 format=3 uid="uid://c4ew8x4gch275"] [ext_resource type="Script" path="res://converters/converter.gd" id="1_f5plk"] [ext_resource type="Texture2D" uid="uid://chc8wqc1pclbk" path="res://converters/gold_to_gem/gold_converter_back.png" id="2_icys1"] @@ -12,6 +12,7 @@ [ext_resource type="PackedScene" uid="uid://bawprh8kluilq" path="res://entity/gem/gem.tscn" id="9_2ugi1"] [ext_resource type="AudioStream" uid="uid://br25ip30mu174" path="res://audio/conversione/mechanic_sound.wav" id="10_f1h6i"] [ext_resource type="AudioStream" uid="uid://7tw5efuo3gxj" path="res://audio/conversione/coin_to_coin.wav" id="11_ywwn2"] +[ext_resource type="PackedScene" uid="uid://bevj27e1ha8m3" path="res://converters/converter_placement_body.tscn" id="13_6o73w"] [sub_resource type="AtlasTexture" id="AtlasTexture_wy1v3"] atlas = ExtResource("3_n6auo") @@ -145,6 +146,8 @@ stream = ExtResource("10_f1h6i") [node name="SoundComplete" type="AudioStreamPlayer" parent="."] stream = ExtResource("11_ywwn2") +[node name="ConverterPlacementBody" parent="." instance=ExtResource("13_6o73w")] + [connection signal="collected" from="Collector" to="." method="_on_collector_collected" flags=18] [connection signal="goal" from="Collector" to="." method="_on_collector_goal" flags=18] [connection signal="timeout" from="ConversionTimer" to="." method="_on_timer_timeout" flags=18] diff --git a/converters/item_converter/item_converter.tscn b/converters/item_converter/item_converter.tscn index 4b97a2e..a99c539 100644 --- a/converters/item_converter/item_converter.tscn +++ b/converters/item_converter/item_converter.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=33 format=3 uid="uid://ddrhfhebwtq5"] +[gd_scene load_steps=34 format=3 uid="uid://ddrhfhebwtq5"] [ext_resource type="Script" path="res://converters/converter.gd" id="1_qln0a"] [ext_resource type="Texture2D" uid="uid://devcho3gaigt0" path="res://converters/item_converter/item_converter_back_1.png" id="2_136t7"] @@ -16,6 +16,7 @@ [ext_resource type="Texture2D" uid="uid://fqerky4lyps8" path="res://converters/item_converter/item_converter_front_3.png" id="9_88mk7"] [ext_resource type="Texture2D" uid="uid://bw0jgw0jen4lg" path="res://converters/item_converter/item_converter_front_4.png" id="10_fjv52"] [ext_resource type="Texture2D" uid="uid://4tg81ksibacf" path="res://converters/item_converter/item_converter_front_5.png" id="11_cg5dk"] +[ext_resource type="PackedScene" uid="uid://bevj27e1ha8m3" path="res://converters/converter_placement_body.tscn" id="17_udaa3"] [sub_resource type="AtlasTexture" id="AtlasTexture_uqtie"] atlas = ExtResource("2_136t7") @@ -184,6 +185,8 @@ stream = ExtResource("6_w6x4p") [node name="SoundComplete" type="AudioStreamPlayer" parent="."] stream = ExtResource("7_x4ti3") +[node name="ConverterPlacementBody" parent="." instance=ExtResource("17_udaa3")] + [connection signal="collected" from="Collector" to="." method="_on_collector_collected" flags=18] [connection signal="goal" from="Collector" to="." method="_on_collector_goal" flags=18] [connection signal="timeout" from="ConversionTimer" to="." method="_on_timer_timeout" flags=18] diff --git a/converters/silver_to_gold/silver_converter.tscn b/converters/silver_to_gold/silver_converter.tscn index a365724..8d7d64d 100644 --- a/converters/silver_to_gold/silver_converter.tscn +++ b/converters/silver_to_gold/silver_converter.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://but1bdslxp5jl"] +[gd_scene load_steps=18 format=3 uid="uid://but1bdslxp5jl"] [ext_resource type="Script" path="res://converters/converter.gd" id="1_chhfg"] [ext_resource type="Texture2D" uid="uid://c1fu70mb51gyd" path="res://converters/silver_to_gold/silver_converter_back.png" id="2_rpdc3"] @@ -11,6 +11,7 @@ [ext_resource type="PackedScene" uid="uid://du3005kwybbrh" path="res://entity/coin_gold/coin_gold.tscn" id="9_t8y3t"] [ext_resource type="AudioStream" uid="uid://br25ip30mu174" path="res://audio/conversione/mechanic_sound.wav" id="10_0dr47"] [ext_resource type="AudioStream" uid="uid://7tw5efuo3gxj" path="res://audio/conversione/coin_to_coin.wav" id="11_ow0vy"] +[ext_resource type="PackedScene" uid="uid://bevj27e1ha8m3" path="res://converters/converter_placement_body.tscn" id="12_37x2h"] [sub_resource type="SpriteFrames" id="SpriteFrames_1qp6y"] animations = [{ @@ -118,6 +119,8 @@ stream = ExtResource("10_0dr47") [node name="SoundComplete" type="AudioStreamPlayer" parent="."] stream = ExtResource("11_ow0vy") +[node name="ConverterPlacementBody" parent="." instance=ExtResource("12_37x2h")] + [connection signal="collected" from="Collector" to="." method="_on_collector_collected"] [connection signal="goal" from="Collector" to="." method="_on_collector_goal"] [connection signal="timeout" from="ConversionTimer" to="." method="_on_timer_timeout"] diff --git a/game/game.tscn b/game/game.tscn index 186b5ea..06336bb 100644 --- a/game/game.tscn +++ b/game/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=22 format=3 uid="uid://c3rxmcwa5nqng"] +[gd_scene load_steps=23 format=3 uid="uid://c3rxmcwa5nqng"] [ext_resource type="Script" path="res://game/game.gd" id="1_i3ly0"] [ext_resource type="PackedScene" uid="uid://bllsprv8orpn4" path="res://bottle/bottle.tscn" id="1_y7o2l"] @@ -9,6 +9,7 @@ [ext_resource type="Texture2D" uid="uid://taojrwr7xrp4" path="res://interface/upgrade_gold.png" id="4_i557v"] [ext_resource type="PackedScene" uid="uid://beg758fa6o0cs" path="res://value/evaluator.tscn" id="6_my6nv"] [ext_resource type="PackedScene" uid="uid://ratkps4plkhl" path="res://converters/copper_to_silver/copper_converter.tscn" id="7_ipeok"] +[ext_resource type="PackedScene" uid="uid://4d0al27t7axe" path="res://bottle/placeable_area.tscn" id="7_muqgj"] [ext_resource type="PackedScene" uid="uid://but1bdslxp5jl" path="res://converters/silver_to_gold/silver_converter.tscn" id="8_0bbpi"] [ext_resource type="PackedScene" uid="uid://bawprh8kluilq" path="res://entity/gem/gem.tscn" id="8_a3sk0"] [ext_resource type="PackedScene" uid="uid://c2rlx7egl7xiv" path="res://collector/universal_collector.tscn" id="9_7op48"] @@ -44,14 +45,7 @@ position = Vector2(90, 306) [node name="Bottle" parent="." instance=ExtResource("1_y7o2l")] -[node name="PlaceableArea" type="Area2D" parent="Bottle"] -position = Vector2(136, 272) -collision_layer = 16 -collision_mask = 0 - -[node name="BottleShape" type="CollisionShape2D" parent="Bottle/PlaceableArea"] -shape = SubResource("RectangleShape2D_rh35r") -debug_color = Color(0, 0.6, 0.701961, 0) +[node name="PlaceableArea" parent="Bottle" instance=ExtResource("7_muqgj")] [node name="Evaluator" parent="Bottle" instance=ExtResource("6_my6nv")] position = Vector2(136, 272) diff --git a/interface/ghost.gd b/interface/ghost.gd index 47d4f37..d9fcce8 100644 --- a/interface/ghost.gd +++ b/interface/ghost.gd @@ -1,42 +1,74 @@ extends Area2D class_name Ghost -var is_dragging: bool -var previous_position: Vector2 +## Ghost previewing the instantiation of a scene. +## The [CollisionShape2D] to use to check for placement checks. +## +## MUST consist of a [RectangleShape2D]. +@onready var placement_shape: CollisionShape2D = $PlacementShape -func _input(event: InputEvent): - if event is InputEventMouseButton: - is_dragging = event.pressed - previous_position = event.position - elif event is InputEventScreenTouch: - is_dragging = event.pressed - previous_position = event.position - - if is_dragging: - if event is InputEventMouseMotion: - var delta = event.position - previous_position - move_and_check(position + delta) - previous_position = event.position - elif event is InputEventScreenDrag: - var delta = event.position - previous_position - move_and_check(position + delta) - previous_position = event.position +## The [Sprite2D] node previewing the scene. +@onready var preview_sprite: Sprite2D = $PlacementShape/PreviewSprite +## The texture that the preview sprite should display. +@export var preview_texture: Texture2D: + get: + return preview_texture + set(value): + preview_texture = value + preview_sprite.texture = value -@onready var sprite: Sprite2D = $Sprite - -@export var can_place: bool: +## Whether the ghost can be placed at the current location of the ghost. +## +## Computed by checking if [placement_shape] overlaps any entity and is inside the [PlacementArea] of the [Bottle]. +var can_place: bool: get: return can_place set(value): if value: - sprite.modulate = Color(1.0, 1.0, 1.0, 0.5) + preview_sprite.modulate = Color(1.0, 1.0, 1.0, 0.5) else: - sprite.modulate = Color(1.0, 0.0, 0.0, 0.5) + preview_sprite.modulate = Color(1.0, 0.0, 0.0, 0.5) + +## The last input event of the input that's dragging the ghost around, or null if the ghost isn't being dragged. +var last_input_event: InputEvent -func move_and_check(destination): - position = destination - can_place = not has_overlapping_bodies() - print(can_place) +func _input(event: InputEvent): + # Handle mouse click + if event is InputEventMouseButton: + last_input_event = event if event.pressed else null + # Handle touch begin + elif event is InputEventScreenTouch: + last_input_event = event if event.pressed else null + + # If is dragging + if last_input_event: + # Handle mouse drag + if last_input_event is InputEventMouse and event is InputEventMouse: + var delta = event.position - last_input_event.position + position += delta + last_input_event = event + # Handle touch drag + elif (last_input_event is InputEventScreenTouch or last_input_event is InputEventScreenDrag) and event is InputEventScreenDrag: + if event.index == last_input_event.index: + var delta = event.position - last_input_event.position + position += delta + last_input_event = event + + + +func _physics_process(_delta: float): + var overlapping_bodies = get_overlapping_bodies() + var no_overlapping_bodies = true + + + var is_enclosed_by_placeable_area = false + # DIRTY HACK: Relies on the placeable area being perfectly surrounded by solid bodies. + var overlapping_areas = get_overlapping_areas() + for area in overlapping_areas: + if not area is PlaceableArea: + continue + is_enclosed_by_placeable_area = true + can_place = no_overlapping_bodies and is_enclosed_by_placeable_area diff --git a/interface/ghost.tscn b/interface/ghost.tscn index ea08651..0f460f3 100644 --- a/interface/ghost.tscn +++ b/interface/ghost.tscn @@ -2,22 +2,18 @@ [ext_resource type="Script" path="res://interface/ghost.gd" id="1_gvls7"] [ext_resource type="Texture2D" uid="uid://pj3ip6vlatms" path="res://converters/copper_to_silver/copper_converter.png" id="1_lo8gj"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_hmopu"] -size = Vector2(34, 34) +[ext_resource type="PackedScene" uid="uid://c3p0jdf7416ac" path="res://converters/full_converter_shape.tscn" id="3_lskcf"] [node name="Ghost" type="Area2D"] -scale = Vector2(3, 3) -collision_layer = 16 -collision_mask = 10 +collision_layer = 0 +collision_mask = 16 input_pickable = false script = ExtResource("1_gvls7") -[node name="Sprite" type="Sprite2D" parent="."] +[node name="PlacementShape" parent="." instance=ExtResource("3_lskcf")] +scale = Vector2(3, 3) + +[node name="PreviewSprite" type="Sprite2D" parent="PlacementShape"] modulate = Color(1, 1, 1, 0.5) z_index = 10 texture = ExtResource("1_lo8gj") - -[node name="Shape" type="CollisionShape2D" parent="."] -shape = SubResource("RectangleShape2D_hmopu") -debug_color = Color(0, 0.6, 0.701961, 0) diff --git a/project.godot b/project.godot index 3dc43a3..d3e4275 100644 --- a/project.godot +++ b/project.godot @@ -31,7 +31,7 @@ window/handheld/orientation=1 2d_physics/layer_2="Bottle" 2d_physics/layer_3="Entities" 2d_physics/layer_4="Converter" -2d_physics/layer_5="Ghost" +2d_physics/layer_5="Placement" [physics]