Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.44 KB | None | 0 0
  1. public class SymetricSprite
  2. {
  3.     private Vector2 centre;
  4.     private int divisions;
  5.     private OsbSprite[] sprites;
  6.     public SymetricSprite(StoryboardObjectGenerator generator, string spritePath, Vector2 centre, int divisions)
  7.     {
  8.         this.centre = centre;
  9.         this.divisions = divisions;
  10.         this.sprites = new OsbSprite[divisions*2];
  11.  
  12.         for(int i = 0; i < sprites.Length; i++)
  13.             sprites[i] = generator.GetLayer("SHAPES").CreateSprite(spritePath);
  14.     }
  15.     public void Move(OsbEasing easing, double startTime, double endTime, Vector2 startPosition, Vector2 endPosition)
  16.     {
  17.         Vector2[] symetricStartPosition = CalculateSymetry(startPosition);
  18.         Vector2[] symetricEndPosition = CalculateSymetry(endPosition);
  19.  
  20.         for(int i = 0; i < sprites.Length; i++)
  21.             sprites[i].Move(easing, startTime, endTime, symetricStartPosition[i], symetricEndPosition[i]);      
  22.     }
  23.     public void Fade(OsbEasing easing, double startTime, double endTime, double startValue, double endValue)
  24.     {
  25.         foreach(var sprite in sprites)
  26.             sprite.Fade(easing, startTime, endTime, startValue, endValue);
  27.     }
  28.     public void Scale(OsbEasing easing, double startTime, double endTime, double startValue, double endValue)
  29.     {
  30.         foreach(var sprite in sprites)
  31.             sprite.Scale(easing, startTime, endTime, startValue, endValue);
  32.     }
  33.     public void ScaleVec(OsbEasing easing, double startTime, double endTime, double startX, double startY, double endX, double endY)
  34.     {
  35.         foreach(var sprite in sprites)
  36.             sprite.ScaleVec(easing, startTime, endTime, startX, startY, endX, endY);
  37.     }
  38.     private Vector2 CalculateAngle(double angle, double radius)
  39.     {
  40.         return new Vector2(
  41.             (float)(centre.X + Math.Cos(angle) * radius),
  42.             (float)(centre.Y + Math.Sin(angle) * radius)
  43.         );
  44.     }
  45.     private Vector2[] CalculateSymetry(Vector2 position)
  46.     {
  47.         Vector2[] outputPositions = new Vector2[(divisions*2)];
  48.         double angle = Math.Atan2(position.Y - centre.Y, position.X - centre.X);
  49.         double distance = Math.Sqrt(Math.Pow(position.X - centre.X, 2) + Math.Pow(position.Y - centre.Y, 2));
  50.         for(int i = 0; i < outputPositions.Length; i++)
  51.         {
  52.             outputPositions[i] = CalculateAngle(angle, distance);
  53.             angle += (Math.PI*2)/sprites.Length;
  54.         }
  55.         return outputPositions;
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement