public override HashSet <AnimatedPoint> RenderFrame(int currentFrame) { var animatedPoints = new HashSet <AnimatedPoint>(); //accumulate all points in the current column represented by frame index List <SkiaSharp.SKPoint> framePoints = new List <SkiaSharp.SKPoint>(); for (int i = 0; i < NumFrames; i++) { var p = new SkiaSharp.SKPointI(currentFrame, i); if (SeperatedPoints.ContainsKey(p)) { framePoints.AddRange(SeperatedPoints[p]); } } foreach (var point in framePoints) { var distCanMove = shortestDistanceFromPoints(point); var xComponent = Geometry.getXComponent(_direction, distCanMove); var yComponent = Geometry.getYComponent(_direction, distCanMove); var p = new AnimatedPoint(point, (float)xComponent, (float)yComponent); animatedPoints.Add(p); } return(animatedPoints); }
public override void SetupAnimation() { base.SetupAnimation(); //visible rec so that the start of the anim is from a point visible on screen var visibleRecX = Random.Rand.Next(NumFrames); var visibleRecY = Random.Rand.Next(NumFrames); var recIndex = new SKPointI(visibleRecX, visibleRecY); //keep geting a random index until one exists while (!SeperatedPoints.ContainsKey(recIndex)) { visibleRecX = Random.Rand.Next(NumFrames); visibleRecY = Random.Rand.Next(NumFrames); recIndex = new SKPointI(visibleRecX, visibleRecY); } //index of a randoom point on the random visible rec var index = Random.Rand.Next(SeperatedPoints[recIndex].Count); //pointF version of the point var pointT = SeperatedPoints[recIndex].ToArray()[index]; //vertex version of the point var point = new Vertex(pointT.X, pointT.Y); //index of the chosen point in the overall points list var indexT = InternalPoints.IndexOf(point); //set the first point as used _pointUsed[indexT] = true; _animateList = new Queue <Vertex>(); _animateList.Enqueue(point); IsSetup = true; }
//saves internal HashSet <SKPoint> getTouchAreaRecPoints() { var touch = new HashSet <SKPoint>(); var BL = new SKPoint(TouchLocation.X - TouchRadius, TouchLocation.Y - TouchRadius); var TR = new SKPoint(TouchLocation.X + TouchRadius, TouchLocation.Y + TouchRadius); var BLindex = new SKPointI(); var TRindex = new SKPointI(); GridRotation.CellCoordsFromOriginPoint(ref BLindex, BL); GridRotation.CellCoordsFromOriginPoint(ref TRindex, TR); var upperX = TRindex.X > BLindex.X ? TRindex.X : BLindex.X; var lowerX = TRindex.X < BLindex.X ? TRindex.X : BLindex.X; var upperY = TRindex.Y > BLindex.Y ? TRindex.Y : BLindex.Y; var lowerY = TRindex.Y < BLindex.Y ? TRindex.Y : BLindex.Y; var p = new SKPointI(); for (var i = lowerX; i <= upperX; i++) { for (var j = lowerY; j <= upperY; j++) { p.X = i; p.Y = j; if (SeperatedPoints.ContainsKey(p)) { touch.UnionWith(SeperatedPoints[p]); } } } return(touch); }