Exemplo n.º 1
0
        public void Pulsate(OsbSprite sprite, bool isRing = false)
        {
            var beatDuration = Beatmap.GetTimingPointAt(StartTime).BeatDuration;
            var iterations   = (int)(Math.Ceiling((EndTime - StartTime) / beatDuration * 2));
            var baseScale    = StartScale * PulseScale * (isRing ? RingMultiplier : 1);

            sprite.Fade(StartTime, StartTime + 100, 0, 1);
            sprite.Fade(EndTime - 100, EndTime, 1, 0);
            sprite.StartLoopGroup(StartTime, iterations);
            sprite.Scale(Easing, 0, beatDuration, baseScale * UpbeatMultiplier, StartScale);
            sprite.Scale(Easing, beatDuration, beatDuration * 2, baseScale, StartScale);
            sprite.EndGroup();
        }
Exemplo n.º 2
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;
            }
        }
Exemplo n.º 3
0
        public override void Generate()
        {
            var layer = GetLayer("");

            using (var pool = new OsbSpritePool(layer, "sb/sprites/toDown.png", OsbOrigin.Centre, (sprite, startTime, endTime) => {
                // This action runs for every sprite created from the pool, after all of them are created (AFTER the for loop below).

                // It is intended to set states common to every sprite:
                // In this exemple, this handles cases where all sprites will have the same color / opacity / scale / rotation / additive mode.

                // Note that the pool is in a using block, this is necessary to run this action.

                // Initial setup.
                sprite.Scale(27551, 0);
            }))

            {
                var timeStep = particleDuration / particleAmount;
                for (double startTime = 27551; startTime < 49369 - particleDuration; startTime += timeStep)
                {
                    var endTime = startTime + particleDuration;

                    // This is where sprites are created from the pool.
                    // Commands here are specific to each sprite.
                    var sprite = pool.Get(startTime, endTime);
                    var x      = Random(0, 640);
                    var y      = Random(0, 480);
                    while (x > 140 && x < 500 && y > 60 && y < 420)
                    {
                        x = Random(0, 640);
                        y = Random(0, 480);
                    }

                    var arrowCount = Random(3, 6);

                    List <OsbSprite> arrowList = new List <OsbSprite>();

                    while (arrowCount >= 0)
                    {
                        arrowList.Add(layer.CreateSprite("sb/sprites/toDown.png", OsbOrigin.Centre));
                        arrowCount--;
                    }

                    var loopAmount = Random(2, 5);

                    for (int i = 0; i < arrowList.Count; i++)
                    {
                        OsbSprite arrow = arrowList[i];


                        arrow.Scale(startTime, 0.2);

                        arrow.StartLoopGroup(0, loopAmount);

                        arrow.Fade(OsbEasing.InOutExpo, startTime, startTime + 300 + 2 * i, 0, 1);
                        arrow.Move(OsbEasing.InOutExpo, startTime, startTime + 300 + 2 * i, x, y, x, y + 10 + i * 15);

                        arrow.Fade(OsbEasing.InExpo, startTime + 300 + 2 * i, startTime + 600 + 2 * i, 1, 0);
                        arrow.Move(OsbEasing.InExpo, startTime + 300 + 2 * i, startTime + 600 + 2 * i, x, y + 10 + i * 15, x, y + 20 + i * 26);
                        arrow.EndGroup();
                    }
                }
            }
        }