public BB_branch extend(Vector2 angleChangeRatio, float disChangePercentage) { var angleNew = angleChange.mult(angleChangeRatio); var newBranch = new BB_branch(to, angle + angleNew, angleNew, dis * disChangePercentage); children.Add(newBranch); return newBranch; }
public static BB_branch InitPropagateRandom(Vector3 from, Vector2 angleInit, float dis, Vector2 angleChange, float disChange, int generationMax, float chanceExtend = 100.0f) { //this functions is going to be a bit long < not cool int countGen = 1; var b = new BB_branch(from, angleInit, angleChange, dis); List<BB_branch> genCurrent = new List<BB_branch>(){b}; while (countGen++ < generationMax && genCurrent.Count >0) { List<BB_branch> genNext = new List<BB_branch>(); foreach (var v in genCurrent) { for (int i = -1; i <= 1; i += 2) if (Random.Range(0, 100) <= chanceExtend) { //used for testing horiozntal incurring float angleV = angleChange.y + v.angle.y; // used for testing vertical incurring var dirs = new Vector2(3.14f, 3.14f) * .5f - new Vector2(v.angle.y, angleV); dirs = dirs.divide(new Vector2(Mathf.Abs(dirs.x), Mathf.Abs(dirs.y))); int dirVert =(Random.Range(0,5) == 0)?-1:1; //if (angleV > 3.14f || angleV<0 ) continue; genNext.Add(v.extend(new Vector2(i, dirVert), disChange * Random.Range(.7f, 1.0f))); } } genCurrent = genNext; } return b; }
void helperBB_branchToGameObjectRecursively(BB_branch b, Transform parentTransform) { var obj = (GameObject)b; obj.transform.parent = parentTransform; foreach (var v in b.children) { helperBB_branchToGameObjectRecursively(v, obj.transform); } }