TIP: Con SOLID_NOT no hay colisión alguna, seria lo ideal para tu idea, pero el problema es que no se puede detectar el evento de colisión por lo tanto se anularía el efecto de rebote al colisionar.
Para que no se frene al tocar alguna entidad en su camino podrías darle la propiedad SOLID_TRIGGER y verificar al momento de colisión entre las 2 entidades y indicarle una velocidad a dicha entidad en sentido contrario.
Luego para verificar si llego a su punto de destino es fácil, primero si tienes el origen de destino, calculas la velocidad dandole un escalar velocidad constante, con ello puedes hacer lo siguiente que no es lo mas conveniente:
( No es lo mas conveniente, ya que puede que sea inestable ).
- Calcular el tiempo con un simple calculo obteniendo la distancia entre origen de partida y origen de destino y la velocidad escalar constante.
Calculo:
Tiempo = Distancia / Velocidad ... [ m / s ]
Y luego con ese tiempo obtenido dar comienzo a un TASK para que vuelva a su origen de partida
( Este es el mas conveniente, ya que verifica constantemente )
- Una vez que la entidad es lanzada en su trayectoria mediante la velocidad aplicada, inicias un THINK referido a dicha entidad, y repites el llamado del mismo THINK varias veces, verificando dentro del HANDLER registrado [ register_think ( ENGINE ) ], si el origen de la entidad es igual al origen de destino.
PHP Code:
register_think( "String: sClassname", "handler_think" );
// handler_think
{
static Float:v_fOrigin[ 3 ];
pev( ent, pev_origin, v_fOrigin );
// v_fStartOrigin es la variable que salva el vector de partida de la entidad...
if( v_fOrigin[ 0 ] == v_fStartOrigin[ 0 ] && v_fOrigin[ 1 ] == v_fStartOrigin[ 1 ] && v_fOrigin[ 2 ] == v_fStartOrigin[ 2 ] )
{
// Llego...
return 1;
}
set_pev( ent, pev_nextthink, get_gametime() + 0.2 );
return 0;
}
Saludos y espero poder ayudarte.
__________________