private void GenerarTierra() { Edificio[] edificios = GameObject.FindObjectsOfType <Edificio>(); foreach (Edificio edificio in edificios) { if (edificio.transform.parent.name != transform.parent.name || !edificio.gameObject.activeSelf) { continue; } EdificioData data = edificio.data; int posY = Mathf.RoundToInt(data.PosicionRelativa.y / sueloSize); int auxY = 0; if (data.PosicionRelativa.y % sueloSize >= sueloSize / 2) { auxY--; } int posX = Mathf.RoundToInt(data.PosicionRelativa.x / sueloSize); int auxX = 0; if (data.PosicionRelativa.x % sueloSize >= sueloSize / 2) { auxX--; } for (int y = posY + auxY; y < posY + data.Alto / sueloSize; y++) { for (int x = posX + auxX; x < posX + data.Ancho / sueloSize; x++) { suelo[x, y].GetComponent <SpriteRenderer>().sprite = GetSpriteSuelo(data.suelo); suelo[x, y].name = data.suelo + "_Edificio"; m_ciudad.PosicionesActuales[x, y] = 0; } } } }
private void GenerarCaminosAdjacentes() { int x, y; Edificio[] edificios = GameObject.FindObjectsOfType <Edificio>(); foreach (Edificio edificio in edificios) { if (edificio.transform.parent.name != transform.parent.name || !edificio.gameObject.activeSelf) { continue; } EdificioData data = edificio.data; TreeNode nodoMasCercano; try { foreach (Vector2 posicion in PathFinder.GetVectoresRuta(Utilidades.GetPosicionGrilla(data.Entrada, m_ciudad.transform), caminoPrincipalGrilla, m_ciudad, false, null, out nodoMasCercano)) { x = (int)posicion.x; y = (int)posicion.y; if (m_ciudad.PosicionesActuales[x, y] > (int)data.suelo) { suelo[x, y].GetComponent <SpriteRenderer>().sprite = GetSpriteSuelo(data.suelo); suelo[x, y].name = data.suelo.ToString(); m_ciudad.PosicionesActuales[x, y] = (int)data.suelo; } } } catch { Debug.LogWarning("No hay ruta"); } } }
public EdificioData GetEdificioObjetivo() { EdificioData edificioObjetivo = null; float distancia; float menorDistancia = float.MaxValue; for (int i = 0; i < m_objetivos.Count; i++) { distancia = Vector2.Distance(m_objetivos[i].Entrada, m_npc.transform.position); if (distancia < menorDistancia) { menorDistancia = distancia; edificioObjetivo = m_objetivos[i]; } } return(edificioObjetivo); }
public void SatisfacerNecesidad(EdificioData edificio) { //TO.DO! Valor dependiende del edificio necesidades.Find(x => x.Nombre == edificio.necesidad).Valor += Utilidades.HorasRealesToSecsJuego(edificio.horasSatisfaccion); dinero -= edificio.costo; }
public override void Update() { switch (m_estado) { case EEstado.EnRuta: if (!m_pathfinder.enRuta) { m_pathfinder.rutaOriginal.Clear(); m_npc.estadoActual = EstadoNPC.Ocupado; m_edificioObjetivo = GetEdificioObjetivo(); if (m_edificioObjetivo.Entrada != m_npc.transform.position) { //Debug.LogError(transform.position + " --> " + edificioObjetivo.Entrada); m_pies.Mover(m_edificioObjetivo.Entrada); } m_estado = EEstado.Posicionarse; } break; case EEstado.Posicionarse: if (!m_pies.moviendo) { Entrar(); m_estado = EEstado.Entrando; } break; case EEstado.Entrando: if (!m_pies.moviendo) { m_edificioObjetivo.entradaLibre = true; m_pathfinder.EntrarEdificio(); m_time = 0; m_estado = EEstado.EnEdifio; } break; case EEstado.EnEdifio: m_time += Time.deltaTime; if (m_time > Utilidades.HorasRealesToSecsJuego(m_edificioObjetivo.horasDuracion)) { m_npc.SatisfacerNecesidad(m_edificioObjetivo); m_npc.ojos.Enable(true); m_estado = EEstado.Esperando; } break; case EEstado.Esperando: Vector2 posSalida = Utilidades.GetPosicionGrilla(m_edificioObjetivo.Entrada, m_ciudad.transform); if (m_edificioObjetivo.entradaLibre && m_pathfinder.ComprobarObjetivo(posSalida)) { m_npc.estadoActual = EstadoNPC.Caminando; Vector3 posSalidaReal = Utilidades.GetPosicionReal(posSalida, m_ciudad.transform); m_pies.SetEnabledCol(true); m_npc.col2D.enabled = true; m_pathfinder.SalirEdificio(posSalida); //Debug.LogError(transform.position + " --> " + posSalidaReal); m_pies.Mover(posSalidaReal); m_npc.animador.CambiarAlpha(0.5f); m_edificioObjetivo.entradaLibre = false; m_estado = EEstado.Saliendo; } break; case EEstado.Saliendo: if (!m_pies.moviendo) { m_npc.estadoActual = EstadoNPC.Quieto; m_edificioObjetivo.entradaLibre = true; m_objetivos.Remove(m_edificioObjetivo); m_pathfinder.ClearRutaActual(); if (m_objetivos.Count > 0) { GoNext(); } else { m_npc.movimiento.SiguienteAccion(); } } break; } }