Esempio n. 1
0
        private void convertToCommands(OsbSprite sprite, double?startTime, double?endTime, double timeOffset, bool loopable)
        {
            var startStateTime = loopable ? (startTime ?? StartState.Time) + timeOffset : (double?)null;
            var endStateTime   = loopable ? (endTime ?? EndState.Time) + timeOffset : (double?)null;

            finalPositions.ForEachPair((start, end) => sprite.Move(start.Time, end.Time, start.Value, end.Value), new Vector2(320, 240),
                                       p => new Vector2((float)Math.Round(p.X, PositionDecimals), (float)Math.Round(p.Y, PositionDecimals)), startStateTime, loopable: loopable);
            var useVectorScaling = finalScales.Any(k => k.Value.X != k.Value.Y);

            finalScales.ForEachPair((start, end) =>
            {
                if (useVectorScaling)
                {
                    sprite.ScaleVec(start.Time, end.Time, start.Value, end.Value);
                }
                else
                {
                    sprite.Scale(start.Time, end.Time, start.Value.X, end.Value.X);
                }
            }, Vector2.One, s => new Vector2((float)Math.Round(s.X, ScaleDecimals), (float)Math.Round(s.Y, ScaleDecimals)), startStateTime, loopable: loopable);
            finalRotations.ForEachPair((start, end) => sprite.Rotate(start.Time, end.Time, start.Value, end.Value), 0,
                                       r => (float)Math.Round(r, RotationDecimals), startStateTime, loopable: loopable);
            finalColors.ForEachPair((start, end) => sprite.Color(start.Time, end.Time, start.Value, end.Value), CommandColor.White,
                                    c => CommandColor.FromRgb(c.R, c.G, c.B), startStateTime, loopable: loopable);
            finalOpacities.ForEachPair((start, end) => sprite.Fade(start.Time, end.Time, start.Value, end.Value), -1,
                                       o => (float)Math.Round(o, OpacityDecimals), startStateTime, endStateTime, loopable: loopable);

            flipH.ForEachFlag((fromTime, toTime) => sprite.FlipH(fromTime, toTime));
            flipV.ForEachFlag((fromTime, toTime) => sprite.FlipV(fromTime, toTime));
            additive.ForEachFlag((fromTime, toTime) => sprite.Additive(fromTime, toTime));
        }
Esempio n. 2
0
 public static void Additive(this OsbSprite sprite)
 => sprite.Additive(sprite.CommandsStartTime, sprite.CommandsEndTime);
Esempio n. 3
0
        private void parseEventsSection(StreamReader reader)
        {
            OsbSprite osbSprite      = null;
            var       inCommandGroup = false;

            reader.ParseSectionLines(line =>
            {
                if (line.StartsWith("//"))
                {
                    return;
                }

                var depth = 0;
                while (line.Substring(depth).StartsWith(" "))
                {
                    ++depth;
                }

                var trimmedLine = applyVariables(line.Trim());
                var values      = trimmedLine.Split(',');

                if (inCommandGroup && depth < 2)
                {
                    osbSprite.EndGroup();
                    inCommandGroup = false;
                }

                switch (values[0])
                {
                case "Sprite":
                    {
                        var layerName = values[1];
                        var origin    = (OsbOrigin)Enum.Parse(typeof(OsbOrigin), values[2]);
                        var path      = removePathQuotes(values[3]);
                        var x         = float.Parse(values[4], CultureInfo.InvariantCulture);
                        var y         = float.Parse(values[5], CultureInfo.InvariantCulture);
                        osbSprite     = GetLayer(layerName).CreateSprite(path, origin, new Vector2(x, y));
                    }
                    break;

                case "Animation":
                    {
                        var layerName  = values[1];
                        var origin     = (OsbOrigin)Enum.Parse(typeof(OsbOrigin), values[2]);
                        var path       = removePathQuotes(values[3]);
                        var x          = float.Parse(values[4], CultureInfo.InvariantCulture);
                        var y          = float.Parse(values[5], CultureInfo.InvariantCulture);
                        var frameCount = int.Parse(values[6]);
                        var frameDelay = double.Parse(values[7], CultureInfo.InvariantCulture);
                        var loopType   = (OsbLoopType)Enum.Parse(typeof(OsbLoopType), values[8]);
                        osbSprite      = GetLayer(layerName).CreateAnimation(path, frameCount, frameDelay, loopType, origin, new Vector2(x, y));
                    }
                    break;

                case "Sample":
                    {
                        var time      = double.Parse(values[1], CultureInfo.InvariantCulture);
                        var layerName = values[2];
                        var path      = removePathQuotes(values[3]);
                        var volume    = float.Parse(values[4], CultureInfo.InvariantCulture);
                        GetLayer(layerName).CreateSample(path, time, volume);
                    }
                    break;

                case "T":
                    {
                        var triggerName = values[1];
                        var startTime   = double.Parse(values[2], CultureInfo.InvariantCulture);
                        var endTime     = double.Parse(values[3], CultureInfo.InvariantCulture);
                        var groupNumber = values.Length > 4 ? int.Parse(values[4]) : 0;
                        osbSprite.StartTriggerGroup(triggerName, startTime, endTime, groupNumber);
                        inCommandGroup = true;
                    }
                    break;

                case "L":
                    {
                        var startTime = double.Parse(values[1], CultureInfo.InvariantCulture);
                        var loopCount = int.Parse(values[2]);
                        osbSprite.StartLoopGroup(startTime, loopCount);
                        inCommandGroup = true;
                    }
                    break;

                default:
                    {
                        if (string.IsNullOrEmpty(values[3]))
                        {
                            values[3] = values[2];
                        }

                        var commandType = values[0];
                        var easing      = (OsbEasing)int.Parse(values[1]);
                        var startTime   = double.Parse(values[2], CultureInfo.InvariantCulture);
                        var endTime     = double.Parse(values[3], CultureInfo.InvariantCulture);

                        switch (commandType)
                        {
                        case "F":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Fade(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "S":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Scale(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "V":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY;
                                osbSprite.ScaleVec(easing, startTime, endTime, startX, startY, endX, endY);
                            }
                            break;

                        case "R":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.Rotate(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "M":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY;
                                osbSprite.Move(easing, startTime, endTime, startX, startY, endX, endY);
                            }
                            break;

                        case "MX":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.MoveX(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "MY":
                            {
                                var startValue = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var endValue   = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue;
                                osbSprite.MoveY(easing, startTime, endTime, startValue, endValue);
                            }
                            break;

                        case "C":
                            {
                                var startX = double.Parse(values[4], CultureInfo.InvariantCulture);
                                var startY = double.Parse(values[5], CultureInfo.InvariantCulture);
                                var startZ = double.Parse(values[6], CultureInfo.InvariantCulture);
                                var endX   = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startX;
                                var endY   = values.Length > 8 ? double.Parse(values[8], CultureInfo.InvariantCulture) : startY;
                                var endZ   = values.Length > 9 ? double.Parse(values[9], CultureInfo.InvariantCulture) : startZ;
                                osbSprite.Color(easing, startTime, endTime, startX / 255f, startY / 255f, startZ / 255f, endX / 255f, endY / 255f, endZ / 255f);
                            }
                            break;

                        case "P":
                            {
                                var type = values[4];
                                switch (type)
                                {
                                case "A": osbSprite.Additive(startTime, endTime); break;

                                case "H": osbSprite.FlipH(startTime, endTime); break;

                                case "V": osbSprite.FlipV(startTime, endTime); break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                }
            }, false);

            if (inCommandGroup)
            {
                osbSprite.EndGroup();
                inCommandGroup = false;
            }
        }