/* * Funcion: spawnInCircle() * * Simula la introduccion de liquido en celdas alrededor del centro del entorno. */ public void spawnInCircle() { if (testDelay > 0) { testDelay = 0; Vector3 indexes = sicStartPosition; if (indexes.x <= tamano_x / 4 && indexes.z < tamano_z / 4 * 3) { indexes.z++; } if (indexes.z >= tamano_z / 4 * 3 && indexes.x < tamano_x / 4 * 3) { indexes.x++; } if (indexes.x >= tamano_x / 4 * 3 && indexes.z > tamano_z / 4) { indexes.z--; } if (indexes.z <= tamano_z / 4 && indexes.x > tamano_x / 4) { indexes.x--; } Celda cell = getCelda((int)indexes.x, (int)indexes.y, (int)indexes.z); if (cell.estaVacia() && !cell.esCeldaSolida()) { cell.setSaturacion(1f); } sicStartPosition = indexes; } testDelay++; }
/* * Funcion: puedeFluirHaciaAbajo() * * Devuelve verdadero si el liquido en la celda actual puede fluir hacia la celda abajo, falso si no. */ bool puedeFluirHaciaAbajo() { Celda abajo = getCeldaAbajo(); if (abajo != null && !abajo.esCeldaSolida() && abajo.saturacion < 1f) { return(true); } return(false); }
/* * Funcion: spawnAtRandom() * * Simula la introduccion de liquido en celdas aleatorias del entorno. */ public void spawnAtRandom() { if (testDelay > 0) { testDelay = 0; float min_height = 0.7f; Vector3 indexes = new Vector3(UnityEngine.Random.Range(0, tamano_x), UnityEngine.Random.Range(tamano_y * min_height, tamano_y), UnityEngine.Random.Range(0, tamano_z)); Celda cell = getCelda((int)indexes.x, (int)indexes.y, (int)indexes.z); if (cell.estaVacia() && !cell.esCeldaSolida()) { cell.setSaturacion(1f); } } testDelay++; }