Acá dejo el código con las correcciones que mencione:
Ahora mueve las posiciones de los puntos un lugar hacia atrás, lo que elimina el primer punto original, y luego genera un nuevo último punto.
Luego escanea el nuevo path para encontrar la posición correcta para continuar. Esta parte en particular, sin embargo, usa más fuerza bruta de la que me gustaría.
Por otro lado, la idea de tener dos paths intercambiándose sucesivamente debería funcionar sin problemas.
Código [Seleccionar]
//. Path Draw Debug
min_x = 0
min_y = 0
max_x = 0
max_y = 0
path_width = 0
path_height = 0
radio = 50
for(n=0; n < PathTotal; n++){
px = path_get_point_x(myPath, n)
py = path_get_point_y(myPath, n)
//. Calcula el Ancho y Alto General del Path
min_x = min(px, min_x)
min_y = min(py, min_y)
max_x = max(px, max_x)
max_y = max(py, max_y)
path_width = max_x - min_x
path_height = max_y - min_y
//. Dibuja los Puntos del Path
draw_ellipse_color((px-4), (py-4), (px+4), (py+4),
c_blue, c_blue, c_black)
//draw_text((px -4), (py -20), string(n))
//. Radio entre los puntos
if(n < 3)then draw_set_color(c_purple) //. Los 3 Memorizados
else draw_set_color(c_yellow) //. Los 3 Nuevos
draw_circle(px, py, radio, true)
}
//. Dibuja los Limites del Ancho y Alto del Path
MargenX = (view_wview - path_width) / 2
MargenY = (view_hview - path_height) / 2
draw_rectangle(MargenX, MargenY, MargenX + path_width, MargenY + path_height, c_blue)
draw_path(myPath, 0, 0, true)
//. Chequea el Estado de avance en el Path (path de 6 puntos)
//. Se activa cuando el objeto ha avanzado casi un 50% del recorrido
if(path_position > 0.495) {
show_debug_message('position: ' + string(path_position))
//. Mueve en las posiciones de todos los puntos un espacio hacia atras
for(n=0; n < PathTotal-1; n++){
vx = path_get_point_x(myPath, n+1)
vy = path_get_point_y(myPath, n+1)
path_change_point(myPath, n, vx, vy, 100)
show_debug_message('Path('+string(n)+'): ' + string(vx) + ','+ string(vy) )
}
//. Genera un nuevo último punto
dist = 0
do {
px = random(600)
py = random(600)
//. Comprueba que los Radios de Cada punto no queden muy cerca "radio*2"
for(k=0; k < PathTotal; k++){
mx = path_get_point_x(myPath, k)
my = path_get_point_y(myPath, k)
dist = point_distance(px, py, mx, my)
if(dist < radio*2) { break }
}
} until(dist > radio*2)
show_debug_message('Coord('+string(n)+'): ' +string(px)+' , '+string(py) +' Dist: '+ string(dist) )
path_change_point(myPath, n, px, py, 100)
//. Busca la nueva posicion en el path relativa a la anterior
n=0.15
do{
px = path_get_x(myPath,n)
py = path_get_y(myPath,n)
n+=0.0005
}until(n>=1 || ((round(x) == ceil(px) || round(x) == floor(px)) && (round(y) == ceil(py) || round(y) == floor(py))))
path_start(myPath, 8, 1, true)
path_position = n
}
Ahora mueve las posiciones de los puntos un lugar hacia atrás, lo que elimina el primer punto original, y luego genera un nuevo último punto.
Luego escanea el nuevo path para encontrar la posición correcta para continuar. Esta parte en particular, sin embargo, usa más fuerza bruta de la que me gustaría.
Por otro lado, la idea de tener dos paths intercambiándose sucesivamente debería funcionar sin problemas.