示例#1
0
        /// <summary>
        /// Move uma entidade para outro ponto qualquer. Se Já houver uma entidade, as duas se transformam em uma entidade múltipla que contém as duas.
        /// Se houver só um item nessa lista depois de mover, esse item se toma o lugar da entidade múltipla.
        /// </summary>
        /// <param name="destino">Posição de destino no ambiente.</param>
        /// <param name="entidade">Entidade que será movida.</param>
        public static void MoveEntidade(Coordenadas destino, Entidade entidade)
        {
            Entidade orig = _ambiente[entidade.Coordenadas.Y, entidade.Coordenadas.X];

            if (orig is Multiplo)
            {
                (orig as Multiplo).Entidades.Remove(entidade);

                if ((orig as Multiplo).Entidades.Count == 1)
                {
                    _ambiente[entidade.Coordenadas.Y, entidade.Coordenadas.X] = (orig as Multiplo).Entidades[0];
                }
                else if ((orig as Multiplo).Entidades.Count == 0)
                {
                    _ambiente[entidade.Coordenadas.Y, entidade.Coordenadas.X] = null;
                }
            }
            else
            {
                _ambiente[entidade.Coordenadas.Y, entidade.Coordenadas.X] = null;
            }

            AmbienteChange?.Invoke(_ambiente[entidade.Coordenadas.Y, entidade.Coordenadas.X], new Coordenadas {
                X = entidade.Coordenadas.X, Y = entidade.Coordenadas.Y
            });

            entidade.Coordenadas = destino;

            Entidade dest = _ambiente[destino.Y, destino.X];

            if (dest != null)
            {
                Multiplo multiplo;

                if (dest is Multiplo)
                {
                    multiplo = dest as Multiplo;
                    multiplo.Entidades.Add(entidade);
                }
                else
                {
                    multiplo = new Multiplo(destino);
                    multiplo.Entidades.Add(_ambiente[destino.Y, destino.X]);
                    multiplo.Entidades.Add(entidade);
                }

                _ambiente[destino.Y, destino.X] = multiplo;
            }
            else
            {
                _ambiente[destino.Y, destino.X] = entidade;
            }

            AmbienteChange?.Invoke(_ambiente[destino.Y, destino.X], destino);
        }
示例#2
0
        /// <summary>
        /// Coloca uma entidade na posição definida.
        /// </summary>
        /// <param name="coordenadas">Posição no ambiente.</param>
        /// <param name="entidade">Entidade que será colocada.</param>
        public static void SetEntidade(Coordenadas coordenadas, Entidade entidade)
        {
            Entidade pos = _ambiente[coordenadas.Y, coordenadas.X];

            if (pos != null)
            {
                _entidades.Remove(pos);
                _agentes.Remove(pos as Agente);
                _lixeiras.Remove(pos as Lixeira);
                _lixos.Remove(pos as Lixo);
            }

            _ambiente[coordenadas.Y, coordenadas.X] = entidade;

            if (entidade != null)
            {
                entidade.Coordenadas.X = coordenadas.X;
                entidade.Coordenadas.Y = coordenadas.Y;

                if (entidade is Agente)
                {
                    _agentes.Add(entidade as Agente);
                }
                else if (entidade is Lixeira)
                {
                    _lixeiras.Add(entidade as Lixeira);
                }
                else if (entidade is Lixo)
                {
                    _lixos.Add(entidade as Lixo);
                }

                _entidades.Add(entidade);
            }

            AmbienteChange?.Invoke(entidade, coordenadas);
        }
示例#3
0
 /// <summary>
 /// Força a entidade a atualizar a tela.
 /// </summary>
 /// <param name="entidade">Entidade que irá atualizar.</param>
 public static void AtualizaEntidade(Entidade entidade)
 {
     AmbienteChange?.Invoke(entidade, entidade.Coordenadas);
 }