Beispiel #1
0
 public OsbSpritePool(StoryboardLayer layer, string path, OsbOrigin origin, Action <OsbSprite, double, double> finalizeSprite = null)
 {
     this.layer          = layer;
     this.path           = path;
     this.origin         = origin;
     this.finalizeSprite = finalizeSprite;
 }
Beispiel #2
0
            public bool IsVisible(int width, int height, OsbOrigin origin, Box2 bounds)
            {
                if (Opacity <= 0)
                {
                    return(false);
                }

                if (Scale.X == 0 || Scale.Y == 0)
                {
                    return(false);
                }

                if (Additive && Color.R == 0 && Color.G == 0 && Color.B == 0)
                {
                    return(false);
                }

                if (!bounds.Contains(Position))
                {
                    var     w = width * Scale.X;
                    var     h = height * Scale.Y;
                    Vector2 originVector;
                    switch (origin)
                    {
                    default:
                    case OsbOrigin.TopLeft: originVector = Vector2.Zero; break;

                    case OsbOrigin.TopCentre: originVector = new Vector2(w * 0.5f, 0); break;

                    case OsbOrigin.TopRight: originVector = new Vector2(w, 0); break;

                    case OsbOrigin.CentreLeft: originVector = new Vector2(0, h * 0.5f); break;

                    case OsbOrigin.Centre: originVector = new Vector2(w * 0.5f, h * 0.5f); break;

                    case OsbOrigin.CentreRight: originVector = new Vector2(w, h * 0.5f); break;

                    case OsbOrigin.BottomLeft: originVector = new Vector2(0, h); break;

                    case OsbOrigin.BottomCentre: originVector = new Vector2(w * 0.5f, h); break;

                    case OsbOrigin.BottomRight: originVector = new Vector2(w, h); break;
                    }
                    var obb = new OrientedBoundingBox(Position, originVector, w, h, Rotation);
                    if (!obb.Intersects(bounds))
                    {
                        return(false);
                    }
                }

                return(true);
            }
Beispiel #3
0
        public override OsbSprite CreateSprite(string path, OsbOrigin origin, Vector2 initialPosition)
        {
            var storyboardObject = new EditorOsbSprite()
            {
                TexturePath     = path,
                Origin          = origin,
                InitialPosition = initialPosition,
            };

            storyboardObjects.Add(storyboardObject);
            displayableObjects.Add(storyboardObject);
            return(storyboardObject);
        }
Beispiel #4
0
        private OsbSpritePool getPool(string path, OsbOrigin origin, Action <OsbSprite, double, double> finalizeSprite, int poolGroup)
        {
            var key = getKey(path, origin, finalizeSprite, poolGroup);

            if (!pools.TryGetValue(key, out OsbSpritePool pool))
            {
                pools.Add(key, pool = new OsbSpritePool(layer, path, origin, finalizeSprite)
                {
                    MaxPoolDuration = maxPoolDuration,
                });
            }

            return(pool);
        }
Beispiel #5
0
        public void GenerateSongName(FontGenerator font, bool additive, int Start, int End, string Sentence)
        {
            double    Beat       = Beatmap.GetTimingPointAt(Start).BeatDuration;
            float     letterX    = 320;
            var       letterY    = 220;
            var       lineWidth  = 0f;
            var       lineHeight = 0f;
            float     FontScale  = 0.5f;
            int       Delay      = 60;
            OsbOrigin Origin     = OsbOrigin.Centre;

            foreach (var letter in Sentence)
            {
                var texture = font.GetTexture(letter.ToString());
                lineWidth += texture.BaseWidth * FontScale;
                lineHeight = Math.Max(lineHeight, texture.BaseHeight * FontScale);
            }
            var letterCenter = letterX;

            letterX = letterX - lineWidth * 0.5f;

            foreach (var letter in Sentence)
            {
                var texture = font.GetTexture(letter.ToString());
                if (!texture.IsEmpty)
                {
                    var position = new Vector2(letterX, letterY)
                                   + texture.OffsetFor(Origin) * FontScale;

                    var sprite = GetLayer("Sentence").CreateSprite(texture.Path, Origin, position);

                    sprite.Scale(OsbEasing.OutBack, Start + Delay, Start + Delay + 300, 0, FontScale);
                    sprite.Fade(Start + Delay, Start + Delay + 300, 0, 1);
                    sprite.Fade(End, End + 300, 1, 0);

                    Delay += 60;
                }
                letterX += texture.BaseWidth * FontScale;
            }
        }
Beispiel #6
0
        public static Vector2 GetOriginVector(OsbOrigin origin, float width, float height)
        {
            switch (origin)
            {
            case OsbOrigin.TopLeft: return(Vector2.Zero);

            case OsbOrigin.TopCentre: return(new Vector2(width * 0.5f, 0));

            case OsbOrigin.TopRight: return(new Vector2(width, 0));

            case OsbOrigin.CentreLeft: return(new Vector2(0, height * 0.5f));

            case OsbOrigin.Centre: return(new Vector2(width * 0.5f, height * 0.5f));

            case OsbOrigin.CentreRight: return(new Vector2(width, height * 0.5f));

            case OsbOrigin.BottomLeft: return(new Vector2(0, height));

            case OsbOrigin.BottomCentre: return(new Vector2(width * 0.5f, height));

            case OsbOrigin.BottomRight: return(new Vector2(width, height));
            }
            throw new NotSupportedException(origin.ToString());
        }
        public Vector2 OffsetFor(OsbOrigin origin)
        {
            switch (origin)
            {
            default:
            case OsbOrigin.TopLeft: return(new Vector2(offsetX, offsetY));

            case OsbOrigin.TopCentre: return(new Vector2(offsetX + width * 0.5f, offsetY));

            case OsbOrigin.TopRight: return(new Vector2(offsetX + width, offsetY));

            case OsbOrigin.CentreLeft: return(new Vector2(offsetX, offsetY + height * 0.5f));

            case OsbOrigin.Centre: return(new Vector2(offsetX + width * 0.5f, offsetY + height * 0.5f));

            case OsbOrigin.CentreRight: return(new Vector2(offsetX + width, offsetY + height * 0.5f));

            case OsbOrigin.BottomLeft: return(new Vector2(offsetX, offsetY + height));

            case OsbOrigin.BottomCentre: return(new Vector2(offsetX + width * 0.5f, offsetY + height));

            case OsbOrigin.BottomRight: return(new Vector2(offsetX + width, offsetY + height));
            }
        }
Beispiel #8
0
 protected override OsbSprite CreateSprite(StoryboardLayer layer, string path, OsbOrigin origin)
 => layer.CreateAnimation(path, frameCount, frameDelay, loopType, origin);
Beispiel #9
0
 private string getKey(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Action <OsbSprite, double, double> action, int poolGroup)
 => $"{path}#{frameCount}#{frameDelay}#{loopType}#{origin}#{action?.Target}.{action?.Method.Name}#{poolGroup}";
        private void slideShow(StoryboardLayer layer, string path, double startTime, double endTime, OsbOrigin origin, double moveBy, bool fadeIn, bool fadeOut)
        {
            Vector2 pos = new Vector2();

            if (origin == OsbOrigin.CentreLeft) // Check if i want to slide to left
            {
                pos = new Vector2(-107, 240);
            }
            else if (origin == OsbOrigin.CentreRight) // Check if i want to slide to right
            {
                pos = new Vector2(747, 240);
            }

            var sprite = layer.CreateSprite(path, origin, pos);

            sprite.Scale(startTime, Constants.screenScale);
            sprite.MoveX(startTime, endTime, sprite.PositionAt(startTime).X, sprite.PositionAt(startTime).X + moveBy * Constants.screenScale);

            if (fadeIn) // Check if i want to have a slow fade or instant
            {
                sprite.Fade(easing, startTime - Constants.beatLength * fadeby, startTime, 0, 1);
            }
            else if (!fadeIn)
            {
                sprite.Fade(startTime, 1);
            }

            if (fadeOut) // Check if i want to have a slow fadeout or instant
            {
                sprite.Fade(endTime - Constants.beatLength * 3, endTime, 1, 0);
            }
            else if (!fadeOut)
            {
                sprite.Fade(endTime, 0);
            }
        }
Beispiel #11
0
 /// <summary>
 /// TODO: Given the TopLeft coordinate and the OsbOrigin, find the proper Vector2 for a sprite.
 /// </summary>
 public static Vector2 FindPointToOrigin(Vector2 old, OsbOrigin origin)
 {
     return(old);
 }
Beispiel #12
0
 public override OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin = OsbOrigin.Centre)
 => CreateAnimation(path, frameCount, frameDelay, loopType, origin, OsbSprite.DefaultPosition);
Beispiel #13
0
 public OsbAnimation Get(double startTime, double endTime, string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, bool additive, int poolGroup = 0)
 => Get(startTime, endTime, path, frameCount, frameDelay, loopType, origin, additive ? (sprite, spriteStartTime, spriteEndTime) => sprite.Additive(spriteStartTime, spriteEndTime) : (Action <OsbSprite, double, double>)null, poolGroup);
Beispiel #14
0
 public OsbAnimation Get(double startTime, double endTime, string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin = OsbOrigin.Centre, Action <OsbSprite, double, double> finalizeSprite = null, int poolGroup = 0)
 => (OsbAnimation)getPool(path, frameCount, frameDelay, loopType, origin, finalizeSprite, poolGroup).Get(startTime, endTime);
Beispiel #15
0
 public OsbSprite Get(double startTime, double endTime, string path, OsbOrigin origin, bool additive, int poolGroup = 0)
 => Get(startTime, endTime, path, origin, additive ? (sprite, spriteStartTime, spriteEndTime) => sprite.Additive(spriteStartTime, spriteEndTime) : (Action <OsbSprite, double, double>)null, poolGroup);
Beispiel #16
0
 public OsbSprite Get(double startTime, double endTime, string path, OsbOrigin origin = OsbOrigin.Centre, Action <OsbSprite, double, double> finalizeSprite = null, int poolGroup = 0)
 => getPool(path, origin, finalizeSprite, poolGroup).Get(startTime, endTime);
Beispiel #17
0
 protected virtual OsbSprite CreateSprite(StoryboardLayer layer, string path, OsbOrigin origin)
 => layer.CreateSprite(path, origin);
Beispiel #18
0
 public OsbSpritePool(StoryboardLayer layer, string path, OsbOrigin origin, bool additive)
     : this(layer, path, origin, additive ? (sprite, startTime, endTime) => sprite.Additive(startTime, endTime) : (Action <OsbSprite, double, double>)null)
 {
 }
Beispiel #19
0
 public SpriteSet AddSprite(String spritePath, OsbOrigin origin, Vector2 initialPosition)
 {
     sprites.Add(layer.CreateSprite(spritePath, origin, initialPosition));
     return(this);
 }
Beispiel #20
0
 public override OsbSprite CreateSprite(string path, OsbOrigin origin)
 => CreateSprite(path, origin, OsbSprite.DefaultPosition);
Beispiel #21
0
        public override OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Vector2 initialPosition)
        {
            var storyboardObject = new EditorOsbAnimation()
            {
                TexturePath     = path,
                Origin          = origin,
                FrameCount      = frameCount,
                FrameDelay      = frameDelay,
                LoopType        = loopType,
                InitialPosition = initialPosition,
            };

            storyboardObjects.Add(storyboardObject);
            displayableObjects.Add(storyboardObject);
            return(storyboardObject);
        }
Beispiel #22
0
 public abstract OsbSprite CreateSprite(string path, OsbOrigin origin = OsbOrigin.Centre);
Beispiel #23
0
 public abstract OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin = OsbOrigin.Centre);
Beispiel #24
0
 public OsbAnimationPool(StoryboardLayer layer, string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, bool additive)
     : this(layer, path, frameCount, frameDelay, loopType, origin, additive ? (sprite, startTime, endTime) => sprite.Additive(startTime, endTime) : (Action <OsbSprite, double, double>)null)
 {
 }
Beispiel #25
0
 public abstract OsbSprite CreateSprite(string path, OsbOrigin origin, Vector2 initialPosition);
Beispiel #26
0
 public SpriteSet AddSprite(String spritePath, OsbOrigin origin)
 {
     sprites.Add(layer.CreateSprite(spritePath, origin));
     return(this);
 }
Beispiel #27
0
 public abstract OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Vector2 initialPosition);
Beispiel #28
0
        private OsbAnimationPool getPool(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Action <OsbSprite, double, double> finalizeSprite, int poolGroup)
        {
            var key = getKey(path, frameCount, frameDelay, loopType, origin, finalizeSprite, poolGroup);

            if (!animationPools.TryGetValue(key, out OsbAnimationPool pool))
            {
                animationPools.Add(key, pool = new OsbAnimationPool(layer, path, frameCount, frameDelay, loopType, origin, finalizeSprite)
                {
                    MaxPoolDuration = maxPoolDuration,
                });
            }

            return(pool);
        }
Beispiel #29
0
 private string getKey(string path, OsbOrigin origin, Action <OsbSprite, double, double> action, int poolGroup)
 => $"{path}#{origin}#{action?.Target}.{action?.Method.Name}#{poolGroup}";
Beispiel #30
0
 public OsbAnimationPool(StoryboardLayer layer, string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Action <OsbSprite, double, double> finalizeSprite = null)
     : base(layer, path, origin, finalizeSprite)
 {
     this.frameCount = frameCount;
     this.frameDelay = frameDelay;
     this.loopType   = loopType;
 }