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; }
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); }
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); }
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); }
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; } }
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)); } }
protected override OsbSprite CreateSprite(StoryboardLayer layer, string path, OsbOrigin origin) => layer.CreateAnimation(path, frameCount, frameDelay, loopType, origin);
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); } }
/// <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); }
public override OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin = OsbOrigin.Centre) => CreateAnimation(path, frameCount, frameDelay, loopType, origin, OsbSprite.DefaultPosition);
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);
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);
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);
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);
protected virtual OsbSprite CreateSprite(StoryboardLayer layer, string path, OsbOrigin origin) => layer.CreateSprite(path, origin);
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) { }
public SpriteSet AddSprite(String spritePath, OsbOrigin origin, Vector2 initialPosition) { sprites.Add(layer.CreateSprite(spritePath, origin, initialPosition)); return(this); }
public override OsbSprite CreateSprite(string path, OsbOrigin origin) => CreateSprite(path, origin, OsbSprite.DefaultPosition);
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); }
public abstract OsbSprite CreateSprite(string path, OsbOrigin origin = OsbOrigin.Centre);
public abstract OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin = OsbOrigin.Centre);
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) { }
public abstract OsbSprite CreateSprite(string path, OsbOrigin origin, Vector2 initialPosition);
public SpriteSet AddSprite(String spritePath, OsbOrigin origin) { sprites.Add(layer.CreateSprite(spritePath, origin)); return(this); }
public abstract OsbAnimation CreateAnimation(string path, int frameCount, double frameDelay, OsbLoopType loopType, OsbOrigin origin, Vector2 initialPosition);
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); }
private string getKey(string path, OsbOrigin origin, Action <OsbSprite, double, double> action, int poolGroup) => $"{path}#{origin}#{action?.Target}.{action?.Method.Name}#{poolGroup}";
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; }