Jump to content
Sign in to follow this  
Canti

problema de recursividad?

Recommended Posts

Hola a todos,

miro mucho este foro pero no suelo escribir, a ver si alguien puede ayudarme con un problema que tengo.

Tengo la siguiente declaración de función:

public void MoveTo(Vector3Int startPos, Vector3Int endPos, Action onArrivedAtPosition = null)

la función internamente hace que un Gameobject se mueva de una posición a otra y al llegar al destino dispara una acción.

Desde otra clase estoy llamando a éste método y haga algo al llegar al destino:

workerMovement.MoveTo(pathfinding.GetTilemapToArray(workerPos), pickAndCarryTask.resourcePos, () =>
{
aqui iria el código de lo que quiero que haga despues
});

estoy intentando hacer un juego de simulación/construcción, en concreto estoy con la tarea de que un personaje vaya hasta una posición, recoja algo del suelo y lo lleve a otra posición para almacenarlo. La posición de destino esta definida dentro de un área pongamos de 2x2, es decir habría 4 celdillas y pongamos que en cada celdilla caben 50 unidades de lo que se vaya a almacenar. Ahora supongamos que el personaje ha cogido 100 unidades de madera pero en la celdilla solo caben 50 por lo que debería dejar el resto en otra celda vacía del mismo área.

La primera idea que tuve fue meter la llamada al método MoveTo dentro de bucle while, de ésta forma (lo pongo en pseudocódigo):

while (inventarioPersonaje > 0)
{
	busca una casilla libre en el area de almacenamiento
	llama al método MoveTo(posicion inicial, posicion final, () => { descarga el material del inventario });	
}

pero éste código no funciona porque después de ejecutar la llamada al método MoveTo vuelve a entrar por el bucle while sin haber llegado a su destino y descargado el material.

¿Alguien sabe cómo podría plantear el problema?

Muchas gracias.

Share this post


Link to post
Share on other sites

Normal que continúe el bucle, ya que la descarga del material se produce en una lambda. Si te interesa que vaya haciendo y esperando a que termine la descarga del material en cada MoveTo, lo mejor sería una coroutine con yield return para la espera y después ejecutar la descarga del material.

Share this post


Link to post
Share on other sites

perdona, no te he entendido, ¿te refieres a convertir la función MoveTo en coroutine?

Share this post


Link to post
Share on other sites

Si. Así como tendrás también que convertir la que contiene el while. De este modo podrás hacer yield return MoveTo... y luego la descarga de material.

 

Edited by iRobb

Share this post


Link to post
Share on other sites

muchas gracias!!!, ya me ha funcionado con Coroutines como dijiste.

Edited by Canti

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...