////////////////

        public WormNode(int tileX, int tileY, int tileRadius, int nodeSpacing, WormGen parent)
        {
            this.TileX       = tileX;
            this.TileY       = tileY;
            this.TileRadius  = tileRadius;
            this.NodeSpacing = nodeSpacing;
            this.Parent      = parent;
        }
Exemple #2
0
        ////////////////

        public IList <WormNode> CreateInterpolatedNodesFromRecentNodes()
        {
            var nodes = new List <WormNode>();

            if (this.KeyNodes.Count < 2)
            {
                return(nodes);
            }

            WormNode prevNode = this.KeyNodes[this.KeyNodes.Count - 2];
            WormNode currNode = this.KeyNodes[this.KeyNodes.Count - 1];

            double xDist = currNode.TileX - prevNode.TileX;
            double yDist = currNode.TileY - prevNode.TileY;
            double dist  = Math.Sqrt((xDist * xDist) + (yDist * yDist));

            double incIntervals = 2d;

            if (dist < incIntervals)
            {
                nodes.Add(currNode);
                return(nodes);
            }

            for (double i = incIntervals; i < dist; i += incIntervals)
            {
                double perc  = i / dist;
                int    x     = prevNode.TileX + (int)(xDist * perc);
                int    y     = prevNode.TileY + (int)(yDist * perc);
                int    rad   = (int)WormGen.Lerp((double)prevNode.TileRadius, (double)currNode.TileRadius, (double)perc);
                int    space = (int)WormGen.Lerp((double)prevNode.NodeSpacing, (double)currNode.NodeSpacing, (double)perc);

                nodes.Add(new WormNode(x, y, rad, space, this));
            }

            nodes.Add(currNode);
            return(nodes);
        }
Exemple #3
0
        ////////////////

        public virtual bool GenerateNextKeyNode(WormSystemGen wormSystem, out WormGen fork)
        {
            if (this.KeyNodes.Count >= this.TotalNodes)
            {
                fork = null;
                return(false);
            }

            WormNode nextNode = this.CreateKeyNode(wormSystem);

            this.KeyNodes.Add(nextNode);

            if (this.Forks.TryGetValue(this.KeyNodes.Count - 1, out fork))
            {
                fork.OriginTileX = nextNode.TileX;
                fork.OriginTileY = nextNode.TileY;

                WormNode forkHeadNode = fork.CreateForkedKeyNode(wormSystem, nextNode);
                fork.KeyNodes.Add(forkHeadNode);
            }

            return(true);
        }