Beispiel #1
0
        public void collisionDetection(ref Models.Gameworld gameWorld, Vector2 movementVector, Vector2 rightStick, GameTime gameTime)
        {
            rockCollisionIndex.Clear();
            rockProjectileCollisions.Clear();

            enemyCollisionIndex.Clear();
            enemyProjectileCollisions.Clear();

            playerProjectileCollisions.Clear();
            projectileCollisionsIndex.Clear();
            checkPlayerProjectileCollisions(gameWorld);

            checkEnemyProjectileCollisions(gameWorld);

            playerCollisions(gameWorld, movementVector, rightStick, gameTime);

            bounceThoseRocks(gameWorld.getRock());
        }
Beispiel #2
0
        private void checkPlayerProjectileCollisions(Models.Gameworld gameWorld)
        {
            List<int> collidedProjectileIndexes = new List<int>();

            bool flaggBecauseFuckYouThatsWhy = false;

            for (int i = 0; i < gameWorld.getPlayer().BulletList.Count; i++)
            {
                flaggBecauseFuckYouThatsWhy = false;
                for (int j = 0; j < gameWorld.getRock().Count; j++)
                {
                    if (gameWorld.getRock()[j].BoundingBox.Intersects(gameWorld.getPlayer().BulletList[i].BoundingBox))
                    {
                        if (perPixelCollisionDetection(gameWorld.getPlayer().BulletList[i],
                                                        gameWorld.getRock()[j]))
                        {
                            collidedProjectileIndexes.Add(i);
                            rockCollisionIndex.Add(j);
                            rockProjectileCollisions.Add(gameWorld.getPlayer().BulletList[i]);
                            rockProjectileCollisions.Add(gameWorld.getRock()[j]);
                            flaggBecauseFuckYouThatsWhy = true;

                        }
                    }
                    if (flaggBecauseFuckYouThatsWhy) break;
                }
                if (!flaggBecauseFuckYouThatsWhy)
                {
                    for (int l = 0; l < gameWorld.EnemyList.Count; l++)
                    {
                        if (gameWorld.EnemyList[l].BoundingBox.Intersects(gameWorld.getPlayer().BulletList[i].BoundingBox))
                        {
                            if (perPixelCollisionDetection(gameWorld.getPlayer().BulletList[i],
                                                            gameWorld.EnemyList[l]))
                            {

                                collidedProjectileIndexes.Add(i);
                                enemyCollisionIndex.Add(l);
                                enemyProjectileCollisions.Add(gameWorld.getPlayer().BulletList[i]);
                                enemyProjectileCollisions.Add(gameWorld.EnemyList[l]);
                                flaggBecauseFuckYouThatsWhy = true;
                            }
                        }
                        if (flaggBecauseFuckYouThatsWhy) break;
                    }
                }
            }

            //Remove collided projectiles.

            if (collidedProjectileIndexes.Count > 0)
            {
                collidedProjectileIndexes.Sort();

                //for (int i = 0; i < collidedProjectileIndexes.Count; i++)
                for (int i = collidedProjectileIndexes.Count - 1; i >= 0; i--)
                {
                    gameWorld.getPlayer().BulletList.RemoveAt(collidedProjectileIndexes[i]);
                }
            }
        }
Beispiel #3
0
        //Checks for collisions on the Player.
        private void playerCollisions(Models.Gameworld gameWorld, Vector2 movementVector, Vector2 rightStick, GameTime gameTime)
        {
            Vector2 prePosition = gameWorld.getPlayer().Position;

            gameWorld.getPlayer().update(movementVector, rightStick, gameTime);

            //for (int i = 0; i < gameWorld.getRock().Count(); i++)
            foreach (Models.Collidable rock in gameWorld.getRock())
            {
                if (rock.BoundingBox.Intersects(gameWorld.getPlayer().BoundingBox))
                {
                    if (perPixelCollisionDetection(gameWorld.getPlayer(), rock))
                    {

                        gameWorld.getPlayer().Position = new Vector2(prePosition.X, prePosition.Y);
                        //gameWorld.getPlayer().Velocity = (Vector2.Zero);

                        knockback(gameWorld.PlayerObject, rock);
                        break;
                    }
                }
            }

            levelBoundCollision(gameWorld, prePosition);
        }
Beispiel #4
0
        public void handleProjectileCollisions(Models.Gameworld gameWorld)
        {
            List<int> rockCollisionsIndex                       = physicsEngine.RockCollisionIndexes;
            List<int> enemyCollisionsIndex                      = physicsEngine.EnemyCollisionIndexes;
            List<Models.GameObject> rockProjectileCollisions    = physicsEngine.getRockProjectileCollisions();
            List<Models.GameObject> enemyProjectileCollisions   = physicsEngine.getEnemyProjectileCollisions();
            Models.Projectile projectile                        = null;

            int damage;

            if (rockProjectileCollisions.Count != 0)
            {
                for (int i = 0; i < rockProjectileCollisions.Count; i++)
                {
                    projectile = (Models.Projectile)rockProjectileCollisions[i++];
                    damage = projectile.Damage;

                    rockProjectileCollisions[i].updateCurrentHealth(- damage);

                    spawnExplosionParticles(projectile, projectile, gameWorld.getParticleSystem());

                    physicsEngine.collisionUsingAllKindaCrazyStuff(rockProjectileCollisions[i], projectile);

                }
                for (int i = 0; i < rockCollisionsIndex.Count; i++)
                {
                    if (gameWorld.getRock()[rockCollisionsIndex[i]].CurrentHealth <= 0)
                    {
                        spawnExplosionParticles(gameWorld.getRock()[rockCollisionsIndex[i]], projectile, gameWorld.getParticleSystem());
                        soundManager.playSoundWithPositioning("explosion", gameWorld.PlayerObject, gameWorld.getRock()[rockCollisionsIndex[i]]);
                        gameWorld.getRock().RemoveAt(rockCollisionsIndex[i]);
                    }
                }
            }

            if(enemyProjectileCollisions.Count != 0)
            {
                for (int i = 0; i < enemyProjectileCollisions.Count; i++)
                {
                    projectile = (Models.Projectile)enemyProjectileCollisions[i];
                    i++;
                    damage = projectile.Damage;

                    enemyProjectileCollisions[i].updateCurrentHealth(-damage);
                    spawnExplosionParticles(projectile, projectile, gameWorld.getParticleSystem());

                }
                for (int i = enemyCollisionsIndex.Count -1; i >= 0; i--)
                {
                    if (gameWorld.EnemyList[enemyCollisionsIndex[i]].CurrentHealth <= 0)
                    {
                        spawnExplosionParticles(gameWorld.EnemyList[enemyCollisionsIndex[i]], projectile, gameWorld.getParticleSystem());
                        soundManager.playSoundWithPositioning("explosion", gameWorld.PlayerObject, gameWorld.EnemyList[enemyCollisionsIndex[i]]);
                        gameWorld.Score += gameWorld.EnemyList[enemyCollisionsIndex[i]].MaxHealth;
                        gameWorld.EnemyList.RemoveAt(enemyCollisionsIndex[i]);
                    }
                }
            }
        }