Exemplo n.º 1
0
    public static void Mapa(short Índice)
    {
        // Cria um arquivo temporário
        Listas.Estruturas.Mapas Dados = Listas.Mapa[Índice];
        FileInfo     Arquivo          = new FileInfo(Diretórios.Mapas_Dados.FullName + Índice + Diretórios.Formato);
        BinaryWriter Binário          = new BinaryWriter(Arquivo.OpenWrite());

        // Escreve os dados
        Binário.Write((short)(Dados.Revisão + 1));
        Binário.Write(Dados.Nome);
        Binário.Write(Dados.Largura);
        Binário.Write(Dados.Altura);
        Binário.Write(Dados.Moral);
        Binário.Write(Dados.Panorama);
        Binário.Write(Dados.Música);
        Binário.Write(Dados.Coloração);
        Binário.Write(Dados.Clima.Tipo);
        Binário.Write(Dados.Clima.Intensidade);
        Binário.Write(Dados.Fumaça.Textura);
        Binário.Write(Dados.Fumaça.VelocidadeX);
        Binário.Write(Dados.Fumaça.VelocidadeY);
        Binário.Write(Dados.Fumaça.Transparência);
        Binário.Write(Dados.LuzGlobal);
        Binário.Write(Dados.Iluminação);

        // Ligações
        for (short i = 0; i <= (short)Globais.Direções.Quantidade - 1; i++)
        {
            Binário.Write(Dados.Ligação[i]);
        }

        // Camadas
        Binário.Write((byte)(Dados.Camada.Count - 1));
        for (byte i = 0; i <= Dados.Camada.Count - 1; i++)
        {
            Binário.Write(Dados.Camada[i].Nome);
            Binário.Write(Dados.Camada[i].Tipo);

            // Azulejos
            for (byte x = 0; x <= Dados.Largura; x++)
            {
                for (byte y = 0; y <= Dados.Altura; y++)
                {
                    Binário.Write(Dados.Camada[i].Azulejo[x, y].x);
                    Binário.Write(Dados.Camada[i].Azulejo[x, y].y);
                    Binário.Write(Dados.Camada[i].Azulejo[x, y].Azulejo);
                    Binário.Write(Dados.Camada[i].Azulejo[x, y].Automático);
                }
            }
        }


        // Dados específicos dos azulejos
        for (byte x = 0; x <= Listas.Mapa[Índice].Largura; x++)
        {
            for (byte y = 0; y <= Listas.Mapa[Índice].Altura; y++)
            {
                Binário.Write(Dados.Azulejo[x, y].Atributo);
                Binário.Write(Dados.Azulejo[x, y].Dado_1);
                Binário.Write(Dados.Azulejo[x, y].Dado_2);
                Binário.Write(Dados.Azulejo[x, y].Dado_3);
                Binário.Write(Dados.Azulejo[x, y].Dado_4);
                Binário.Write(Dados.Azulejo[x, y].Zona);

                // Bloqueio direcional
                for (byte i = 0; i <= (byte)Globais.Direções.Quantidade - 1; i++)
                {
                    Binário.Write(Dados.Azulejo[x, y].Bloqueio[i]);
                }
            }
        }

        // Luzes
        Binário.Write((byte)Dados.Luz.Count);
        if (Dados.Luz.Count > 0)
        {
            for (byte i = 0; i <= Dados.Luz.Count - 1; i++)
            {
                Binário.Write(Dados.Luz[i].X);
                Binário.Write(Dados.Luz[i].Y);
                Binário.Write(Dados.Luz[i].Largura);
                Binário.Write(Dados.Luz[i].Altura);
            }
        }

        // Itens
        Binário.Write((byte)Dados.NPC.Count);
        if (Dados.NPC.Count > 0)
        {
            for (byte i = 0; i <= Dados.NPC.Count - 1; i++)
            {
                Binário.Write(Dados.NPC[i].Índice);
                Binário.Write(Dados.NPC[i].Zona);
                Binário.Write(Dados.NPC[i].Aparecer);
                Binário.Write(Dados.NPC[i].X);
                Binário.Write(Dados.NPC[i].Y);
            }
        }

        // Fecha o sistema
        Binário.Dispose();
    }
Exemplo n.º 2
0
    public static void Editor_Mapas_Mapa_Azulejos(short Índice)
    {
        Editor_Mapas Objetos = Editor_Mapas.Objetos;

        Listas.Estruturas.Mapas         Mapa = Listas.Mapa[Índice];
        Listas.Estruturas.Azulejo_Dados Dados;
        int Início_X = Objetos.scrlMapaX.Value, Início_Y = Objetos.scrlMapaY.Value;

        SFML.Graphics.Color Cor; System.Drawing.Color TempCor = System.Drawing.Color.FromArgb(Mapa.Coloração);

        // Desenha todos os azulejos
        for (byte c = 0; c <= Mapa.Camada.Count - 1; c++)
        {
            // Somente se necessário
            if (!Objetos.lstCamadas.Items[c].Checked)
            {
                continue;
            }

            // Transparência da camada
            Cor = CCor(255, 255, 255);
            if (Objetos.butEdição.Checked && Objetos.butMNormal.Checked)
            {
                if (Editor_Mapas.Objetos.lstCamadas.SelectedIndices.Count > 0)
                {
                    if (c != Editor_Mapas.Objetos.lstCamadas.SelectedItems[0].Index)
                    {
                        Cor = CCor(255, 255, 255, 150);
                    }
                }
            }
            else
            {
                Cor = CCor(TempCor.R, TempCor.G, TempCor.B);
            }

            // Continua
            for (int x = Início_X; x <= Editor_Mapas.AzulejosVisíveis.Width; x++)
            {
                for (int y = Início_Y; y <= Editor_Mapas.AzulejosVisíveis.Height; y++)
                {
                    if (Mapa.Camada[c].Azulejo[x, y].Azulejo > 0)
                    {
                        // Dados
                        Dados = Mapa.Camada[c].Azulejo[x, y];
                        Rectangle Fonte   = new Rectangle(new Point(Dados.x * Globais.Grade, Dados.y * Globais.Grade), Globais.Grade_Tamanho);
                        Rectangle Destino = new Rectangle(new Point((x - Início_X) * Globais.Grade, (y - Início_Y) * Globais.Grade), Globais.Grade_Tamanho);

                        // Desenha o azulejo
                        if (!Mapa.Camada[c].Azulejo[x, y].Automático)
                        {
                            Desenhar(Jan_Mapa, Tex_Azulejo[Dados.Azulejo], Fonte, Editor_Mapas.Zoom(Destino), Cor);
                        }
                        else
                        {
                            Editor_Mapas_AutoCriação(Destino.Location, Dados, Cor);
                        }
                    }
                }
            }
        }
    }