Exemple #1
0
        private int GetFootForArrow(int arrow, MetricPosition position, ExpressedChart.ChartSearchNode node)
        {
            while (node != null && node.Position == position)
            {
                if (node.PreviousLink != null && !node.PreviousLink.GraphLink.IsRelease())
                {
                    // If this step is a footswap we need to ignore the other foot, which may still be resting on this arrow.
                    var previousStepLink = node.GetPreviousStepLink();
                    var footSwapFoot     = InvalidFoot;
                    var footSwapPortion  = DefaultFootPortion;
                    var footSwap         = previousStepLink?.GraphLink.IsFootSwap(out footSwapFoot, out footSwapPortion) ?? false;
                    if (footSwap && node.GraphNode.State[footSwapFoot, footSwapPortion].Arrow == arrow)
                    {
                        return(footSwapFoot);
                    }

                    // No footswap on the given arrow.
                    for (var f = 0; f < NumFeet; f++)
                    {
                        for (var p = 0; p < NumFootPortions; p++)
                        {
                            if (node.GraphNode.State[f, p].Arrow == arrow)
                            {
                                return(f);
                            }
                        }
                    }
                }

                node = node.GetNextNode();
            }

            return(InvalidFoot);
        }
Exemple #2
0
        private void WriteExpression(ExpressedChart.ChartSearchNode node, double y)
        {
            if (node == null)
            {
                return;
            }
            var position = node.Position;

            while (node != null && node.Position == position)
            {
                if (node.PreviousLink != null && !node.PreviousLink.GraphLink.IsRelease())
                {
                    var writeCost = false;
                    for (var p = 0; p < NumFootPortions; p++)
                    {
                        // Left Foot
                        if (LastExpressionPosition[L] < y && node.PreviousLink.GraphLink.Links[L, p].Valid)
                        {
                            var leftX   = ExpressedChartX + ExpressionColumnInfo[(int)ExpressionColumns.LeftFoot].X;
                            var stepStr = StepTypeStrings[(int)node.PreviousLink.GraphLink.Links[L, p].Step];
                            if (node.PreviousLink.GraphLink.IsJump())
                            {
                                stepStr = "[Jump] " + stepStr;
                            }
                            StreamWriter.Write(
                                $@"			<p class=""exp_text"" style=""top:{(int)(y - ChartTextH * .5)}px; left:{leftX}px; width:{ExpressionColW}px;"">{stepStr}</p>
");
                            writeCost = true;
                            LastExpressionPosition[L] = y;
                        }

                        // Right Foot
                        if (LastExpressionPosition[R] < y && node.PreviousLink.GraphLink.Links[R, p].Valid)
                        {
                            var rightX  = ExpressedChartX + ExpressionColumnInfo[(int)ExpressionColumns.RightFoot].X;
                            var stepStr = StepTypeStrings[(int)node.PreviousLink.GraphLink.Links[R, p].Step];
                            if (node.PreviousLink.GraphLink.IsJump())
                            {
                                stepStr = "[Jump] " + stepStr;
                            }
                            StreamWriter.Write(
                                $@"			<p class=""exp_text"" style=""top:{(int)(y - ChartTextH * .5)}px; left:{rightX}px; width:{ExpressionColW}px;"">{stepStr}</p>
");
                            writeCost = true;
                            LastExpressionPosition[R] = y;
                        }
                    }

                    // Cost
                    if (writeCost)
                    {
                        var costX = ExpressedChartX + ExpressionColumnInfo[(int)ExpressionColumns.Cost].X;
                        StreamWriter.Write(
                            $@"			<p class=""exp_text"" style=""top:{(int) (y - ChartTextH * .5)}px; left:{costX}px; width:{CostColW}px;"">{node.Cost}</p>
");
                    }
                }

                node = node.GetNextNode();
            }
        }