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)
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_yqjtg"]
|
||||
radius = 0.25
|
||||
radius = 0.15
|
||||
height = 1.0
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0tnpc"]
|
||||
|
|
@ -149,6 +149,10 @@ _data = {
|
|||
&"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]
|
||||
script = ExtResource("1_gee14")
|
||||
|
||||
|
|
@ -250,6 +254,12 @@ texture = ExtResource("8_vtaks")
|
|||
root_node = NodePath("../..")
|
||||
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]
|
||||
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
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ var face_left = false
|
|||
var combatable = true
|
||||
|
||||
var iframes = 0
|
||||
var knockback_time = 0
|
||||
var health = 100
|
||||
|
||||
@onready var game = get_parent()
|
||||
|
|
@ -19,6 +20,14 @@ func hit_me():
|
|||
iframes = 0.5
|
||||
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:
|
||||
$DreamerBody.look_at(game.get_node("PlayerCamera").global_position)
|
||||
$DreamerBody.rotation.x = 0
|
||||
|
|
@ -33,6 +42,9 @@ func _process(delta: float) -> void:
|
|||
else:
|
||||
$DreamerBody/Body.modulate.a = 1
|
||||
|
||||
if knockback_time > 0:
|
||||
knockback_time -= delta
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not is_on_floor():
|
||||
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 player_position = camera.unproject_position(global_transform.origin)
|
||||
|
||||
print(viewport_half)
|
||||
print(player_position)
|
||||
|
||||
if face_left:
|
||||
$DreamerBody.rotation.y = face_rotation + deg_to_rad(180)
|
||||
else:
|
||||
|
|
@ -106,15 +115,15 @@ func _physics_process(delta: float) -> void:
|
|||
body.on_knockback()
|
||||
|
||||
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.z = direction.z * SPEED
|
||||
|
||||
$DreamerBody/Animator.set("parameters/walk/blend_amount", abs(direction.length()))
|
||||
else:
|
||||
|
||||
velocity.x = move_toward(velocity.x, 0, SPEED)
|
||||
velocity.z = move_toward(velocity.z, 0, SPEED)
|
||||
velocity.x = move_toward(velocity.x, 0, delta * 24)
|
||||
velocity.z = move_toward(velocity.z, 0, delta * 24)
|
||||
|
||||
$DreamerBody/Animator.set("parameters/walk/blend_amount", 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ var face_rotation = null
|
|||
var face_left = false
|
||||
|
||||
var combatable = false
|
||||
var health = 100
|
||||
var health = 40
|
||||
var mid_knockback = false
|
||||
|
||||
@onready var player = get_parent().get_node("Player")
|
||||
|
|
@ -107,6 +107,11 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
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
|
||||
|
||||
$Shadow.global_position.y = $Floorcast.get_collision_point().y + 0.01
|
||||
|
|
|
|||
Loading…
Reference in a new issue