//////////////// 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; }
//////////////// 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); }
//////////////// 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); }