I want to program slime to slowly move one way and once it reaches the edge of the platform - change direction and go to the left. Is there a way to do this?
I know I can put 2 invisible collision areas on both sides and mask them to interact only with the slime but TBH I don’t really like this solution and would like something I can reuse easier.
From what I know, one way to do this would be pathfinding. If you reuse the tilemap, or class the script, you could reuse it.But this would be overkill.
Maybe you could use if statements that change the slime’s direction if it reaches the edge.
You would just need to know or look at the positions of both edges.
Might be annoying, but simple…and not hard to reuse
func _process(_delta):
if $Enemy.position.x <100:
dir = Vector.RIGHT
if $Enemy.position.x > 300:
dir = Vector.LEFT
for the movement:
func _process(_delta): #same process function
velocity = speed * dir
move_and_slide()
This should make the enemy move left and right accordingly to the position. Note that these are just example vars, you can fully customize them, fitting to your game.
This is not reusable at all. I would like to be able to throw a CharacterBody2D onto any surface and once it reaches the edge of it, change its direction, setting up x coordinate ranges manually is not what I wanted at all. I need to somehow get tile beneath the body then get its neighbor tile, then if it exists and has collider do nothing, otherwise - allow body to go to the edge of current tile and change direction. I was able to find tile index of the tile below and tile index of the next tile at current direction but I’m not sure how do I get info about that tiles collider, global coordinates and size.