mirror of
https://github.com/Steffo99/swear-jar.git
synced 2024-11-21 23:34:18 +00:00
Fix collisions
This commit is contained in:
parent
91a5182912
commit
17e939e4a4
10 changed files with 73 additions and 33 deletions
|
@ -105,8 +105,8 @@ 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 = 3
|
||||
physics_layer_0/collision_mask = 3
|
||||
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")
|
||||
|
||||
|
|
|
@ -60,10 +60,12 @@ size = Vector2(26, 4)
|
|||
size = Vector2(26, 5)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jeo5f"]
|
||||
size = Vector2(26, 8.83334)
|
||||
size = Vector2(26, 10)
|
||||
|
||||
[node name="CopperConverter" type="StaticBody2D" node_paths=PackedStringArray("sprite_front", "conversion_timer", "sound_working", "sound_complete", "spawner")]
|
||||
scale = Vector2(3, 3)
|
||||
collision_layer = 8
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_mas6k")
|
||||
sprite_front = NodePath("SpriteFront")
|
||||
conversion_timer = NodePath("ConversionTimer")
|
||||
|
@ -125,9 +127,6 @@ debug_color = Color(0.701961, 0, 0, 0.419608)
|
|||
wait_time = 0.5
|
||||
one_shot = true
|
||||
|
||||
[node name="SoundAbsorb" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("10_6hhch")
|
||||
|
||||
[node name="SoundWorking" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("10_6hhch")
|
||||
|
||||
|
|
|
@ -48,6 +48,8 @@ size = Vector2(26, 10)
|
|||
|
||||
[node name="SilverConverter" type="StaticBody2D" node_paths=PackedStringArray("sprite_front", "conversion_timer", "sound_working", "sound_complete", "spawner")]
|
||||
scale = Vector2(3, 3)
|
||||
collision_layer = 8
|
||||
collision_mask = 0
|
||||
script = ExtResource("1_chhfg")
|
||||
sprite_front = NodePath("SpriteFront")
|
||||
conversion_timer = NodePath("ConversionTimer")
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://c3kitncwpi42j"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://c3kitncwpi42j"]
|
||||
|
||||
[ext_resource type="PhysicsMaterial" uid="uid://c6kn1an85lccr" path="res://entity/coin_physics_material.tres" id="1_1fypc"]
|
||||
[ext_resource type="Script" path="res://entity/coin_copper/coin_copper.gd" id="2_1r8w3"]
|
||||
[ext_resource type="Texture2D" uid="uid://dbdkb4vt7dh85" path="res://entity/coin_copper/coin_copper_4.png" id="2_4pvkj"]
|
||||
[ext_resource type="Texture2D" uid="uid://2vtvoj6ua3cb" path="res://entity/coin_copper/coin_copper_outline_2.png" id="3_dq1f7"]
|
||||
[ext_resource type="PackedScene" uid="uid://bk1vvq5rug01m" path="res://collector/collectible.tscn" id="4_npwn2"]
|
||||
[ext_resource type="PackedScene" uid="uid://ujpra0s1kpqi" path="res://value/valuable.tscn" id="5_fd0r7"]
|
||||
[ext_resource type="AudioStream" uid="uid://wy7f2j0wg1ur" path="res://audio/tap/click5.wav" id="7_fxd28"]
|
||||
[ext_resource type="AudioStream" uid="uid://ds2rl6eg5jr1" path="res://audio/tap/click5.wav" id="7_fxd28"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_c6byl"]
|
||||
size = Vector2(14, 3)
|
||||
|
||||
[node name="CoinCopper" type="RigidBody2D"]
|
||||
collision_layer = 5
|
||||
collision_mask = 7
|
||||
collision_layer = 4
|
||||
collision_mask = 6
|
||||
inertia = 1000.0
|
||||
physics_material_override = ExtResource("1_1fypc")
|
||||
continuous_cd = 1
|
||||
|
@ -20,6 +21,7 @@ max_contacts_reported = 1
|
|||
contact_monitor = true
|
||||
linear_damp = 0.1
|
||||
angular_damp = 0.1
|
||||
script = ExtResource("2_1r8w3")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
scale = Vector2(2, 2)
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
size = Vector2(27, 5)
|
||||
|
||||
[node name="CoinGold" type="RigidBody2D"]
|
||||
collision_layer = 5
|
||||
collision_mask = 7
|
||||
collision_layer = 4
|
||||
collision_mask = 6
|
||||
mass = 2.0
|
||||
inertia = 600.0
|
||||
physics_material_override = ExtResource("1_nfq5t")
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
size = Vector2(21, 4)
|
||||
|
||||
[node name="CoinSilver" type="RigidBody2D"]
|
||||
collision_layer = 5
|
||||
collision_mask = 7
|
||||
collision_layer = 4
|
||||
collision_mask = 6
|
||||
mass = 1.5
|
||||
inertia = 800.0
|
||||
physics_material_override = ExtResource("1_4sq1a")
|
||||
|
|
|
@ -14,8 +14,8 @@ radius = 4.0
|
|||
height = 10.0
|
||||
|
||||
[node name="Gem" type="RigidBody2D"]
|
||||
collision_layer = 5
|
||||
collision_mask = 7
|
||||
collision_layer = 4
|
||||
collision_mask = 6
|
||||
mass = 1.5
|
||||
inertia = 800.0
|
||||
physics_material_override = ExtResource("1_vmemd")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=23 format=3 uid="uid://c3rxmcwa5nqng"]
|
||||
[gd_scene load_steps=24 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"]
|
||||
|
@ -7,6 +7,7 @@
|
|||
[ext_resource type="PackedScene" uid="uid://c67lfbk4gf1ga" path="res://spawner/spawner.tscn" id="3_qwsty"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3kitncwpi42j" path="res://entity/coin_copper/coin_copper.tscn" id="4_5oayc"]
|
||||
[ext_resource type="Texture2D" uid="uid://taojrwr7xrp4" path="res://interface/upgrade_gold.png" id="4_i557v"]
|
||||
[ext_resource type="Texture2D" uid="uid://pj3ip6vlatms" path="res://converters/copper_to_silver/copper_converter.png" id="6_0jj8g"]
|
||||
[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"]
|
||||
|
@ -40,8 +41,11 @@ upgrade_copper_texture = ExtResource("11_lt33g")
|
|||
upgrade_silver_texture = ExtResource("3_8wvr1")
|
||||
upgrade_gold_texture = ExtResource("4_i557v")
|
||||
|
||||
[node name="Ghost" parent="." instance=ExtResource("16_8vhx6")]
|
||||
[node name="Ghost" parent="." node_paths=PackedStringArray("target") instance=ExtResource("16_8vhx6")]
|
||||
position = Vector2(90, 306)
|
||||
preview_texture = ExtResource("6_0jj8g")
|
||||
scene_to_instantiate = ExtResource("7_ipeok")
|
||||
target = NodePath("..")
|
||||
|
||||
[node name="Bottle" parent="." instance=ExtResource("1_y7o2l")]
|
||||
|
||||
|
|
|
@ -11,13 +11,21 @@ class_name Ghost
|
|||
## The [Sprite2D] node previewing the scene.
|
||||
@onready var preview_sprite: Sprite2D = $PlacementShape/PreviewSprite
|
||||
|
||||
## The collision mask of objects that should prevent this object's placement.
|
||||
@export_flags_2d_physics var collision_mask_prevent_placement: int
|
||||
|
||||
## The collision mask of objects that should be deleted on this object's placement.
|
||||
@export_flags_2d_physics var collision_mask_delete_placement: int
|
||||
|
||||
## 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
|
||||
# Quick priority fix
|
||||
if preview_sprite:
|
||||
preview_sprite.texture = value
|
||||
|
||||
## Whether the ghost can be placed at the current location of the ghost.
|
||||
##
|
||||
|
@ -35,6 +43,11 @@ var can_place: bool:
|
|||
var last_input_event: InputEvent
|
||||
|
||||
|
||||
func _ready():
|
||||
collision_mask = collision_mask_prevent_placement | collision_mask_delete_placement
|
||||
preview_sprite.texture = preview_texture
|
||||
|
||||
|
||||
func _input(event: InputEvent):
|
||||
# Handle mouse click
|
||||
if event is InputEventMouseButton:
|
||||
|
@ -57,18 +70,38 @@ func _input(event: InputEvent):
|
|||
position += delta
|
||||
last_input_event = event
|
||||
|
||||
|
||||
|
||||
# DIRTY HACK: Relies on the placeable area being perfectly surrounded by solid bodies.
|
||||
func _physics_process(_delta: float):
|
||||
var no_overlapping_bodies: bool = true
|
||||
var overlapping_bodies = get_overlapping_bodies()
|
||||
var no_overlapping_bodies = true
|
||||
for body in overlapping_bodies:
|
||||
if body is TileMap:
|
||||
no_overlapping_bodies = false
|
||||
elif body is PhysicsBody2D:
|
||||
var body_prevents_placement = bool(body.collision_layer & collision_mask_prevent_placement)
|
||||
no_overlapping_bodies = no_overlapping_bodies and not body_prevents_placement
|
||||
|
||||
|
||||
var is_enclosed_by_placeable_area = false
|
||||
# DIRTY HACK: Relies on the placeable area being perfectly surrounded by solid bodies.
|
||||
var is_in_placeable_area: bool = false
|
||||
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
|
||||
if area is PlaceableArea:
|
||||
is_in_placeable_area = true
|
||||
|
||||
can_place = no_overlapping_bodies and is_in_placeable_area
|
||||
|
||||
|
||||
## The [PackedScene] that this node should instantiate.
|
||||
@export var scene_to_instantiate: PackedScene
|
||||
|
||||
## The [Node] instatiated scenes should be added as children to.
|
||||
@export var target: Node
|
||||
|
||||
## Emitted when the [materialize] function has finished executing.
|
||||
signal materialized(node: Node)
|
||||
|
||||
func materialize():
|
||||
var instantiated = scene_to_instantiate.instantiate()
|
||||
instantiated.global_position = global_position
|
||||
instantiated.rotation = rotation
|
||||
target.add_child(instantiated)
|
||||
materialized.emit(instantiated)
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://qtk4tm6l367w"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://qtk4tm6l367w"]
|
||||
|
||||
[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"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3p0jdf7416ac" path="res://converters/full_converter_shape.tscn" id="3_lskcf"]
|
||||
|
||||
[node name="Ghost" type="Area2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 16
|
||||
collision_mask = 4294967295
|
||||
input_pickable = false
|
||||
script = ExtResource("1_gvls7")
|
||||
collision_mask_prevent_placement = 16
|
||||
collision_mask_delete_placement = 4
|
||||
|
||||
[node name="PlacementShape" parent="." instance=ExtResource("3_lskcf")]
|
||||
scale = Vector2(3, 3)
|
||||
|
@ -16,4 +17,3 @@ 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")
|
||||
|
|
Loading…
Reference in a new issue