kick force
This commit is contained in:
+4
-6
@@ -1,11 +1,9 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dyz3no6pcd567"]
|
[gd_scene format=3 uid="uid://dy03no6pcd567"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/Main.gd" id="1_main"]
|
[ext_resource type="Script" uid="uid://bjqcstgcoedos" path="res://scripts/Main.gd" id="1_main"]
|
||||||
|
|
||||||
[node name="Main" type="Node3D"]
|
[node name="Main" type="Node3D" unique_id=1185365760]
|
||||||
script = ExtResource("1_main")
|
script = ExtResource("1_main")
|
||||||
|
|
||||||
[node name="SpawnTimer" type="Timer" parent="."]
|
[node name="SpawnTimer" type="Timer" parent="." unique_id=1093753659]
|
||||||
wait_time = 1.5
|
wait_time = 1.5
|
||||||
one_shot = false
|
|
||||||
autostart = false
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const WALL_BOUNCE := 0.4
|
|||||||
const WALL_SELF_DMG := 0.4
|
const WALL_SELF_DMG := 0.4
|
||||||
|
|
||||||
var kickable_type: String = "boulder"
|
var kickable_type: String = "boulder"
|
||||||
|
var tier: int = 2
|
||||||
var state: State = State.IDLE
|
var state: State = State.IDLE
|
||||||
var fly_vel: Vector3 = Vector3.ZERO
|
var fly_vel: Vector3 = Vector3.ZERO
|
||||||
var health: float = 150.0
|
var health: float = 150.0
|
||||||
|
|||||||
+3
-1
@@ -12,6 +12,7 @@ enum State { CHASING, FLYING, STUNNED, DEAD, MERGING }
|
|||||||
static var first_leather_spawned: bool = false
|
static var first_leather_spawned: bool = false
|
||||||
|
|
||||||
var kickable_type: String = ""
|
var kickable_type: String = ""
|
||||||
|
var tier: int = 1
|
||||||
var move_speed: float = 3.0
|
var move_speed: float = 3.0
|
||||||
var health: int = 30
|
var health: int = 30
|
||||||
var damage_to_player: int = 8
|
var damage_to_player: int = 8
|
||||||
@@ -53,6 +54,7 @@ func setup(type: String, wave: int) -> void:
|
|||||||
enemy_type = type
|
enemy_type = type
|
||||||
kickable_type = type
|
kickable_type = type
|
||||||
wave_num = wave
|
wave_num = wave
|
||||||
|
tier = enemy_level
|
||||||
match type:
|
match type:
|
||||||
"slime":
|
"slime":
|
||||||
move_speed = 2.8 + wave * 0.12
|
move_speed = 2.8 + wave * 0.12
|
||||||
@@ -178,7 +180,7 @@ func _stun_tick(delta: float) -> void:
|
|||||||
_enter_chase()
|
_enter_chase()
|
||||||
|
|
||||||
func can_merge_with(other: Node3D, collision_speed: float) -> bool:
|
func can_merge_with(other: Node3D, collision_speed: float) -> bool:
|
||||||
return (collision_speed >= 3.0
|
return (collision_speed >= 18.0
|
||||||
and other.get("enemy_type") == enemy_type
|
and other.get("enemy_type") == enemy_type
|
||||||
and other.get("enemy_level") == enemy_level
|
and other.get("enemy_level") == enemy_level
|
||||||
and not is_upgrading
|
and not is_upgrading
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const MIN_SPEED := 0.3
|
|||||||
const WALL_BOUNCE := 0.7
|
const WALL_BOUNCE := 0.7
|
||||||
|
|
||||||
var kickable_type: String = "leather"
|
var kickable_type: String = "leather"
|
||||||
|
var tier: int = 1
|
||||||
var state: State = State.IDLE
|
var state: State = State.IDLE
|
||||||
var fly_vel: Vector3 = Vector3.ZERO
|
var fly_vel: Vector3 = Vector3.ZERO
|
||||||
var damage_modifier: float = 0.0
|
var damage_modifier: float = 0.0
|
||||||
|
|||||||
+2
-1
@@ -227,7 +227,8 @@ func _spawn_upgraded_enemy(pos: Vector3, type: String, level: int, w: int) -> Ch
|
|||||||
add_child(enemy)
|
add_child(enemy)
|
||||||
enemy.setup(type, w)
|
enemy.setup(type, w)
|
||||||
enemy.target = player
|
enemy.target = player
|
||||||
enemy.enemy_level = level + 1
|
enemy.enemy_level = level
|
||||||
|
enemy.tier = level
|
||||||
enemy.global_position = pos
|
enemy.global_position = pos
|
||||||
enemy.connect("died", _on_enemy_died)
|
enemy.connect("died", _on_enemy_died)
|
||||||
enemy.connect("merged", _on_enemy_merged)
|
enemy.connect("merged", _on_enemy_merged)
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ static var _list: Array[Dictionary] = [
|
|||||||
{
|
{
|
||||||
"ingredients": ["leather", "stick"],
|
"ingredients": ["leather", "stick"],
|
||||||
"result_scene": "res://scenes/LeatherBoots.tscn",
|
"result_scene": "res://scenes/LeatherBoots.tscn",
|
||||||
"speed_threshold": 0.5,
|
"speed_threshold": 18.0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ingredients": ["rock", "rock"],
|
"ingredients": ["rock", "rock"],
|
||||||
"result_scene": "res://scenes/Boulder.tscn",
|
"result_scene": "res://scenes/Boulder.tscn",
|
||||||
"speed_threshold": 5.0,
|
"speed_threshold": 18.0,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
+16
-3
@@ -11,6 +11,7 @@ signal health_changed(current: int, maximum: int)
|
|||||||
@export var max_health: int = 100
|
@export var max_health: int = 100
|
||||||
|
|
||||||
var health: int = max_health
|
var health: int = max_health
|
||||||
|
var tier: int = 0
|
||||||
var kick_timer: float = 0.0
|
var kick_timer: float = 0.0
|
||||||
var invincible_timer: float = 0.0
|
var invincible_timer: float = 0.0
|
||||||
var is_alive: bool = true
|
var is_alive: bool = true
|
||||||
@@ -135,9 +136,9 @@ func _do_kick() -> void:
|
|||||||
forward.y = 0.0
|
forward.y = 0.0
|
||||||
forward = forward.normalized() if forward.length() > 0.01 else Vector3(0.0, 0.0, -1.0)
|
forward = forward.normalized() if forward.length() > 0.01 else Vector3(0.0, 0.0, -1.0)
|
||||||
var half_cos: float = cos(deg_to_rad(kick_angle * 0.5))
|
var half_cos: float = cos(deg_to_rad(kick_angle * 0.5))
|
||||||
var enemies := get_tree().get_nodes_in_group("enemies") + get_tree().get_nodes_in_group("kickable")
|
var targets := get_tree().get_nodes_in_group("enemies") + get_tree().get_nodes_in_group("kickable")
|
||||||
var kicked_any := false
|
var kicked_any := false
|
||||||
for e in enemies:
|
for e in targets:
|
||||||
if not is_instance_valid(e):
|
if not is_instance_valid(e):
|
||||||
continue
|
continue
|
||||||
var en := e as Node3D
|
var en := e as Node3D
|
||||||
@@ -149,7 +150,18 @@ func _do_kick() -> void:
|
|||||||
if dist < 0.1 or dist > kick_range:
|
if dist < 0.1 or dist > kick_range:
|
||||||
continue
|
continue
|
||||||
if (diff / dist).dot(forward) >= half_cos:
|
if (diff / dist).dot(forward) >= half_cos:
|
||||||
en.call("receive_kick", diff / dist, kick_force)
|
var obj_tier: int = en.get("tier") if en.get("tier") != null else 0
|
||||||
|
var diff_tier := tier - obj_tier
|
||||||
|
var force: float
|
||||||
|
if diff_tier < 0:
|
||||||
|
force = 15.0
|
||||||
|
elif diff_tier == 0:
|
||||||
|
force = 50.0
|
||||||
|
elif diff_tier == 1:
|
||||||
|
force = 70.0
|
||||||
|
else:
|
||||||
|
force = 80.0
|
||||||
|
en.call("receive_kick", diff / dist, force)
|
||||||
kicked_any = true
|
kicked_any = true
|
||||||
if kicked_any:
|
if kicked_any:
|
||||||
_squish_effect()
|
_squish_effect()
|
||||||
@@ -218,6 +230,7 @@ func apply_upgrade(id: String) -> void:
|
|||||||
emit_signal("health_changed", health, max_health)
|
emit_signal("health_changed", health, max_health)
|
||||||
|
|
||||||
func apply_upgrade_boots(speed_bonus: float, _tier: int) -> void:
|
func apply_upgrade_boots(speed_bonus: float, _tier: int) -> void:
|
||||||
|
tier += _tier
|
||||||
move_speed += speed_bonus
|
move_speed += speed_bonus
|
||||||
var tw := create_tween()
|
var tw := create_tween()
|
||||||
tw.tween_property(player_mat, "albedo_color", Color(1.0, 0.85, 0.2), 0.1)
|
tw.tween_property(player_mat, "albedo_color", Color(1.0, 0.85, 0.2), 0.1)
|
||||||
|
|||||||
+2
-1
@@ -4,12 +4,13 @@ signal destroyed
|
|||||||
|
|
||||||
enum State { IDLE, FLYING }
|
enum State { IDLE, FLYING }
|
||||||
|
|
||||||
const AIR_FRICTION := 0.84
|
const AIR_FRICTION := 0.9
|
||||||
const MIN_SPEED := 0.5
|
const MIN_SPEED := 0.5
|
||||||
const WALL_BOUNCE := 0.5
|
const WALL_BOUNCE := 0.5
|
||||||
const WALL_SELF_DMG := 0.6
|
const WALL_SELF_DMG := 0.6
|
||||||
|
|
||||||
var kickable_type: String = "rock"
|
var kickable_type: String = "rock"
|
||||||
|
var tier: int = 0
|
||||||
var state: State = State.IDLE
|
var state: State = State.IDLE
|
||||||
var fly_vel: Vector3 = Vector3.ZERO
|
var fly_vel: Vector3 = Vector3.ZERO
|
||||||
var health: float = 60.0
|
var health: float = 60.0
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const WALL_BOUNCE := 0.5
|
|||||||
const WALL_SELF_DMG := 0.5
|
const WALL_SELF_DMG := 0.5
|
||||||
|
|
||||||
var kickable_type: String = "stick"
|
var kickable_type: String = "stick"
|
||||||
|
var tier: int = 0
|
||||||
var state: State = State.IDLE
|
var state: State = State.IDLE
|
||||||
var fly_vel: Vector3 = Vector3.ZERO
|
var fly_vel: Vector3 = Vector3.ZERO
|
||||||
var health: float = 40.0
|
var health: float = 40.0
|
||||||
|
|||||||
Reference in New Issue
Block a user