Exemplo n.º 1
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
            keyboardState = Keyboard.GetState();

            if (configuranaves.navesSelecionadas != null && !carregou)
            {
                limpa    = new Limpeza(this.game);
                carregou = true;
                int i = 0;
                foreach (TipoNave.Tipo tp in configuranaves.navesSelecionadas)
                {
                    switch (tp)
                    {
                    case TipoNave.Tipo.defenseship:
                        naves[i] = Game.Content.Load <Texture2D>("imagens/defenseship");
                        pShip    = new defenseshipShip(this.game, i + 1);
                        pShip.setBatch(spriteBatch);
                        Components.Add(pShip);
                        break;

                    case TipoNave.Tipo.attackship:
                        naves[i] = Game.Content.Load <Texture2D>("imagens/attackship");
                        sfShip   = new attackshiperShip(this.game, i + 1);
                        sfShip.setBatch(spriteBatch);
                        Components.Add(sfShip);
                        break;
                    }
                    i++;
                }

                // Gerencia os tiros e asteroides
                limpa.gerenciarObstaculos(this.spriteBatch);
            }

            limpa.Update(gameTime);

            // Gerencia o numero de asteroides na tela
            limpa.gerenciarObstaculos(this.spriteBatch);

            colisao.ocorreuColisaoTiroMeteoro();

            foreach (TipoNave.Tipo tp in configuranaves.navesSelecionadas)
            {
                switch (tp)
                {
                case TipoNave.Tipo.defenseship:
                    if (pShip != null)
                    {
                        if (!pShip.isAlive)
                        {
                            acabouJogo = true;
                        }
                    }
                    break;

                case TipoNave.Tipo.attackship:
                    if (sfShip != null)
                    {
                        if (!sfShip.isAlive)
                        {
                            acabouJogo = true;
                        }
                    }
                    break;
                }
            }
        }
Exemplo n.º 2
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
            float   secs     = (float)gameTime.ElapsedGameTime.TotalSeconds;
            Vector2 posAntes = getPosition();


            // Se o missil se tornar inativo, por colisao ou timeout não são feitos mais os calculos abaixo
            if (isMissilAlive(gameTime))
            {
                Vector2 steering_force      = new Vector2();
                bool    comportamentoPadrao = true;

                // se for defletor de tele-guiado
                if (naveAlvo is defenseshipShip)
                {
                    defenseshipShip nave = (defenseshipShip)naveAlvo;
                    if (nave.isantiRocketAtivo())
                    {
                        Vector2 pos = naveAlvo.getantiRocket().getPosition();
                        steering_force      = flee.Calculate(this, secs, pos);
                        comportamentoPadrao = false;
                    }
                }

                if (comportamentoPadrao)
                {
                    steering_force = pursuit.Calcularpursuit(this, secs);
                }

                if (steering_force.Length() > maxForca)
                {
                    steering_force.Normalize();
                    steering_force *= maxForca;
                }
                steering_force *= secs;

                Vector2 acceleration = steering_force / massa;

                velocidade += acceleration;
                if (velocidade.Length() > getMaxVelocidade())
                {
                    velocidade.Normalize();
                    velocidade *= getMaxVelocidade();
                }

                if (velocidade.Length() < 0.001)
                {
                    velocidade = new Vector2();
                }
                else
                {
                    this.setDirecao(Vector2.Normalize(velocidade));
                }

                float radiano = MathHelper.ToRadians(angulo);
                this.setDirecao(new Vector2((float)Math.Cos(radiano), (float)Math.Sin(radiano)));

                setPosition(getPosition() + velocidade * secs);

                orientacao = (float)Math.Atan2(getPosition().Y - posAntes.Y,
                                               getPosition().X - posAntes.X);

                int w = 800;
                int h = 600;

                int missilw = getImagem().Width;
                int missilh = getImagem().Height;

                Vector2 posicaoAux = getPosition();

                if (getPosition().X < -missilw)
                {
                    posicaoAux.X = w + missilw - 1;
                }
                else if (getPosition().X > w + missilw)
                {
                    posicaoAux.X = -missilw + 1;
                }

                if (getPosition().Y < -missilh)
                {
                    posicaoAux.Y = h + missilh - 1;
                }
                else
                if (getPosition().Y > h + missilh)
                {
                    posicaoAux.Y = -missilh + 1;
                }
                setPosition(posicaoAux);
            }
            else
            {
                if (missilAlive)
                {
                    bool colisao = naveAlvo.ocorreuColisao(getImagem(), getPosition());
                    if (colisao)
                    {
                        naveAlvo.descontarDano(VALOR_DANO);
                    }
                }
                missilAlive = false;
            }
        }