Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        //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);
        }