public void DrawMomentum(Rider rider, float opacity) { var color = Constants.MomentumVectorColor; color = ChangeOpacity(color, opacity); for (int i = 0; i < rider.Body.Length; i++) { var anchor = rider.Body[i]; var vec1 = anchor.Location; var vec2 = vec1 + (anchor.Momentum); var line = Line.FromAngle( vec1, Angle.FromVector(anchor.Momentum), 2); _momentumvao.AddLine( GameDrawingMatrix.ScreenCoordD(line.Position), GameDrawingMatrix.ScreenCoordD(line.Position2), color, GameDrawingMatrix.Scale / 2.5f); } }
public void DrawContacts(Rider rider, List <int> diagnosis, float opacity) { if (diagnosis == null) { diagnosis = new List <int>(); } var bones = RiderConstants.Bones; for (var i = 0; i < bones.Length; i++) { var constraintcolor = bones[i].OnlyRepel ? Constants.ConstraintRepelColor : Constants.ConstraintColor; constraintcolor = ChangeOpacity(constraintcolor, opacity); if (bones[i].Breakable) { continue; } else if (bones[i].OnlyRepel) { _lines.AddLine( GameDrawingMatrix.ScreenCoordD(rider.Body[bones[i].joint1].Location), GameDrawingMatrix.ScreenCoordD(rider.Body[bones[i].joint2].Location), constraintcolor, GameDrawingMatrix.Scale / 4); } else if (i <= 3) { _lines.AddLine( GameDrawingMatrix.ScreenCoordD(rider.Body[bones[i].joint1].Location), GameDrawingMatrix.ScreenCoordD(rider.Body[bones[i].joint2].Location), constraintcolor, GameDrawingMatrix.Scale / 4); } } if (!rider.Crashed && diagnosis.Count != 0) { Color firstbreakcolor = Constants.ConstraintFirstBreakColor; Color breakcolor = Constants.ConstraintBreakColor; breakcolor = ChangeOpacity(breakcolor, opacity / 2); firstbreakcolor = ChangeOpacity(firstbreakcolor, opacity); for (int i = 1; i < diagnosis.Count; i++) { var broken = diagnosis[i]; if (broken >= 0) { _lines.AddLine( GameDrawingMatrix.ScreenCoordD(rider.Body[bones[broken].joint1].Location), GameDrawingMatrix.ScreenCoordD(rider.Body[bones[broken].joint2].Location), breakcolor, GameDrawingMatrix.Scale / 4); } } //the first break is most important so we give it a better color, assuming its not just a fakie death if (diagnosis[0] > 0) { _lines.AddLine( GameDrawingMatrix.ScreenCoordD(rider.Body[bones[diagnosis[0]].joint1].Location), GameDrawingMatrix.ScreenCoordD(rider.Body[bones[diagnosis[0]].joint2].Location), firstbreakcolor, GameDrawingMatrix.Scale / 4); } } for (var i = 0; i < rider.Body.Length; i++) { Color c = Constants.ContactPointColor; if ( ((i == RiderConstants.SledTL || i == RiderConstants.SledBL) && diagnosis.Contains(-1)) || ((i == RiderConstants.BodyButt || i == RiderConstants.BodyShoulder) && diagnosis.Contains(-2))) { c = Constants.ContactPointFakieColor; } c = ChangeOpacity(c, opacity); _lines.AddLine( GameDrawingMatrix.ScreenCoordD(rider.Body[i].Location), GameDrawingMatrix.ScreenCoordD(rider.Body[i].Location), c, GameDrawingMatrix.Scale / 4); } }