refactor: even better hitboxes

This commit is contained in:
Varylios 2025-09-14 12:52:01 +02:00
parent ad5d9b8d82
commit ce0aedd951
10 changed files with 30 additions and 37 deletions

View file

@ -20,7 +20,7 @@ metadata/_custom_type_script = "uid://ddgbr0n8kic3y"
viewport_path = NodePath("Enemy/HealthBar3D/SubViewport")
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_tviqb"]
points = PackedVector3Array(0, 0, 0, -1.5, 1, -3, 1.5, 1, -3, 1.5, 0, -3, -1.5, 0, -3)
points = PackedVector3Array(0, 0, 0, -1.5, 1, -2.5, 1.5, 1, -2.5, 1.5, 0, -2.5, -1.5, 0, -2.5)
[node name="PathFollow3D" instance=ExtResource("1_ohyx6")]
@ -42,9 +42,12 @@ transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.34, 0)
texture = SubResource("ViewportTexture_mw235")
[node name="TowerAttackRange" type="Area3D" parent="Enemy" index="4"]
collision_layer = 4
collision_layer = 0
collision_mask = 4
[node name="CollisionShape3D" type="CollisionShape3D" parent="Enemy/TowerAttackRange" index="0"]
shape = SubResource("ConvexPolygonShape3D_tviqb")
debug_color = Color(0.419608, 0, 0.584314, 0.419608)
[connection signal="body_entered" from="Enemy/TowerAttackRange" to="Enemy" method="onAttackRangeBodyEntered"]
[connection signal="body_exited" from="Enemy/TowerAttackRange" to="Enemy" method="onAttackRangeBodyExited"]

View file

@ -5,15 +5,9 @@ class_name Boss
@export var projectile : ProjectileResource
func _ready() -> void:
super._ready()
$TowerAttackRange.body_entered.connect(onAttackRangeBodyEntered)
$TowerAttackRange.body_exited.connect(onAttackRangeBodyExited)
func attack() -> bool:
# already attacked TheCube
if super.attack():
# already attacked TheCube
return true
var towerTargets : Array[Node3D] = targets.filter(func(b): return b is Tower)

View file

@ -29,7 +29,7 @@ radius = 0.6
[node name="Enemy" type="CharacterBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
collision_layer = 2
collision_mask = 2
collision_mask = 0
script = ExtResource("1_orwns")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Enemy"]
@ -69,8 +69,8 @@ show_percentage = false
metadata/_custom_type_script = "uid://blnmjxmusrsa7"
[node name="CubeAttackRange" type="Area3D" parent="Enemy"]
collision_layer = 4
collision_mask = 4
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="Enemy/CubeAttackRange"]
shape = SubResource("SphereShape3D_cmo2f")

View file

@ -7,8 +7,8 @@
size = Vector3(1.2, 1, 1.2)
[node name="TheCube" type="StaticBody3D"]
collision_layer = 4
collision_mask = 4
collision_layer = 8
collision_mask = 0
script = ExtResource("1_wrmut")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]

View file

@ -4,3 +4,7 @@ class_name GameTile
enum TYPE { PATH, TOWER, SCENE }
@export var type : TYPE
func _ready() -> void:
$CollisionShape3D.debug_color = Color.TRANSPARENT

View file

@ -21,7 +21,7 @@ billboard = 2
texture = ExtResource("2_08w86")
[node name="HitBox" type="Area3D" parent="."]
collision_layer = 6
collision_layer = 0
collision_mask = 6
[node name="ProjectileSize" type="CollisionShape3D" parent="HitBox"]
@ -29,7 +29,7 @@ shape = SubResource("SphereShape3D_dsts2")
debug_color = Color(0.926858, 0.237749, 0.335021, 0.42)
[node name="DamageArea" type="Area3D" parent="."]
collision_layer = 6
collision_layer = 0
collision_mask = 6
[node name="ProjectileArea" type="CollisionShape3D" parent="DamageArea"]

View file

@ -75,8 +75,6 @@ func _ready() -> void:
if not Engine.is_editor_hint():
energy = max_energy
energyRecoveryCooldown.timeout.connect(func(): energy += energy_regen + Game.energy_boost)
collision_layer = 0
collision_mask = 0
$PriceTag.text = str(price) + ""
$Range/Range.shape = towerRange
@ -113,19 +111,11 @@ func shoot() -> void:
func resting() -> void:
visible = false
collision_layer = 0
collision_mask = 0
toggleConnection(false)
energyRecoveryCooldown.start()
func in_action() -> void:
visible = true
collision_layer = 0b100
collision_mask = 0b100
toggleConnection(true)
energyRecoveryCooldown.stop()
func choose_target() -> Enemy:
@ -161,13 +151,15 @@ func onBodyExited(body: Node3D) -> void:
func toggleConnection(activate : bool) -> void:
visible = activate
$Range.monitoring = activate
$Range.monitorable = activate
$CollisionShape3D.disabled = not activate
if activate:
$Range.monitorable = true
$Range.monitoring = true
energyRecoveryCooldown.stop()
else:
$Range.monitorable = false
$Range.monitoring = false
availableTargets.clear()
energyRecoveryCooldown.start()
func disable(duration : float) -> void:

View file

@ -26,7 +26,7 @@ metadata/_custom_type_script = "uid://blnmjxmusrsa7"
[node name="Tower" type="StaticBody3D"]
collision_layer = 4
collision_mask = 4
collision_mask = 0
script = ExtResource("1_egfuc")
icone = ExtResource("2_mnaic")
bio = "Aime se promener dans l'herbe et manger des framboises. Sa petite bouille la rend trop mignonne."
@ -34,10 +34,11 @@ bio = "Aime se promener dans l'herbe et manger des framboises. Sa petite bouille
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
shape = SubResource("CapsuleShape3D_ynmsb")
disabled = true
[node name="Range" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 0)
collision_layer = 2
collision_layer = 0
collision_mask = 2
[node name="Range" type="CollisionShape3D" parent="Range"]

View file

@ -54,7 +54,6 @@ offset_left = -90.0
offset_right = 90.0
offset_bottom = 50.0
grow_horizontal = 2
theme_override_colors/font_color = Color(0.2, 0.2, 0.2, 1)
theme_override_font_sizes/font_size = 40
[node name="TowerButtonPanel" type="HBoxContainer" parent="."]

View file

@ -109,7 +109,7 @@ test={
[layer_names]
3d_physics/layer_1="floor"
3d_physics/layer_2="tower"
3d_physics/layer_3="baddy"
3d_physics/layer_4="cube"
3d_physics/layer_1="tiles"
3d_physics/layer_2="enemy"
3d_physics/layer_3="tower"
3d_physics/layer_4="TheCube"