Exemple #1
0
        static public int EvalValue(String parsingText, StatisticsDataInput dimensions, Control control)
        {
            int    iRet = 0;
            Random rand = new Random();

            // When adding a child, it is important to place the child on the other side of the parent, if the parent is flipped.
            var dt     = new DataTable();
            var screen = Screen.PrimaryScreen;

            parsingText = parsingText.Replace("screenW", dimensions.Screen.X.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("screenH", dimensions.Screen.Y.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("areaW", dimensions.Area.X.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("areaH", dimensions.Screen.Y.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("imageW", dimensions.Image.Width.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("imageH", dimensions.Image.Height.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("imageX", dimensions.Image.X.ToString(CultureInfo.InvariantCulture));
            parsingText = parsingText.Replace("imageY", dimensions.Image.Y.ToString(CultureInfo.InvariantCulture));
            if (dimensions.Random >= 0)
            {
                parsingText = parsingText.Replace("random", dimensions.Random.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                parsingText = parsingText.Replace("random", rand.Next(0, 100).ToString(CultureInfo.InvariantCulture));
            }
            if (dimensions.SRandom >= 0)
            {
                parsingText = parsingText.Replace("randS", dimensions.SRandom.ToString(CultureInfo.InvariantCulture));
            }
            else
            {
                parsingText = parsingText.Replace("randS", 50.ToString());
            }

            try
            {
                var    v = dt.Compute(parsingText, "");
                double dv;
                if (double.TryParse(v.ToString(), out dv))
                {
                    iRet = (int)dv;
                }
            }
            catch (Exception ex)
            {
                Program.AddLog("Unable to parse string " + parsingText + " - " + ex.Message, "Parse value", Program.LOG_TYPE.ERROR, control);
                return(int.MinValue);
            }

            return(iRet);
        }
Exemple #2
0
        static public AnimationStatistics GetAnimationStatistics(XmlData.AnimationNode node, StatisticsDataInput dimensions, Control c)
        {
            var  stat           = new AnimationStatistics();
            bool variableRand   = false;
            bool variableScreen = false;

            stat.Frames = node.Sequence.Frame.Length;
            if (node.Sequence.RepeatCount.IndexOf("screen") >= 0 || node.Sequence.RepeatCount.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.Sequence.RepeatCount.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.Repeats     = EvalValue(node.Sequence.RepeatCount, dimensions, c);
            stat.RepeatFrom  = node.Sequence.RepeatFromFrame;
            stat.TotalFrames = stat.Frames + (stat.Frames - stat.RepeatFrom) * stat.Repeats;

            stat.Start = new AnimationStatistics.StepValues();
            if (node.Start.X.IndexOf("screen") >= 0 || node.Start.X.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.Start.X.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.Start.X = EvalValue(node.Start.X, dimensions, c);
            if (node.Start.Y.IndexOf("screen") >= 0 || node.Start.Y.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.Start.Y.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.Start.Y = EvalValue(node.Start.Y, dimensions, c);
            if (node.Start.Interval.IndexOf("screen") >= 0 || node.Start.Interval.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.Start.Interval.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.Start.Interval = EvalValue(node.Start.Interval, dimensions, c);
            stat.Start.Offset   = node.Start.OffsetY;
            stat.Start.Opacity  = node.Start.Opacity;

            stat.End = new AnimationStatistics.StepValues();
            if (node.End.X.IndexOf("screen") >= 0 || node.End.X.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.End.X.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.End.X = EvalValue(node.End.X, dimensions, c);
            if (node.End.Y.IndexOf("screen") >= 0 || node.End.Y.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.End.Y.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.End.Y = EvalValue(node.End.Y, dimensions, c);
            if (node.End.Interval.IndexOf("screen") >= 0 || node.End.Interval.IndexOf("area") >= 0)
            {
                variableScreen = true;
            }
            if (node.End.Interval.IndexOf("random") >= 0)
            {
                variableRand = true;
            }
            stat.End.Interval = EvalValue(node.End.Interval, dimensions, c);
            stat.End.Offset   = node.End.OffsetY;
            stat.End.Opacity  = node.End.Opacity;

            stat.SubSteps = new List <AnimationStatistics.StepValues>();
            for (var k = 0; k < stat.TotalFrames; k++)
            {
                var step = new AnimationStatistics.StepValues();
                step.X        = (int)(stat.Start.X + (stat.End.X - stat.Start.X) * ((double)k / stat.TotalFrames));
                step.Y        = (int)(stat.Start.Y + (stat.End.Y - stat.Start.Y) * ((double)k / stat.TotalFrames));
                step.Interval = (int)(stat.Start.Interval + (stat.End.Interval - stat.Start.Interval) * ((double)k / stat.TotalFrames));
                step.Opacity  = (int)(stat.Start.Opacity + (stat.End.Opacity - stat.Start.Opacity) * ((double)k / stat.TotalFrames));
                step.Offset   = (int)(stat.Start.Offset + (stat.End.Offset - stat.Start.Offset) * ((double)k / stat.TotalFrames));
                stat.SubSteps.Add(step);
            }

            stat.RandomVariable = variableRand;
            stat.ScreenVariable = variableScreen;
            stat.TotalTime      = 0;
            stat.TotalX         = 0;
            stat.TotalY         = 0;
            foreach (var s in stat.SubSteps)
            {
                stat.TotalTime += s.Interval;
                stat.TotalX    += s.X;
                stat.TotalY    += s.Y;
            }

            return(stat);
        }