public static bool Ausgebremst(Rechteck bewegt, Rechteck hinderniss, RichtungX richtungX, RichtungY richtungY) { if (Kollision(bewegt, hinderniss)) { return(true); } var bewegungStoppen = false; switch (richtungX) { case RichtungX.NachRechts: bewegungStoppen |= hinderniss.GetLinks() > bewegt.GetLinks(); break; case RichtungX.NachLinks: bewegungStoppen |= hinderniss.GetLinks() < bewegt.GetLinks(); break; case RichtungX.Steht: break; default: throw new ArgumentOutOfRangeException(nameof(richtungX), richtungX, null); } switch (richtungY) { case RichtungY.NachOben: bewegungStoppen |= hinderniss.GetOben() < bewegt._hoehe; break; case RichtungY.NachUnten: bewegungStoppen |= hinderniss.GetOben() > bewegt.GetOben(); break; case RichtungY.Steht: break; default: throw new ArgumentOutOfRangeException(nameof(richtungY), richtungY, null); } return(bewegungStoppen); }
public static bool Kollision(Rechteck r1, Rechteck r2) { return(r1.GetLinks() < r2.GetRechts() && r2.GetLinks() < r1.GetRechts() && r1.GetOben() < r2.GetUnten() && r2.GetOben() < r1.GetUnten()); }