コード例 #1
0
 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;
             }
         }
     }
 }
コード例 #2
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");
            }
        }
    }
コード例 #3
0
ファイル: Movimiento.cs プロジェクト: anklagges/RPG-Tests
    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);
    }
コード例 #4
0
 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;
 }
コード例 #5
0
ファイル: Movimiento.cs プロジェクト: anklagges/RPG-Tests
    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;
        }
    }