#help with player hunting script

1 messages · Page 1 of 1 (latest)

unkempt matrix
#

my enemy now when aligned vertically with the player will just eat it?? it doesnt even move up to it the player straight up dissapears LOL. for reference it didnt do this before.

heres my script:

extends CharacterBody2D
signal caught_player(caught_position: Vector2)
var step_counter = 0
var player_position: Vector2 # stores initial position
var enemy_position: Vector2 # stores initial position
var tile_size: Vector2  # The size of one tile (retrieved from the TileMap)
var tilemap: TileMap  # Reference to the TileMap


func _ready():
    tilemap = get_parent().get_node("TileMap")
    # Get the size of the tiles from the TileMap
    tile_size = tilemap.tile_set.tile_size
    
          
func _on_player_moved(new_position: Vector2):
# called when player moves
    if new_position != player_position:
        player_position = new_position
        step_counter += 1  # step counter increments when player moves
            
        if step_counter >= 3 and (step_counter - 3) % 3 == 0:
            # trigger the enemy to start moving after initial 3 steps
            move_enemy_towards_player()
            # detect if enemy caught player
            # defined by if distance between the 2 entites is LESS THAN 1 tile
            if (enemy_position - player_position) < tile_size:
                # TODO: insert player caught logic
                emit_signal("caught_player", enemy_position)
                pass

func move_enemy_towards_player():
    enemy_position = position  # Get current enemy position
    
    var x_dif = player_position.x - enemy_position.x
    var y_dif = player_position.y - enemy_position.y

    var move_vector = Vector2.ZERO

    # Move only one tile per step
    if abs(x_dif) > abs(y_dif):
        move_vector.x = tile_size.x if x_dif > 0 else -tile_size.x
    else:
        move_vector.y = tile_size.y if y_dif > 0 else -tile_size.y

    # Handle collisions
    var collision_info = move_and_collide(move_vector)
    if collision_info:
        print("Collision detected, cannot move.")
    else:
        position += move_vector
        enemy_position = position  # Update enemy position

    # Check if the enemy caught the player
    if enemy_position == player_position:
        emit_signal("caught_player", enemy_position)
#

omg i fixed it haha