/// <summary> /// Cria uma entidade em um lugar livre no ambiente. /// </summary> /// <param name="entidadeTipo">Tipo de entidade para tentar criar.</param> /// <returns>Entidade criada.</returns> private Entidade AlocaEntidadeLugarSeguro(Entidades entidadeTipo) { List <Coordenadas> livres = Ambiente.GetCoordenadasLivres(); livres.Shuffle(); foreach (Coordenadas coordenadas in livres) { if (entidadeTipo == Entidades.LIXEIRA_ORGANICO || entidadeTipo == Entidades.LIXEIRA_SECO) { if (Geral.EstaLivreArredores(coordenadas)) { Ambiente.SetEntidade(coordenadas, new Lixeira(coordenadas, (entidadeTipo == Entidades.LIXEIRA_ORGANICO ? TipoLixo.ORGANICO : TipoLixo.SECO))); return(Ambiente.GetEntidade(coordenadas)); } } else if (!Geral.EstaTrancado(coordenadas)) { if (entidadeTipo == Entidades.AGENTE) { Ambiente.SetEntidade(coordenadas, new Agente(coordenadas, Ambiente.Agentes.Count + 1)); return(Ambiente.GetEntidade(coordenadas)); } else if (entidadeTipo == Entidades.LIXO_ORGANICO || entidadeTipo == Entidades.LIXO_SECO) { Ambiente.SetEntidade(coordenadas, new Lixo(coordenadas, (entidadeTipo == Entidades.LIXO_ORGANICO ? TipoLixo.ORGANICO : TipoLixo.SECO))); return(Ambiente.GetEntidade(coordenadas)); } } } return(null); }