Combat adjustments, iframe + knockback fixes
This commit is contained in:
parent
f57c79a9d1
commit
f979770250
3 changed files with 32 additions and 8 deletions
|
|
@ -21,7 +21,7 @@ albedo_color = Color(0.61, 0.28791997, 0.17079999, 1)
|
||||||
size = Vector3(1.2, 1, 1.3)
|
size = Vector3(1.2, 1, 1.3)
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yqjtg"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yqjtg"]
|
||||||
radius = 0.25
|
radius = 0.15
|
||||||
height = 1.0
|
height = 1.0
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0tnpc"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0tnpc"]
|
||||||
|
|
@ -149,6 +149,10 @@ _data = {
|
||||||
&"leap": SubResource("Animation_dinhu")
|
&"leap": SubResource("Animation_dinhu")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_vtaks"]
|
||||||
|
radius = 0.3
|
||||||
|
height = 0.6
|
||||||
|
|
||||||
[node name="Game" type="Node3D" unique_id=1358608749]
|
[node name="Game" type="Node3D" unique_id=1358608749]
|
||||||
script = ExtResource("1_gee14")
|
script = ExtResource("1_gee14")
|
||||||
|
|
||||||
|
|
@ -250,6 +254,12 @@ texture = ExtResource("8_vtaks")
|
||||||
root_node = NodePath("../..")
|
root_node = NodePath("../..")
|
||||||
libraries/ = SubResource("AnimationLibrary_kvuet")
|
libraries/ = SubResource("AnimationLibrary_kvuet")
|
||||||
|
|
||||||
|
[node name="HitCollision" type="Area3D" parent="Slime" unique_id=1071990193]
|
||||||
|
|
||||||
|
[node name="Collision" type="CollisionShape3D" parent="Slime/HitCollision" unique_id=502790258]
|
||||||
|
shape = SubResource("CapsuleShape3D_vtaks")
|
||||||
|
debug_color = Color(0.9020641, 0, 0.13776582, 0.41960785)
|
||||||
|
|
||||||
[node name="Sun" type="DirectionalLight3D" parent="." unique_id=1000747668]
|
[node name="Sun" type="DirectionalLight3D" parent="." unique_id=1000747668]
|
||||||
transform = Transform3D(5.337265e-08, 0.90171933, -0.4323222, -0.3453802, 0.40571806, 0.8462301, 0.93846303, 0.14931537, 0.31143594, 0, 0, 0)
|
transform = Transform3D(5.337265e-08, 0.90171933, -0.4323222, -0.3453802, 0.40571806, 0.8462301, 0.93846303, 0.14931537, 0.31143594, 0, 0, 0)
|
||||||
shadow_enabled = true
|
shadow_enabled = true
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ var face_left = false
|
||||||
var combatable = true
|
var combatable = true
|
||||||
|
|
||||||
var iframes = 0
|
var iframes = 0
|
||||||
|
var knockback_time = 0
|
||||||
var health = 100
|
var health = 100
|
||||||
|
|
||||||
@onready var game = get_parent()
|
@onready var game = get_parent()
|
||||||
|
|
@ -19,6 +20,14 @@ func hit_me():
|
||||||
iframes = 0.5
|
iframes = 0.5
|
||||||
health -= 10
|
health -= 10
|
||||||
|
|
||||||
|
func on_hit(hitter: Node3D = null) -> void:
|
||||||
|
iframes = 0.8
|
||||||
|
|
||||||
|
if hitter:
|
||||||
|
knockback_time = 0.25
|
||||||
|
velocity += hitter.global_position.direction_to(global_position) * 8
|
||||||
|
velocity.y = 0
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$DreamerBody.look_at(game.get_node("PlayerCamera").global_position)
|
$DreamerBody.look_at(game.get_node("PlayerCamera").global_position)
|
||||||
$DreamerBody.rotation.x = 0
|
$DreamerBody.rotation.x = 0
|
||||||
|
|
@ -33,6 +42,9 @@ func _process(delta: float) -> void:
|
||||||
else:
|
else:
|
||||||
$DreamerBody/Body.modulate.a = 1
|
$DreamerBody/Body.modulate.a = 1
|
||||||
|
|
||||||
|
if knockback_time > 0:
|
||||||
|
knockback_time -= delta
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
if not is_on_floor():
|
if not is_on_floor():
|
||||||
velocity += get_gravity() * delta
|
velocity += get_gravity() * delta
|
||||||
|
|
@ -40,9 +52,6 @@ func _physics_process(delta: float) -> void:
|
||||||
var viewport_half = (get_viewport().get_visible_rect().size / 2.0)
|
var viewport_half = (get_viewport().get_visible_rect().size / 2.0)
|
||||||
var player_position = camera.unproject_position(global_transform.origin)
|
var player_position = camera.unproject_position(global_transform.origin)
|
||||||
|
|
||||||
print(viewport_half)
|
|
||||||
print(player_position)
|
|
||||||
|
|
||||||
if face_left:
|
if face_left:
|
||||||
$DreamerBody.rotation.y = face_rotation + deg_to_rad(180)
|
$DreamerBody.rotation.y = face_rotation + deg_to_rad(180)
|
||||||
else:
|
else:
|
||||||
|
|
@ -106,15 +115,15 @@ func _physics_process(delta: float) -> void:
|
||||||
body.on_knockback()
|
body.on_knockback()
|
||||||
|
|
||||||
var direction = (camera.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
var direction = (camera.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||||
if direction:
|
if direction and (knockback_time <= 0):
|
||||||
velocity.x = direction.x * SPEED
|
velocity.x = direction.x * SPEED
|
||||||
velocity.z = direction.z * SPEED
|
velocity.z = direction.z * SPEED
|
||||||
|
|
||||||
$DreamerBody/Animator.set("parameters/walk/blend_amount", abs(direction.length()))
|
$DreamerBody/Animator.set("parameters/walk/blend_amount", abs(direction.length()))
|
||||||
else:
|
else:
|
||||||
|
|
||||||
velocity.x = move_toward(velocity.x, 0, SPEED)
|
velocity.x = move_toward(velocity.x, 0, delta * 24)
|
||||||
velocity.z = move_toward(velocity.z, 0, SPEED)
|
velocity.z = move_toward(velocity.z, 0, delta * 24)
|
||||||
|
|
||||||
$DreamerBody/Animator.set("parameters/walk/blend_amount", 0)
|
$DreamerBody/Animator.set("parameters/walk/blend_amount", 0)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ var face_rotation = null
|
||||||
var face_left = false
|
var face_left = false
|
||||||
|
|
||||||
var combatable = false
|
var combatable = false
|
||||||
var health = 100
|
var health = 40
|
||||||
var mid_knockback = false
|
var mid_knockback = false
|
||||||
|
|
||||||
@onready var player = get_parent().get_node("Player")
|
@onready var player = get_parent().get_node("Player")
|
||||||
|
|
@ -107,6 +107,11 @@ func _physics_process(delta: float) -> void:
|
||||||
|
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
|
||||||
|
if player in $HitCollision.get_overlapping_bodies():
|
||||||
|
if player.iframes <= 0:
|
||||||
|
player.health -= 20
|
||||||
|
player.on_hit(self)
|
||||||
|
|
||||||
if mid_knockback: mid_knockback = false
|
if mid_knockback: mid_knockback = false
|
||||||
|
|
||||||
$Shadow.global_position.y = $Floorcast.get_collision_point().y + 0.01
|
$Shadow.global_position.y = $Floorcast.get_collision_point().y + 0.01
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue