Beispiel #1
0
        /// <summary>
        /// Cria os itens e os posiciona na tela
        /// </summary>
        public void criarItens()
        {
            #region Limpeza
            itens.Clear();
            itens2.Clear();
            itens3.Clear();
            coletaveis.Clear();

            portais.Clear();
            cordas.Clear();
            #endregion


            #region Inicialização
            XMLitens = new XmlDocument();
            CustomText xml = principal.Content.Load <CustomText>(caminho + "_Itens");
            XMLitens.LoadXml(xml.SourceCode);
            int    saidaX;
            int    saidaY;
            int    largura;
            int    altura;
            int    quadros;
            bool   passavel;
            bool   nuvem;
            String texturaItem;
            String texturaHUD;
            int    X, Y;
            #endregion


            #region Criação e ajustes
            for (int i = 0; i < XMLitens.DocumentElement.ChildNodes.Count; i++)
            {
                Item novoItem;

                texturaItem = XMLitens.DocumentElement.ChildNodes[i].Attributes["sprite"].Value;
                String tipo = XMLitens.DocumentElement.ChildNodes[i].Attributes["tipo"].Value;
                X = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["x"].Value);
                Y = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["y"].Value);

                switch (tipo)
                {
                case "roldana":
                case "cracha":
                case "engrenagem":
                case "dica":
                case "saveItem":
                case "item":
                    #region Itens coletáveis
                    texturaHUD = XMLitens.DocumentElement.ChildNodes[i].Attributes["spriteHUD"].Value;
                    largura    = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura     = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros    = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel   = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem      = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem   = new Item(principal, new Vector2(X, Y), passavel, true, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo           = tipo;
                    novoItem.NomeTexturaHUD = XMLitens.DocumentElement.ChildNodes[i].Attributes["spriteHUD"].Value;
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 4, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 4, false, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoItem.Animacao.iniciarAnimacao();
                    coletaveis.Add(novoItem);

                    if (nuvem)
                    {
                        for (int x = 0; x < (largura / quadros) / Tile.Dimensoes.X; x++)
                        {
                            mapa[Y][X + x].Nuvem = true;
                        }
                    }

                    break;
                    #endregion


                case "roldanaSuporte":
                    #region Suporte das roldanas
                    largura       = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura        = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros       = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel      = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem         = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem      = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Tipo = tipo;
                    novoItem.NomeTexturaCompleta = XMLitens.DocumentElement.ChildNodes[i].Attributes["spriteCompleto"].Value;

                    novoItem.Initialize();

                    novoItem.CordaDe = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["cordaDe"].Value);
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = "parado";
                    novoItem.Animacao.pararAnimacao();
                    itens2.Add(novoItem);

                    if (nuvem)
                    {
                        for (int x = 0; x < (largura / quadros) / Tile.Dimensoes.X; x++)
                        {
                            mapa[Y][X + x].Nuvem = true;
                        }
                    }

                    break;
                    #endregion


                case "manivela":
                    #region Manivela
                    largura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura   = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem    = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo            = tipo;
                    novoItem.CordaInterativa = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["corda"].Value);
                    novoItem.ItemInterativo  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["item"].Value);
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 5, true, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 5, true, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoItem.Animacao.iniciarAnimacao();
                    itens2.Add(novoItem);

                    break;
                    #endregion


                case "empurravel":
                    #region Itens empurráveis
                    largura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura   = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem    = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo = tipo;
                    novoItem.Peso = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["peso"].Value);

                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 5, true, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 5, true, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoItem.Animacao.iniciarAnimacao();
                    itens2.Add(novoItem);

                    break;
                    #endregion


                case "corda":
                    #region Cordas
                    saidaX = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["saidaX"].Value);
                    saidaY = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["saidaY"].Value);
                    Corda corda = new Corda(texturaItem, new Vector2(X * Tile.Dimensoes.X + Tile.Dimensoes.X / 2, Y * Tile.Dimensoes.Y + Tile.Dimensoes.Y / 2), new Vector2(saidaX * Tile.Dimensoes.X + Tile.Dimensoes.X / 2, saidaY * Tile.Dimensoes.Y + Tile.Dimensoes.Y / 2));
                    corda.LoadContent(principal.Content);
                    cordas.Add(corda);

                    break;
                    #endregion


                case "elevador":
                case "portal":
                    #region Portais
                    saidaX  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["saidaX"].Value);
                    saidaY  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["saidaY"].Value);
                    largura = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);

                    Portal novoPortal = new Portal(principal, new Vector2(X, Y), new Vector2(saidaX, saidaY), XMLitens.DocumentElement.ChildNodes[i].Attributes["tela"].Value, texturaItem);

                    novoPortal.Tipo = tipo;

                    novoPortal.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoPortal.Animacao.Animacoes.Add("abrindo", new Animacao(largura, altura, quadros, 8, false, false, 0, 0));
                    novoPortal.Animacao.Animacoes.Add("fechando", new Animacao(largura, altura, quadros, 8, false, false, true, 0, 0));
                    novoPortal.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoPortal.Animacao.iniciarAnimacao();
                    portais.Add(novoPortal);

                    break;
                    #endregion


                case "vidro":
                case "save":
                case "cenario2":
                    #region Itens de segundo plano
                    largura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura   = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem    = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo = tipo;
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 5, true, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 5, true, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    if (tipo == "vidro")
                    {
                        novoItem.Animacao.pararAnimacao();
                    }
                    else
                    {
                        novoItem.Animacao.iniciarAnimacao();
                    }

                    itens2.Add(novoItem);

                    if (nuvem)
                    {
                        for (int x = 0; x < (largura / quadros) / Tile.Dimensoes.X; x++)
                        {
                            mapa[Y][X + x].Nuvem = true;
                        }
                    }

                    break;
                    #endregion


                case "agua":
                    #region Agua
                    largura = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);

                    enchente = new Enchente(new Vector2(X * Tile.Dimensoes.X, Y * Tile.Dimensoes.Y), largura, altura);
                    enchente.LoadContent(principal.Content);

                    break;
                    #endregion


                case "cenario3":
                    #region Itens de primeiro plano
                    largura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura   = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem    = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo = tipo;
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 5, true, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 5, true, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoItem.Animacao.iniciarAnimacao();
                    itens3.Add(novoItem);

                    if (nuvem)
                    {
                        for (int x = 0; x < (largura / quadros) / Tile.Dimensoes.X; x++)
                        {
                            mapa[Y][X + x].Nuvem = true;
                        }
                    }

                    break;
                    #endregion


                default:
                    //"cenario"
                    #region Itens de fundo
                    largura  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["largura"].Value);
                    altura   = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["altura"].Value);
                    quadros  = int.Parse(XMLitens.DocumentElement.ChildNodes[i].Attributes["quadros"].Value);
                    passavel = XMLitens.DocumentElement.ChildNodes[i].Attributes["passavel"].Value == "s";
                    nuvem    = XMLitens.DocumentElement.ChildNodes[i].Attributes["nuvem"].Value == "s";
                    novoItem = new Item(principal, new Vector2(X, Y), passavel, false, nuvem, texturaItem);
                    novoItem.Initialize();
                    novoItem.Tipo = tipo;
                    novoItem.Animacao.Animacoes.Add("parado", new Animacao(largura / quadros, altura, 1, 1, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("indo", new Animacao(largura, altura, quadros, 10, false, false, 0, 0));
                    novoItem.Animacao.Animacoes.Add("voltando", new Animacao(largura, altura, quadros, 10, false, false, true, 0, 0));
                    novoItem.Animacao.AnimacaoAtual = XMLitens.DocumentElement.ChildNodes[i].Attributes["animacao"].Value;
                    novoItem.Animacao.iniciarAnimacao();
                    itens.Add(novoItem);

                    if (nuvem)
                    {
                        for (int x = 0; x < (largura / quadros) / Tile.Dimensoes.X; x++)
                        {
                            mapa[Y][X + x].Nuvem = true;
                        }
                    }

                    break;
                    #endregion
                }
            }
            #endregion
        }
Beispiel #2
0
        private void CarregarDados()
        {
            telaJogo.mapa.Caminho = dados.Caminho;
            telaJogo.mapa.LerXML();
            telaJogo.mapa.criarItens();
            telaJogo.mapa.criarInimigos();

            //Itens de segundo plano
            telaJogo.mapa.Itens2.Clear();

            for (int i = 0; i < dados.ItensMapa.Count; i++)
            {
                Item novoItem = dados.ItensMapa[i];
                novoItem.LoadContent(Content);
                if (novoItem.Ativado && novoItem.Tipo == "roldanaSuporte")
                {
                    novoItem.Textura = Content.Load <Texture2D>(novoItem.NomeTexturaCompleta);
                }
                else if (novoItem.Tipo == "vidro")
                {
                    novoItem.Animacao.pararAnimacao();
                    novoItem.Animacao.Animacoes["indo"].QuadroAtual = Math.Min(3, dados.ObjetivosCompletos);
                }

                telaJogo.mapa.Itens2.Add(novoItem);
            }

            //Itens coletáveis
            telaJogo.mapa.Coletaveis.Clear();

            for (int i = 0; i < dados.Coletaveis.Count; i++)
            {
                Item novoItem = dados.Coletaveis[i];
                novoItem.LoadContent(Content);

                telaJogo.mapa.Coletaveis.Add(novoItem);
            }

            //Cordas
            telaJogo.mapa.Cordas.Clear();

            for (int i = 0; i < dados.Cordas.Count; i++)
            {
                Corda novaCorda = dados.Cordas[i];
                novaCorda.LoadContent(Content);
                telaJogo.mapa.Cordas.Add(novaCorda);
            }

            if (dados.Caminho.EndsWith("Agua"))
            {
                telaJogo.mapa.Enchente.Posicao = dados.PosicaoAgua;
                telaJogo.mapa.Enchente.Largura = (int)dados.MedidasAgua.X;
                telaJogo.mapa.Enchente.Altura  = (int)dados.MedidasAgua.Y;
                telaJogo.mapa.Enchente.AlterarNivel(dados.NivelAgua);
                telaJogo.mapa.Enchente.MontarAgua(Content);
            }

            //Inimigos
            //telaJogo.mapa.Inimigos.Clear();

            //for (int i = 0; i < dados.Inimigos.Count; i++)
            //{
            //    Inimigo novoInimigo = dados.Inimigos[i];
            //    novoInimigo.Principal = this;
            //    novoInimigo.LoadContent(Content);
            //    telaJogo.mapa.Inimigos.Add(novoInimigo);
            //}

            telaJogo.Personagem.inicializar();
            telaJogo.Personagem.Vidas = dados.Vidas;
            telaJogo.Personagem.ObjetivosCompletos = dados.ObjetivosCompletos;
            telaJogo.Personagem.ItensUsados        = dados.ItensUsados;

            telaJogo.HUD.limpar();
            for (int i = 0; i < dados.ItensHUD.Count; i++)
            {
                telaJogo.HUD.addItem(dados.ItensHUD[i].Tipo, dados.ItensHUD[i].NomeTextura);
            }
        }