Exemple #1
0
 public Bullet(Model Model, Vector3 Position, Quaternion Rotation,
               Vector3 Scale, GraphicsDevice graphicsDevice) : base(Model, Position, Rotation, Scale, graphicsDevice)
 {
     IsFired         = false;
     BulletTime      = new TimeClass(4000);
     bulletDirection = new Vector3(1, 1, 1);
 }
Exemple #2
0
 protected override void Initialize()
 {
     this.IsMouseVisible = false;
     random         = new Random();
     spriteBatch    = new SpriteBatch(GraphicsDevice);
     LastMouseState = Mouse.GetState();
     bulletTimer    = new TimeClass(1500);
     bulletTimer.Start();
     base.Initialize();
 }
Exemple #3
0
        public void EnemyAutoFiring(GameTime gameTime, Tank Enemy)                              //Gestione AI carro nemico
        {
            Vector3 directionOfEnemyTurret = Enemy.Bullet.CalculateBulletDirection(Enemy);      //Calcolo vettore direzione attuale della torretta nemica
            Vector3 directionOfFiring      = (PlayerTank.Position - Enemy.Position);            //Calcolo vettore direzione di riferimento per sparare verso il giocatore
            float   distance = directionOfFiring.Length();                                      //Calcolo la distanza tra i due carri

            MakeEnemyCanonRotation(Enemy, directionOfFiring, directionOfEnemyTurret, distance); //Ruoto la torretta nemica per mantenere il giocatore a bersaglio (in orizzontale)

            if (AllowFire(directionOfEnemyTurret, directionOfFiring, distance, playerIsOnFire)) //Controllo di essere in traiettoria per sparare e se sono sotto una certa distanza
            {
                playerIsOnFire = true;                                                          //Il giocatore è mirato correttamente

                Enemy.EnemyFiringDirection = PlayerTank.Position - Enemy.Position;              //Ricontrollo la posizione del giocatore
                if (Enemy.precEnemyFiringDirection == Vector3.Zero)
                {
                    Enemy.precEnemyFiringDirection = Enemy.EnemyFiringDirection;                                                                                    //Se è la prima volta che miro, il valore precedente diventa quello attuale
                }
                MakeEnemyTurretRotation(Enemy, Enemy.EnemyFiringDirection, Enemy.precEnemyFiringDirection);                                                         //Ruoto la torretta nemica in verticale per mirare il bersaglio

                if (!Enemy.Bullet.IsFired && AllowFire(directionOfEnemyTurret, directionOfFiring, distance, playerIsOnFire) && bulletTimer.IsTimeEspired(gameTime)) //A questo punto sparo
                {
                    Enemy.BulletFire();
                    enemySpeedUpCnt++;
                    if (enemySpeedUpCnt != (bulletTimerCounter / 1000))            //Comandi per rallentare i colpi con timers (evitare effetto mitragliatore e lasciare scampo al giocatore)
                    {
                        bulletTimerCounter = bulletTimerCounter - 1000;
                    }
                    else
                    {
                        bulletTimerCounter = 1000;
                        enemySpeedUpCnt    = (bulletTimerCounter / 1000) - 2;
                    }
                    bulletTimer = new TimeClass(bulletTimerCounter);
                    bulletTimer.Start();
                    SFXManager.Play("PlayerShot");
                }
                if (distance > 6f) //Se esco dalla distanza massima di bersaglio, azzero tutto
                {
                    playerIsOnFire = false;
                    Enemy.precEnemyFiringDirection = Vector3.Zero;
                }

                Enemy.precEnemyFiringDirection = Enemy.EnemyFiringDirection; //Salvo la precedente direzione di bersaglio per effettuare il turno dopo un inclinazione incrementale rispetto a quella precedente
            }
        }