I cant get the enemy to collide with the wall

Godot Version

4.5

Question

Hi i am pretty new trough programming, and trying to make a simple turn based 2d game on a 16x16 grid.

My enemy ai keeps going trough walls. It does collide with the player for as far as i can tell. Does anyone know what im doing wrong?

I am trying to figure out the code either trough videos or chatGPT, but i cant get it to work.

here is my enemy script:
extends CharacterBody2D

const TILE_SIZE := Vector2(16, 16)

@onready var tile_layer: TileMapLayer = get_parent().get_node(“TileMapLayer”)
@onready var player: Node = get_parent().get_node(“Player”)
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D

var move_tween: Tween

func _ready() → void:
player.player_did_a_move.connect(take_turn)

func take_turn() → void:
print(“Enemy turn”)

var directions := [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT]
directions.shuffle()

for dir in directions:
if can_move(dir):
move(dir)
return

func get_tile_pos() → Vector2i:
return tile_layer.local_to_map(tile_layer.to_local(global_position))

func get_player_tile_pos() → Vector2i:
return tile_layer.local_to_map(tile_layer.to_local(player.global_position))

func is_tile_blocked(tile_pos: Vector2i) → bool:
var tile_data := tile_layer.get_cell_tile_data(tile_pos)

return tile_data.get_custom_data(“blocked”) if tile_data.has_custom_data(“blocked”) else false

func can_move(dir: Vector2) → bool:
var target_tile := get_tile_pos() + Vector2i(dir)

if is_tile_blocked(target_tile):
return false

if target_tile == get_player_tile_pos():
return false

return true

func move(dir: Vector2) → bool:
if not can_move(dir):
return false

position += dir * TILE_SIZE
sprite.position = -dir * TILE_SIZE

if move_tween:
move_tween.kill()

move_tween = create_tween()
move_tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
move_tween.tween_property(sprite, “position”, Vector2.ZERO, 0.18)

return true

Check the collision layers and masks of the enemy and the tilemap.

1 Like

This might help: Physics introduction — Godot Engine (stable) documentation in English