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);
     }
 }
示例#2
0
        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);
            }
        }