Example #1
0
        // 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;
            }
        }
Example #2
0
        // 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;
        }
Example #4
0
        // 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>();
        }
Example #5
0
        // 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
        }
Example #6
0
        // 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;
 }