a game about throwing hammers made for the github game off
Diffstat (limited to 'enemys/wrencher.gd')
-rw-r--r--enemys/wrencher.gd120
1 files changed, 63 insertions, 57 deletions
diff --git a/enemys/wrencher.gd b/enemys/wrencher.gd
index 771a878..4952726 100644
--- a/enemys/wrencher.gd
+++ b/enemys/wrencher.gd
@@ -11,75 +11,81 @@ extends Enemy
var axis := 0
var current_dir := 0
-enum States {MOVE, FIRE}
+enum States { MOVE, FIRE }
var state := States.MOVE
var bullet_timer: SceneTreeTimer = null
+
func _ready() -> void:
- up_direction = global_position.direction_to(muzzle.global_position).round()
- axis = 1 if up_direction.x != 0 else 0
- current_dir = -1 if randi() % 2 == 0 else 1
+ up_direction = global_position.direction_to(muzzle.global_position).round()
+ axis = 1 if up_direction.x != 0 else 0
+ current_dir = -1 if randi() % 2 == 0 else 1
func _physics_process(_delta: float) -> void:
- match state:
- States.MOVE:
- var dir := brain()
- animator.play(&"normal")
+ match state:
+ States.MOVE:
+ var dir := brain()
+ animator.play(&"normal")
- velocity[axis] += dir * ACCELERATION
- velocity[axis] = clampf(velocity[axis], -MAX_SPEED, MAX_SPEED)
- if (dir == 0):
- velocity[axis] = lerpf(velocity[axis], 0, FRICTION)
- floorcast.position.x = 0 + (dir * 10)
- move_and_slide()
- States.FIRE:
- animator.play(&"fire")
- await animator.animation_finished
- state = States.MOVE
+ velocity[axis] += dir * ACCELERATION
+ velocity[axis] = clampf(velocity[axis], -MAX_SPEED, MAX_SPEED)
+ if dir == 0:
+ velocity[axis] = lerpf(velocity[axis], 0, FRICTION)
+ if up_direction in [Vector2.DOWN, Vector2.LEFT]:
+ floorcast.position.x = -(sign(dir) * 10)
+ else:
+ floorcast.position.x = (sign(dir) * 10)
+ move_and_slide()
+ States.FIRE:
+ animator.play(&"fire")
+ await animator.animation_finished
+ state = States.MOVE
func fire() -> void:
- var hammer: Hammer = Utils.get_hammer().instantiate()
- hammer.global_position = muzzle.global_position
- hammer.steer_force = 0.01 # cheat
- hammer.target = Globals.player
- hammer.direction = up_direction
- bullet_timer = get_tree().create_timer(SHOT_COOLDOWN)
- player_cast.enabled = false
- Globals.levelmanager.current_level.add_child(hammer)
+ var hammer: Hammer = Utils.get_hammer().instantiate()
+ hammer.global_position = muzzle.global_position
+ hammer.steer_force = 0.01 # cheat
+ hammer.target = Globals.player
+ hammer.direction = up_direction
+ bullet_timer = get_tree().create_timer(SHOT_COOLDOWN)
+ player_cast.enabled = false
+ Globals.levelmanager.current_level.add_child(hammer)
+
func brain() -> float:
- var dir := 0.0
- if bullet_timer == null or bullet_timer.time_left < 0:
- if not player_cast.enabled:
- bullet_timer = null
- player_cast.force_shapecast_update()
- player_cast.enabled = true
- for i in player_cast.get_collision_count():
- if player_cast.get_collider(i) is Player:
- if player_cast.get_collision_count() != 1:
- player_cast.target_position.y = -((global_position.y-Globals.player.global_position.y) + 30)
- player_cast.force_shapecast_update()
- player_cast.target_position.y = -170
- if player_cast.get_collision_count() == 1:
- state = States.FIRE
- break
- if not state == States.FIRE:
- if is_on_wall():
- dir = -get_wall_axis()
- elif not floorcast.is_colliding():
- dir = -current_dir
- else:
- dir = current_dir
- current_dir = roundi(dir)
- return dir
+ var dir := 0.0
+ if bullet_timer == null or bullet_timer.time_left < 0:
+ if not player_cast.enabled:
+ bullet_timer = null
+ player_cast.force_shapecast_update()
+ player_cast.enabled = true
+ for i in player_cast.get_collision_count():
+ if player_cast.get_collider(i) is Player:
+ if player_cast.get_collision_count() != 1:
+ player_cast.target_position.y = -((global_position.y - Globals.player.global_position.y) + 30)
+ player_cast.force_shapecast_update()
+ player_cast.target_position.y = -170
+ if player_cast.get_collision_count() == 1:
+ state = States.FIRE
+ break
+ if not state == States.FIRE:
+ if is_on_wall():
+ dir = -get_wall_axis()
+ elif not floorcast.is_colliding():
+ dir = -current_dir
+ else:
+ dir = current_dir
+ current_dir = roundi(dir)
+ return dir
+
func get_wall_axis() -> int:
- var left := up_direction
- left[axis] = -1
- var right := up_direction
- right[axis] = 1
- var is_right_wall := test_move(transform, left)
- var is_left_wall := test_move(transform, right)
- return int(is_left_wall) - int(is_right_wall)
+ var left := up_direction
+ left[axis] = -1
+ var right := up_direction
+ right[axis] = 1
+ var is_right_wall := test_move(transform, left)
+ var is_left_wall := test_move(transform, right)
+ return int(is_left_wall) - int(is_right_wall)