示例#1
0
 public void LoadContent()
 {
     LargeTarget.LoadContent(MyGame.Manager.ImageManager.TargetLargeRectangle);
     SmallTarget.LoadContent(MyGame.Manager.ImageManager.TargetSmallRectangle);
     KillEnemy.LoadContent(MyGame.Manager.ImageManager.EnemyRectangles);
     targetFast = false;
 }
示例#2
0
        protected void VerifyEnemies()
        {
            if (0 == MyGame.Manager.EnemyManager.EnemyTest.Count)
            {
                return;
            }

            // Enemy has maxed out frames so check for collision.
            LargeTarget   target    = MyGame.Manager.SpriteManager.LargeTarget;
            IList <Enemy> enemyTest = MyGame.Manager.EnemyManager.EnemyTest;

            for (Byte testIndex = 0; testIndex < enemyTest.Count; testIndex++)
            {
                Enemy enemy = enemyTest[testIndex];
                if (!Invincibile)
                {
                    // First check if enemy instantly kills target.
                    Boolean test = CheckEnemyKillTarget(enemy, target);

                    // Instant death!	Game Over.
                    if (test)
                    {
                        // Do NOT reset enemy here as CheckThisEnemy() will remove from dictionary and reset there.
                        // Set the enemy position so can be rendered by the additional "kill" enemy to show death!
                        MyGame.Manager.StateManager.SetKillSpace(enemy.Position);
                        NextScreen = ScreenType.Dead;
                    }
                    else
                    {
                        // Enemy not kill target but missed so increment miss total.
                        MyGame.Manager.SoundManager.PlaySoundEffect(SoundEffectType.Wrong);
                        MyGame.Manager.ScoreManager.IncrementMisses();
                        if (MyGame.Manager.ScoreManager.MissesTotal >= Constants.MAX_MISSES)
                        {
                            // If maximum misses then game over.
                            // Do NOT reset enemy here as CheckThisEnemy() will remove from dictionary and reset there.
                            NextScreen = ScreenType.Dead;
                        }
                    }
                }

                // Finally, check if anymore enemies to spawn...
                Byte    enemyID = enemy.ID;
                Boolean check   = MyGame.Manager.EnemyManager.CheckThisEnemy(enemyID);
                if (!check)
                {
                    MyGame.Manager.EnemyManager.SpawnOneEnemy(enemyID);
                }
                else
                {
                    CheckLevelComplete = true;
                }
            }
        }
示例#3
0
        public void Reset(LevelType levelType, Byte levelNo)
        {
            Byte ratio         = (Byte)(levelNo / 2.0f);
            Byte largeTargetPB = Constants.LARGE_TARGET_PB[(Byte)levelType];
            Byte smallTargetPB = Constants.SMALL_TARGET_PB[(Byte)levelType];

            LargeTarget.Reset(largeTargetPB + ratio);
            SmallTarget.Reset(smallTargetPB + ratio);

            //SmallTarget.SetPosition(smallPosition);
            //LargeTarget.SetPosition(largePosition);
        }
示例#4
0
        public void SetPosition(SpriteType type, Vector2 position)
        {
            switch (type)
            {
            case SpriteType.LargeTarget:
                LargeTarget.SetPosition(position);
                break;

            case SpriteType.SmallTarget:
                SmallTarget.SetPosition(position);
                break;
            }
        }
示例#5
0
        private void TheInit()
        {
            //Vector2 stPos = new Vector2(80, 360 + Constants.GameOffsetY);
            Rectangle stBounds = new Rectangle(30, 310 + Constants.GameOffsetY, 100, 100);

            SmallTarget = new SmallTarget();
            SmallTarget.Initialize(smallPosition, stBounds);

            const Byte targetTop  = 74;
            const Byte targetSize = 64;
            //Vector2 bgPos = new Vector2((Constants.ScreenWide - 64) / 2.0f, 250 + Constants.GameOffsetY);
            Rectangle bgBounds = new Rectangle(-2, targetTop + Constants.GameOffsetY, Constants.ScreenWide - targetSize + 2, Constants.ScreenHigh - (2 * Constants.GameOffsetY) - targetTop - targetSize + 2);

            LargeTarget = new LargeTarget();
            LargeTarget.Initialize(largePosition, Rectangle.Empty, bgBounds);
        }
示例#6
0
        private static Boolean CheckEnemyKillTarget(Enemy enemy, LargeTarget target)
        {
            Boolean test = MyGame.Manager.CollisionManager.BoxesCollision(enemy.Position, target.Position);

            if (!test)
            {
                return(false);
            }

            test = MyGame.Manager.CollisionManager.ColorCollision(enemy.Position, target.Position);
            if (!test)
            {
                return(false);
            }

            return(true);
        }
示例#7
0
 public void Draw()
 {
     SmallTarget.Draw();
     LargeTarget.Draw();
 }
示例#8
0
 public void Update(GameTime gameTime)
 {
     LargeTarget.Update(gameTime, targetFast, targetHorz, targetVert);
     SmallTarget.Update(gameTime, targetHorz, targetVert);
 }
示例#9
0
        public override Int32 Update(GameTime gameTime)
        {
            base.Update(gameTime);
            if (GamePause)
            {
                return((Int32)CurrScreen);
            }

            Boolean escape = MyGame.Manager.InputManager.Escape();

            if (escape)
            {
                return((Int32)PrevScreen);
            }

            checkLevelComplete = false;

            // Log delta to monitor performance!
#if DEBUG
            //string time = gameTime.ElapsedGameTime.TotalSeconds.ToString();
            //MyGame.Manager.Logger.Info(time);
            //Console.WriteLine(time);
            //System.Diagnostics.Debug.WriteLine(time);
#endif

            // TODO delete
            //MyGame.Manager.CollisionManager.ClearCollisionList();

            // Move target unconditionally.
            Single horz = MyGame.Manager.InputManager.Horizontal();
            Single vert = MyGame.Manager.InputManager.Vertical();
            MyGame.Manager.SpriteManager.SetMovement(horz, vert);
            MyGame.Manager.SpriteManager.Update(gameTime);


            // Test shooting enemy ships.
            Boolean fire = MyGame.Manager.InputManager.Fire();
            if (fire)
            {
                SByte bulletIndex = MyGame.Manager.BulletManager.CheckBullets();
                if (Constants.INVALID_INDEX != bulletIndex)
                {
                    // TODO check!
                    MyGame.Manager.SoundManager.PlaySoundEffect();

                    Vector2 position = MyGame.Manager.SpriteManager.LargeTarget.Position;
                    MyGame.Manager.BulletManager.Shoot((Byte)bulletIndex, position);
                }
            }


            // BULLETS.
            // Update bullets and test collision.
            MyGame.Manager.BulletManager.Update(gameTime);
            if (MyGame.Manager.BulletManager.BulletTest.Count > 0)
            {
                IList <Bullet> bulletTest = MyGame.Manager.BulletManager.BulletTest;
                for (Byte testIndex = 0; testIndex < bulletTest.Count; testIndex++)
                {
                    Bullet bullet = bulletTest[testIndex];
                    SByte  testID = MyGame.Manager.CollisionManager.DetermineEnemySlot(bullet.Position);

                    // Check to ensure bullet will something.
                    if (Constants.INVALID_INDEX == testID)
                    {
                        continue;
                    }

                    // Check to ensure bullet in same slot as enemy.
                    Byte slotID = (Byte)testID;
                    if (!MyGame.Manager.EnemyManager.EnemyDict.ContainsKey(slotID))
                    {
                        continue;
                    }

                    // It could be possible that the enemy in this slot is already dead!
                    Enemy enemy = MyGame.Manager.EnemyManager.EnemyDict[slotID];
                    if (EnemyType.Dead == enemy.EnemyType)
                    {
                        continue;
                    }

                    // Can kill initial enemy [at frame count = 0] because enemy will be "hidden".
                    Byte enemyCount = enemy.FrameCount;
                    if (0 == enemy.FrameCount)
                    {
                        continue;
                    }

                    // Check if bullet collides with enemy.
                    Byte    enemyFrame = enemy.FrameIndex;
                    Boolean collide    = MyGame.Manager.CollisionManager.BulletCollideEnemy(enemy.Position, bullet.Position, levelType, enemyFrame);
                    if (!collide)
                    {
                        continue;
                    }

                    // Collision!	Enemy dead and trigger explode...
                    MyGame.Manager.ScoreManager.UpdateGameScore(enemyFrame);

                    // TODO if DiffType == HARD and enemy.FrameCount = 9 OR 11 then enemy dead?
                    ExplodeType explodeType = enemy.FrameIndex < 4 ? ExplodeType.Small : ExplodeType.Big;
                    Byte        enemyID     = enemy.ID;
                    MyGame.Manager.ExplosionManager.LoadContent(enemyID, explodeType);
                    MyGame.Manager.ExplosionManager.Explode(enemyID, explodeType, enemy.Position);
                    enemy.Dead();
                }
            }

            // EXPLOSIONS.
            MyGame.Manager.ExplosionManager.Update(gameTime);
            if (MyGame.Manager.ExplosionManager.ExplosionTest.Count > 0)
            {
                // Iterate all enemy ships to test and add to misses.
                IList <Byte> explosionTest = MyGame.Manager.ExplosionManager.ExplosionTest;
                for (Byte testIndex = 0; testIndex < explosionTest.Count; testIndex++)
                {
                    Byte    enemyID = explosionTest[testIndex];
                    Boolean check   = MyGame.Manager.EnemyManager.CheckThisEnemy(enemyID);
                    if (!check)
                    {
                        MyGame.Manager.EnemyManager.SpawnOneEnemy(enemyID);
                    }
                    else
                    {
                        checkLevelComplete = true;
                    }
                }
            }

            // ENEMYS.
            // Update enemies and test collisions.
            MyGame.Manager.EnemyManager.Update(gameTime);
            if (MyGame.Manager.EnemyManager.EnemyTest.Count > 0)
            {
                // TODO delete
                //checkLevelComplete = true;

                // Enemy has maxed out frames so check for collision.
                LargeTarget   target    = MyGame.Manager.SpriteManager.LargeTarget;
                IList <Enemy> enemyTest = MyGame.Manager.EnemyManager.EnemyTest;

                for (Byte testIndex = 0; testIndex < enemyTest.Count; testIndex++)
                {
                    Enemy enemy = enemyTest[testIndex];
                    if (!invincibile)
                    {
                        // First check if enemy instantly kills target.
                        Boolean test = CheckEnemyKillTarget(enemy, target);

                        // Instant death!	Game Over.
                        if (test)
                        {
                            // Do NOT reset enemy here as we want to see Target killed by Enemy!
                            return((Int32)ScreenType.Dead);
                        }

                        // Enemy not kill target but missed so increment miss total.
                        MyGame.Manager.ScoreManager.IncrementMisses();
                        if (MyGame.Manager.ScoreManager.MissesTotal >= Constants.MAX_MISSES)
                        {
                            // If maximum misses then game over.
                            enemy.Reset();
                            return((Int32)ScreenType.Dead);
                        }
                    }

                    // Finally, check if anymore enemies to spawn...
                    Byte    enemyID = enemy.ID;
                    Boolean check   = MyGame.Manager.EnemyManager.CheckThisEnemy(enemyID);
                    if (!check)
                    {
                        MyGame.Manager.EnemyManager.SpawnOneEnemy(enemyID);
                    }
                    else
                    {
                        checkLevelComplete = true;
                    }
                }
            }


            // Update fire icon.
            Byte canShootIndex = Convert.ToByte(!MyGame.Manager.BulletManager.CanShoot);
            MyGame.Manager.IconManager.UpdateFireIcon(canShootIndex);


            // Finally, check to see if all enemies finished = level complete.
            if (checkLevelComplete)
            {
                Boolean noMoreEnemies = MyGame.Manager.EnemyManager.CheckEnemiesNone();
                if (noMoreEnemies)
                {
                    return((Int32)ScreenType.Finish);
                }
            }

            MyGame.Manager.ScoreManager.Update(gameTime);
            return((Int32)CurrScreen);
        }