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