public override void Unsubscribe() { GUIForm.Paint -= OnPaint; foreach (var tank1 in Tanks) { tank1.Unsubscribe(); tank1.CheckPosition -= Field.GetCheckPositionListener(); tank1.Shot -= OnShot; tank1.Destroyed -= OnTankDestroyed; var compTank = tank1 as CompTank; if (compTank.IsBonus) { compTank.BonusShoot -= OnBonusShoot; } foreach (var tank2 in Tanks) { if (tank1 != tank2) { tank1.CheckPosition -= tank2.GetCheckPositionListener(); tank2.CheckPosition -= tank1.GetCheckPositionListener(); } } /**/ foreach (var playerTank in Field.PlayersManager.Tanks) { playerTank.CheckPosition -= compTank.GetCheckPositionListener(); compTank.CheckPosition -= playerTank.GetCheckPositionListener(); } } TanksOnField.Clear(); _respawnTimer.Stop(); }
private void OnTankDestroyed(object sender, EventArgs e) { var destroyedTank = sender as Tank; destroyedTank.RemoveCheckPositionListeners(); destroyedTank.RemoveShotListeners(); destroyedTank.RemoveDestroyedListeners(); foreach (var compTankOnField in TanksOnField) { if (compTankOnField != destroyedTank) { compTankOnField.CheckPosition -= destroyedTank.GetCheckPositionListener(); } } foreach (var playerTank in Field.PlayersManager.Tanks) { playerTank.CheckPosition -= destroyedTank.GetCheckPositionListener(); } foreach (var shell in Field.Shells) { shell.CheckPosition -= destroyedTank.GetCheckPositionListener(); } TanksOnField.Remove(destroyedTank); AliveTanks--; }
public void SetNewGameTanksParameters(int players) { TanksOnField.Clear(); foreach (var tank in Tanks) { tank.SetNewGameParameters(); } }
public void SetNewStageTanksParameters() { TanksOnField.Clear(); AliveTanks = MAX_STAGE_TANKS; _respawnTimer.Interval = TankRespawnTime(); _respawnTimer.Start(); _currentRespawnTank = 0; ((CompTank)Tanks[3]).IsBonus = true; ((CompTank)Tanks[10]).IsBonus = true; ((CompTank)Tanks[18]).IsBonus = true; //DEBUG //foreach(var tank in Tanks) // ((CompTank)tank).IsBonus = true; }
private void OnRespawnTimerTick(object sender, EventArgs e) { if (TanksOnField.Count < MaxTanksOnField()) { var currentRespawnTank = Tanks[_currentRespawnTank]; currentRespawnTank.SetNewStageParameters(); currentRespawnTank.Subscribe(); currentRespawnTank.CheckPosition += Field.GetCheckPositionListener(); currentRespawnTank.Shot += OnShot; currentRespawnTank.Destroyed += OnTankDestroyed; var compTank = currentRespawnTank as CompTank; if (compTank.IsBonus) { compTank.BonusShoot += OnBonusShoot; } foreach (var compTankOnField in TanksOnField) { compTankOnField.CheckPosition += currentRespawnTank.GetCheckPositionListener(); currentRespawnTank.CheckPosition += compTankOnField.GetCheckPositionListener(); } foreach (var playerTank in Field.PlayersManager.Tanks) { playerTank.CheckPosition += compTank.GetCheckPositionListener(); compTank.CheckPosition += playerTank.GetCheckPositionListener(); } TanksOnField.Add(compTank); _currentRespawnTank++; if (_currentRespawnTank == MAX_STAGE_TANKS) { _respawnTimer.Stop(); } GUIForm.Invalidate(new Rectangle(928, 64, 64, 320)); } }