/// <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 }
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); } }