add stomping
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=13 format=3 uid="uid://bqi5s710xb1ju"]
|
[gd_scene load_steps=15 format=3 uid="uid://bqi5s710xb1ju"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/player.gd" id="1_8j4h4"]
|
[ext_resource type="Script" path="res://scripts/player.gd" id="1_8j4h4"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"]
|
[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"]
|
||||||
@@ -11,10 +11,14 @@
|
|||||||
[ext_resource type="Script" path="res://scripts/components/knockback.gd" id="9_rjyu4"]
|
[ext_resource type="Script" path="res://scripts/components/knockback.gd" id="9_rjyu4"]
|
||||||
[ext_resource type="Script" path="res://scripts/components/brick_throw.gd" id="10_u0v3b"]
|
[ext_resource type="Script" path="res://scripts/components/brick_throw.gd" id="10_u0v3b"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bymro4t7angv5" path="res://objects/brick.tscn" id="11_qutq2"]
|
[ext_resource type="PackedScene" uid="uid://bymro4t7angv5" path="res://objects/brick.tscn" id="11_qutq2"]
|
||||||
|
[ext_resource type="Script" path="res://scripts/components/StompDamageComponent.gd" id="12_0nvxt"]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_hdsg1"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_hdsg1"]
|
||||||
size = Vector2(16, 31)
|
size = Vector2(16, 31)
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_vad0t"]
|
||||||
|
size = Vector2(16, 32)
|
||||||
|
|
||||||
[node name="Brick Player" type="CharacterBody2D"]
|
[node name="Brick Player" type="CharacterBody2D"]
|
||||||
collision_layer = 4
|
collision_layer = 4
|
||||||
collision_mask = 11
|
collision_mask = 11
|
||||||
@@ -45,6 +49,14 @@ eye_left = NodePath("../Root/Left Eye")
|
|||||||
eye_right = NodePath("../Root/Right Eye")
|
eye_right = NodePath("../Root/Right Eye")
|
||||||
player_controller = NodePath("..")
|
player_controller = NodePath("..")
|
||||||
|
|
||||||
|
[node name="StompDamageArea" type="Area2D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 8
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="StompDamageArea"]
|
||||||
|
position = Vector2(0, 1)
|
||||||
|
shape = SubResource("RectangleShape2D_vad0t")
|
||||||
|
|
||||||
[node name="CoyoteTimer" type="Timer" parent="."]
|
[node name="CoyoteTimer" type="Timer" parent="."]
|
||||||
|
|
||||||
[node name="CanPickUpComponent" type="Node" parent="."]
|
[node name="CanPickUpComponent" type="Node" parent="."]
|
||||||
@@ -73,5 +85,11 @@ timer = NodePath("../ThrowTimer")
|
|||||||
|
|
||||||
[node name="ThrowTimer" type="Timer" parent="."]
|
[node name="ThrowTimer" type="Timer" parent="."]
|
||||||
|
|
||||||
|
[node name="StompDamageComponent" type="Node" parent="." node_paths=PackedStringArray("area2d", "root")]
|
||||||
|
script = ExtResource("12_0nvxt")
|
||||||
|
damage = 4.0
|
||||||
|
area2d = NodePath("../StompDamageArea")
|
||||||
|
root = NodePath("..")
|
||||||
|
|
||||||
[connection signal="on_death" from="HealthComponent" to="PlayerDeathComponent" method="_on_health_component_on_death"]
|
[connection signal="on_death" from="HealthComponent" to="PlayerDeathComponent" method="_on_health_component_on_death"]
|
||||||
[connection signal="on_health_change" from="HealthComponent" to="KnockbackComponent" method="_on_health_component_on_health_change"]
|
[connection signal="on_health_change" from="HealthComponent" to="KnockbackComponent" method="_on_health_component_on_health_change"]
|
||||||
|
38
scripts/components/stomp_damage_component.gd
Normal file
38
scripts/components/stomp_damage_component.gd
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
class_name StompDamageComponent
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var damage: float = 0.25
|
||||||
|
@export var area2d: Area2D
|
||||||
|
@export var root: Node2D
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready() -> void:
|
||||||
|
if not area2d:
|
||||||
|
printerr("No area2d assigned!")
|
||||||
|
return
|
||||||
|
if not root:
|
||||||
|
printerr("No root assigned!")
|
||||||
|
return
|
||||||
|
|
||||||
|
area2d.body_entered.connect(on_area2d_body_entered)
|
||||||
|
|
||||||
|
|
||||||
|
func deal_damage(target: HealthComponent) -> void:
|
||||||
|
target.decrease_health(damage)
|
||||||
|
|
||||||
|
|
||||||
|
func on_area2d_body_entered(body: Node2D) -> void:
|
||||||
|
if body.has_node("HealthComponent"):
|
||||||
|
var health_component: HealthComponent = body.get_node("HealthComponent")
|
||||||
|
if not health_component:
|
||||||
|
printerr("No HealthComponent assigned!")
|
||||||
|
return
|
||||||
|
|
||||||
|
if root.global_position.y < body.global_position.y:
|
||||||
|
if root is PlayerController:
|
||||||
|
var velocity: Vector2 = root.previous_velocity
|
||||||
|
print("Velocity: ", velocity)
|
||||||
|
if velocity.y > 0.0:
|
||||||
|
deal_damage(health_component)
|
||||||
|
print("Dealt damage to ", body)
|
||||||
|
|
@@ -5,6 +5,7 @@ extends CharacterBody2D
|
|||||||
|
|
||||||
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
|
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
|
||||||
var last_direction: Vector2 = Vector2.RIGHT
|
var last_direction: Vector2 = Vector2.RIGHT
|
||||||
|
var previous_velocity: Vector2 = Vector2.ZERO
|
||||||
|
|
||||||
@onready var root = $Root
|
@onready var root = $Root
|
||||||
@onready var coyote_timer: Timer = $CoyoteTimer
|
@onready var coyote_timer: Timer = $CoyoteTimer
|
||||||
@@ -62,6 +63,7 @@ func _physics_process(delta):
|
|||||||
else:
|
else:
|
||||||
velocity.x = move_toward(velocity.x, 0, speed)
|
velocity.x = move_toward(velocity.x, 0, speed)
|
||||||
|
|
||||||
|
previous_velocity = velocity
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
func jump():
|
func jump():
|
||||||
|
Reference in New Issue
Block a user