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); }
// 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); }
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); }
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); }
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); }
// 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); }