public bool PixelCollides(Vector2 center, float ray, bool erase = false)
 {
     for (int y = 0; y < height; y++)
     {
         for (int x = 0; x < width; x++)
         {
             Vector2 pixelPos        = new Vector2(position.X - width / 2 + x, position.Y - height / 2 + y);
             float   pixToBulletDist = pixelPos.Sub(center).GetLength();
             if (pixToBulletDist <= ray)
             {
                 int pixelAlfaIndex = (y * width + x) * 4 + 3;
                 if (erase)
                 {//must erase pixels inside the explosion's circle
                     spriteobj.GetSprite().bitmap[pixelAlfaIndex] = 0;
                 }
                 else
                 {
                     if (spriteobj.GetSprite().bitmap[pixelAlfaIndex] != 0)
                     {
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
Esempio n. 2
0
        // METHODS

        // UPDATE

        private bool IsCollideWithBullet(EnemysBullet[] bullets)
        {
            for (int i = 0; i < this.bullets.Length; i++)
            {
                if (!this.bullets[i].IsFired)
                {
                    continue;
                }
                for (int j = 0; j < bullets.Length; j++)
                {
                    if (!bullets[j].IsFired)
                    {
                        continue;
                    }
                    Vector2 enemysBulletsPoint = new Vector2(bullets[j].Position.X + bullets[j].Width / 2, bullets[j].Position.Y + bullets[j].Height);
                    Vector2 bulletsPoint       = new Vector2(this.bullets[i].Position.X + this.bullets[i].Width / 2, this.bullets[i].Position.Y);
                    if (bulletsPoint.Sub(enemysBulletsPoint).GetLength() <= this.bullets[i].Width / 2 + bullets[j].Width / 2)
                    {
                        this.bullets[i].IsFired    = false;
                        this.bullets[i].IsExploded = true;
                        bullets[j].IsFired         = false;
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 3
0
 static public bool IsCollideWithBullet(PlayerBullet bullet)
 {
     if (centeredPosition.Sub(bullet.Point).GetLength() < Width / 2 + bullet.Width / 2 && isAlive)
     {
         isAlive       = false;
         Player.Score += points;
         return(true);
     }
     return(false);
 }
        public bool Collides(Vector2 center, float ray)
        {
            bool    collision = false;
            Vector2 dist      = position.Sub(center);

            if (dist.GetLength() <= width / 2 + ray)
            {
                if (PixelCollides(center, ray))
                {
                    collision = true;
                    PixelCollides(center, 15, true);
                }
            }
            return(collision);
        }
Esempio n. 5
0
 private bool IsCollideWithBullet(EnemyBullet[] bullets)
 {
     if (invincibleCooldown <= 0)
     {
         for (int i = 0; i < bullets.Length; i++)
         {
             if (!bullets[i].IsFired)
             {
                 continue;
             }
             if (centeredPosition.Sub(bullets[i].Point).GetLength() < sprite.Width / 2 + bullets[i].Width / 2)
             {
                 bullets[i].IsFired = false;
                 lives--;
                 invincibleCooldown = invincibleTempo;
                 flickeringCooldown = flickeringTempo;
                 return(true);
             }
         }
     }
     return(false);
 }
Esempio n. 6
0
 private bool IsCollideWithPlayerBullet(PlayersBullet[] bullets)
 {
     for (int i = 0; i < bullets.Length; i++)
     {
         if (!bullets[i].IsFired)
         {
             continue;
         }
         for (int j = 0; j < this.barriers.Length; j++)
         {
             if (!this.barriers[j].IsAlive)
             {
                 continue;
             }
             Vector2 barriersCenter = new Vector2(this.barriers[j].Position.X + this.barriers[j].Side / 2, this.barriers[j].Position.Y + this.barriers[j].Side / 2);
             Vector2 bulletsPoint   = new Vector2(bullets[i].Position.X + bullets[i].Width / 2, bullets[i].Position.Y);
             if (barriersCenter.Sub(bulletsPoint).GetLength() <= this.barriers[j].Side / 2 + bullets[i].Width * 10)
             {
                 for (int z = this.barriers[j].Bricks.Length - 1; z >= 0; z--)
                 {
                     if (!this.barriers[j].Bricks[z].IsAlive)
                     {
                         continue;
                     }
                     Vector2 bricksCenter = new Vector2((float)(this.barriers[j].Bricks[z].Position.X + this.barriers[j].Bricks[z].Side / 2), (float)(this.barriers[j].Bricks[z].Position.Y + this.barriers[j].Bricks[z].Side / 2));
                     if (bricksCenter.Sub(bulletsPoint).GetLength() <= this.barriers[j].Bricks[z].Side / 2 + bullets[i].Width / 2)
                     {
                         this.barriers[j].Bricks[z].IsAlive = false;
                         bullets[i].IsFired    = false;
                         bullets[i].IsExploded = true;
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
Esempio n. 7
0
        // METHODS

        // UPDATE

        private bool IsCollideWithEnemy(Enemy[] enemies)
        {
            for (int i = 0; i < enemies.Length; i++)
            {
                if (!enemies[i].IsAlive)
                {
                    continue;
                }
                for (int j = 0; j < this.barriers.Length; j++)
                {
                    if (!this.barriers[j].IsAlive)
                    {
                        continue;
                    }
                    //Vector2 barriersCenter = new Vector2(this.barriers[j].Position.X + this.barriers[j].Side / 2, this.barriers[j].Position.Y + this.barriers[j].Side / 2);
                    Vector2 enemysCenter = new Vector2(enemies[i].PositionX + enemies[i].Width / 2, enemies[i].PositionY - enemies[i].Height * 2);
                    //if (enemysCenter.Sub(barriersCenter).GetLength() <= enemies[i].Width / 2 + this.barriers[j].Side / 2)
                    //{
                    for (int z = 0; z < this.barriers[j].Bricks.Length; z++)
                    {
                        if (!this.barriers[j].Bricks[z].IsAlive)
                        {
                            continue;
                        }
                        Vector2 bricksCenter = new Vector2(this.barriers[j].Bricks[z].Position.X + this.barriers[j].Bricks[z].Side / 2, this.barriers[j].Bricks[z].Position.Y + this.barriers[j].Bricks[z].Side / 2);
                        if (bricksCenter.Sub(enemysCenter).GetLength() <= (int)BarriersValues.side / 2 + enemies[i].Width / 2)
                        {
                            this.barriers[j].Bricks[z].IsAlive = false;
                            return(true);
                        }
                    }
                    //}
                }
            }
            return(false);
        }
        public bool Collides(Vector2 center, float ray)
        {
            Vector2 dist = Position.Sub(center);

            return(dist.GetLength() <= width / 2 + ray);
        }