Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class SymetricSprite
- {
- private Vector2 centre;
- private int divisions;
- private OsbSprite[] sprites;
- public SymetricSprite(StoryboardObjectGenerator generator, string spritePath, Vector2 centre, int divisions)
- {
- this.centre = centre;
- this.divisions = divisions;
- this.sprites = new OsbSprite[divisions*2];
- for(int i = 0; i < sprites.Length; i++)
- sprites[i] = generator.GetLayer("SHAPES").CreateSprite(spritePath);
- }
- public void Move(OsbEasing easing, double startTime, double endTime, Vector2 startPosition, Vector2 endPosition)
- {
- Vector2[] symetricStartPosition = CalculateSymetry(startPosition);
- Vector2[] symetricEndPosition = CalculateSymetry(endPosition);
- for(int i = 0; i < sprites.Length; i++)
- sprites[i].Move(easing, startTime, endTime, symetricStartPosition[i], symetricEndPosition[i]);
- }
- public void Fade(OsbEasing easing, double startTime, double endTime, double startValue, double endValue)
- {
- foreach(var sprite in sprites)
- sprite.Fade(easing, startTime, endTime, startValue, endValue);
- }
- public void Scale(OsbEasing easing, double startTime, double endTime, double startValue, double endValue)
- {
- foreach(var sprite in sprites)
- sprite.Scale(easing, startTime, endTime, startValue, endValue);
- }
- public void ScaleVec(OsbEasing easing, double startTime, double endTime, double startX, double startY, double endX, double endY)
- {
- foreach(var sprite in sprites)
- sprite.ScaleVec(easing, startTime, endTime, startX, startY, endX, endY);
- }
- private Vector2 CalculateAngle(double angle, double radius)
- {
- return new Vector2(
- (float)(centre.X + Math.Cos(angle) * radius),
- (float)(centre.Y + Math.Sin(angle) * radius)
- );
- }
- private Vector2[] CalculateSymetry(Vector2 position)
- {
- Vector2[] outputPositions = new Vector2[(divisions*2)];
- double angle = Math.Atan2(position.Y - centre.Y, position.X - centre.X);
- double distance = Math.Sqrt(Math.Pow(position.X - centre.X, 2) + Math.Pow(position.Y - centre.Y, 2));
- for(int i = 0; i < outputPositions.Length; i++)
- {
- outputPositions[i] = CalculateAngle(angle, distance);
- angle += (Math.PI*2)/sprites.Length;
- }
- return outputPositions;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement