// transitions to next level // calculates bonus from remaining cities/missiles private void EndLevel() { Debug.WriteLine("EndLevel()"); // determine remaining missiles int _remainingLevelMissiles = RemainingMissiles; // determine remaining cities int _remainingLevelCities = RemainingCities; // determine bonus scores int _cityBonus = _remainingLevelCities * settings.ScoreSavedCities * scoreMultiplier; int _missileBonus = _remainingLevelMissiles * settings.ScoreUnusedMissile * scoreMultiplier; // subtract from remaining score remainingScore -= _cityBonus + _missileBonus; // add to score score += _cityBonus + _missileBonus; // check for earned bonus cities // if remaining score <= 0, add bonus cities if (remainingScore <= 0) { int _score = Math.Abs(remainingScore) + settings.ScoreBonusCity; // determine bonus cities bonusCities += (_score - (_score % settings.ScoreBonusCity)) / settings.ScoreBonusCity; // determine new remaining score remainingScore = settings.ScoreBonusCity - (_score % settings.ScoreBonusCity); } // check if game over bool gameOver = true; // check if all cities destroyed foreach (City _c in cities) { if (!_c.Destroyed) { gameOver = false; break; } } if (gameOver) { // check if bonus cities available gameOver = bonusCities <= 0; } // transition to next status if (gameOver) { status = GameLevelStatus.Over; // call event to add new score newScore(score); } else { status = GameLevelStatus.Between; } }
// Reset game state // assumes call is from Logic, resets state end // calls event on GameDraw to remove appropriate shapes public void Reset() { // reset score CheatsEnabled = false; level = 0; score = 0; //Highscore = 0; // reset game time gameTime = 0; status = GameLevelStatus.None; // shapes to remove List <Shape> _toRemove = new List <Shape>(); // get projectile shapes foreach (Missile _p in projectiles) { _toRemove.AddRange(_p.Shapes); } // get explosion shapes foreach (Explosion _e in explosions) { _toRemove.AddRange(_e.Shapes); } // get battery shapes _toRemove.Add(leftBattery.DisplayShape); _toRemove.Add(centerBattery.DisplayShape); _toRemove.Add(rightBattery.DisplayShape); // get city shapes foreach (City _c in cities) { _toRemove.Add(_c.DisplayShape); } // call event to remove shapes removeShapes(_toRemove); // reset projectiles projectiles.Clear(); // reset explosions explosions.Clear(); // reset batteries leftBattery.Reset(); centerBattery.Reset(); rightBattery.Reset(); // reset cities foreach (City _c in cities) { _c.Reset(); } // wipe target list targets.Clear(); }
protected override void OnStart() { UIGameLevelSceneView view = UISceneCtrl.Instance.Load(UISceneType.GameLevel).GetComponent <UIGameLevelSceneView>(); ChangeSceneCtrl.Instance.Show(ChangeSceneType.Open, null); view.SetUI(Global.Instance.CurLevel); UIDispatcher.Instance.AddEventListen(ConstDefine.SceneGameLevelViewClickPauseBtn, OnClickGameLevelViewClickPauseBtn); //Global.Instance.SetMusic(); GridManager.Instance.CreateNode(); CreateMap(Global.Instance.CurLevel); m_TurnCount = -1; m_IsPlayerRound = false; Turn(); GameLevelStatus = GameLevelStatus.Playing; }
// constructor public GameState(GameSettings _settings, Canvas _canvas, SoundPlayer _soundPlayer) { rand = new Random(); settings = _settings; gameCanvas = _canvas; soundPlayer = _soundPlayer; // init values gameTime = 0; status = GameLevelStatus.None; level = 0; score = 0; CheatsEnabled = false; Highscore = 0; // create lists for projectile/explosion objects projectiles = new List <Missile>(); explosions = new List <Explosion>(); // list of targets targets = new List <ITarget>(); // list of targets for a level levelTargets = new List <ITarget>(); }
// advance level to next private void NextLevel() { Debug.WriteLine("NextLevel()"); // reset level time levelTime = 0; levelCheckTime = 0; status = GameLevelStatus.Active; // check if level is at most if (level >= settings.MaxLevel) { // reset values back to initial level = 1; scoreMultiplier = 1; levelsRemaining = settings.ScoreMultiplierLevelStep; incomingMissilesTotal = settings.IncomingMissileCountInitial; incomingMissiles = incomingMissilesTotal; incomingMissilesUp = 0; incomingMissileSpeed = (settings.MissileSpeedUp) ? settings.IncomingMissileSpeedInitial : settings.IncomingMissileSpeedStatic; incomingMissleSplitChance = settings.MissileSplitChanceInitial; incomingMissileWaveMax = settings.WaveMissileCountInitial; // set color palette return; } // up level ++level; // check if time to increase score multiplier if (levelsRemaining <= 0) { // increase score multiplier, limit to multiplier max scoreMultiplier = Math.Min(scoreMultiplier + 1, settings.ScoreMultiplierMax); // reset levels remaining levelsRemaining = settings.ScoreMultiplierLevelStep; } else { --levelsRemaining; } // up missile count incomingMissilesTotal = Math.Min(incomingMissilesTotal + settings.IncomingMissileStep, settings.IncomingMissileCountMax); incomingMissiles = incomingMissilesTotal; incomingMissilesUp = 0; // check if should up missile speed if (settings.MissileSpeedUp) { // up missile speed incomingMissileSpeed = Math.Min(incomingMissileSpeed + settings.IncomingMissileSpeedStep, settings.IncomingMissileSpeedMax); } // up missile split chance incomingMissleSplitChance = Math.Min(incomingMissleSplitChance + settings.MissileSplitChanceStep, settings.MissileSplitChanceMax); // up missile wave max incomingMissileWaveMax = Math.Min(incomingMissileWaveMax + settings.WaveMissileCountStep, settings.WaveMissileCountMax); // replenish cities if possible (from bonusCities) ReplenishCities(); // readd battery shapes if destroyed List <Shape> _toAdd = new List <Shape>(); if (leftBattery.Destroyed) { _toAdd.Add(leftBattery.DisplayShape); } if (centerBattery.Destroyed) { _toAdd.Add(centerBattery.DisplayShape); } if (rightBattery.Destroyed) { _toAdd.Add(rightBattery.DisplayShape); } addShapes(_toAdd); // reset batteries leftBattery.Reset(); centerBattery.Reset(); rightBattery.Reset(); // rebuild targets list targets.Clear(); targets.Add(leftBattery); targets.Add(centerBattery); targets.Add(rightBattery); foreach (City _c in cities) { if (!_c.Destroyed) { targets.Add(_c); } } // determine level targets BuildLevelTargets(); // determine if time to change color pallete // advance color palette }
// set state to a new game public void Start() { // reset just in case Reset(); // initial values status = GameLevelStatus.Active; levelTime = 0; levelCheckTime = 0; level = 1; score = 0; scoreMultiplier = 1; remainingScore = settings.ScoreBonusCity; //bonusCities = 0; bonusCities = (settings.InitialCities > 6) ? (settings.InitialCities - 6) : 0; levelsRemaining = settings.ScoreMultiplierLevelStep; incomingMissilesTotal = settings.IncomingMissileCountInitial; incomingMissiles = incomingMissilesTotal; incomingMissilesUp = 0; incomingMissileSpeed = (settings.MissileSpeedUp) ? settings.IncomingMissileSpeedInitial : settings.IncomingMissileSpeedStatic; incomingMissleSplitChance = settings.MissileSplitChanceInitial; incomingMissileWaveMax = settings.WaveMissileCountInitial; // if settings.InitialCities < 6, destroy some cities if (settings.InitialCities < 6) { int _toDestroy = 6 - settings.InitialCities; while (_toDestroy > 0) { // destroy a random city City _c = cities[rand.Next(cities.Count)]; // very bad workaround to just building a list // or making a static method to grab a random index from a list if (_c.Destroyed) { continue; } _c.Impacted(null); _toDestroy--; } } // build target list targets.Add(leftBattery); targets.Add(centerBattery); targets.Add(rightBattery); foreach (City _c in cities) { if (!_c.Destroyed) { targets.Add(_c); } } // build level targets list BuildLevelTargets(); // add target shapes List <Shape> _toAdd = new List <Shape>(); foreach (ITarget _target in targets) { _toAdd.Add(_target.DisplayShape); } addShapes(_toAdd); // set color palette }
private void OnClickGameLevelViewClickPauseBtn(object[] p) { UIViewMgr.Instance.OpenView(UIViewType.GameLevelPause); GameLevelStatus = GameLevelStatus.Pause; }