public override bool Collision(Bullet bullet, ref MessageManager msgManager) { float x = (float)bullet.Position.X; float y = (float)bullet.Position.Y; double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (distance > AttckRadiusDouble) { return(false); } Vector2D vct = new Vector2D(Position.X - x, Position.Y - y); vct.Normalize(); double ag = vct.GetAngle(); int changecount = currentIndex - firstIndex; double oriag = JudgeBegin - AverageAngle * changecount; if (oriag < 0) { oriag = 360 + oriag; if (oriag + JudgeArea > 360) { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360)) { return(false); } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } } else { if (oriag - JudgeArea < 0) { if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } } CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal(); mess.Position.X = Position.X; mess.Position.Y = Position.Y; mess.SetColor(0); msgManager.AcceptMessage(mess); return(true); }
public override bool Collision(Bullet bullet, ref MessageManager msgManager) { float x = (float)bullet.Position.X; float y = (float)bullet.Position.Y; double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (distance > AttckRadiusDouble) { return false; } Vector2D vct = new Vector2D(Position.X - x, Position.Y - y); vct.Normalize(); double ag = vct.GetAngle(); int changecount = currentIndex - firstIndex; double oriag = JudgeBegin - AverageAngle * changecount; if (oriag < 0) { oriag = 360 + oriag; if (oriag + JudgeArea > 360) { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360)) return false; } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) return false; } } else { if (oriag - JudgeArea < 0) { if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return false; } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) return false; } } CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal(); mess.Position.X = Position.X; mess.Position.Y = Position.Y; mess.SetColor(0); msgManager.AcceptMessage(mess); return true; }