public nView RemoveBranch(bTreeBranch branch)
 {
     nLog.Debug("Before remove was: " + _session.Game.Paused);
       if (branch.Parent != null) {
     branch.Parent.Trim(branch);
     branch.Tree.Segments = branch.Tree.Trunk.TotalSegments;
     branch.Tree.Branches = branch.Tree.Trunk.TotalBranches;
     nLog.Debug("New tree size is {0}, {1}", branch.Tree.Segments, branch.Tree.Branches);
       }
       nLog.Debug("After remove was: " + _session.Game.Paused);
       return View();
 }
Exemplo n.º 2
0
 public bTree()
 {
     EditMode = false;
       Config = null;
       Trunk = new bTreeBranch() {
     Parent = null,
     Angle = 0f,
     Length = 0.1f,
     Offset = 0f,
     Width = 0.01f,
     Diminish = 0.9f,
     Trunk = true,
     IsSegment = false,
     Tree = this
       };
 }
Exemplo n.º 3
0
 /** Trim a child branch */
 public void Trim(bTreeBranch branch)
 {
     if (NextSegment == branch)
     NextSegment = null;
       else
     Branches.Remove(branch);
       branch.Die();
 }
Exemplo n.º 4
0
 /** Update the size of a branch */
 public void UpdateBranchSize(bTreeBranch b, float hours)
 {
     if (b.Age < MaxSegmentGrowAge) {
     b.Length += BranchGrowLengthPerHour * hours;
     b.Width += BranchGrowWidthPerHour * hours;
     if (b.Length > MaxBranchSize)
       b.Length = MaxBranchSize;
     if (b.Parent == null) {
       if (b.Width > MaxTrunkSize)
     b.Width = MaxTrunkSize;
     }
     else {
       if (b.Width > MaxBranchWidth)
     b.Width = MaxBranchWidth;
     }
     if (b.Parent != null) {
       if (b.Width > b.Parent.WidthAtPoint(b.Offset))
     b.Width = b.Parent.WidthAtPoint(b.Offset);
     }
       }
 }
Exemplo n.º 5
0
        /** Maybe add a leaf if this is a tip segment */
        public void MaybeAddLeaf(bTreeBranch b, float hours)
        {
            if (b.Trunk) return; // Never trunk
              //if (b.Length < (MaxBranchSize / 2.0f)) return; // Only on older branches

              if (b.Tree.Leaves < TotalMaxLeaves) {
            if ((b.Length > 0.5f) && (b.Leaves.Count < 5)) {
              if (b.Age < MaxSegmentGrowAge) {
            var chance = LeafChancePerHour * hours;
            if (b.NextSegment == null)
              chance = chance * 2.0f;
            if (RValue(chance)) {
              var texture = GetTextureForTreeType(TreeType);
              var new_leaf = new bLeaf() {
                Tree = b.Tree,
                Parent = b,
                Angle = RValue(0f, 180f),
                Offset = RValue(0f, b.Length, 0f),
                Size = 0.001f,
                MaxSize = RValue(MaxLeafSize, MaxLeafSizeVariation),
                Texture = texture
              };
              b.Leaves.Add(new_leaf);
              ++b.Tree.Leaves;
              nLog.Debug("Added a leaf at offset {2}! New is {0} < {1}", b.Tree.Leaves, TotalMaxLeaves, new_leaf.Offset);
            }
              }
            }
              }
        }
Exemplo n.º 6
0
 /** Add a new segment to the branch, if required */
 public void MaybeAddBranchSegment(bTreeBranch b, float hours)
 {
     if (b.Age < MaxSegmentGrowAge) {
     if (b.NextSegment == null) {
       var length = b.SegmentChainSize;
       if ((length < MaxSegmentChain) && (b.Tree.Segments < TotalMaxSegments)) {
     if (RValue(BranchSplitSegmentChancePerHour * hours)) {
       var new_segment = new bTreeBranch() {
         Length = 0.1f,
         Width = 0.1f,
         Offset = 0f,
         Parent = b,
         IsSegment = true,
         Angle = RValue(0f, BranchSplitSegmentAngleVariation),
         Diminish = RValue(BranchTaperFactor, 0f, BranchTaperVariation),
         Trunk = b.Trunk,
         Tree = b.Tree
       };
       b.NextSegment = new_segment;
       ++b.Tree.Segments;
       nLog.Debug("added a new segment");
     }
       }
     }
       }
 }
Exemplo n.º 7
0
 /** Add a new segment to the branch, if required */
 public void MaybeAddBranch(bTreeBranch b, float hours)
 {
     if (b.Age < MaxSegmentGrowAge) {
     if ((b.Branches.Count < MaxBranchCount) && (b.Tree.Branches < TotalMaxBranches)) {
       var chance = BranchSplitChancePerHour;
       if ((b.Tree.Age > 20f) && (b.Tree.Branches < 10)) {
     chance += BoostBranchChange;
     if (chance > 1.0f)
       chance = 1.0f;
       }
       if (RValue(chance * hours)) {
     var new_branch = new bTreeBranch() {
       Length = 0.1f,
       Width = 0.1f,
       Offset = RValue(b.Length * 0.5f, b.Length * 0.2f),
       Parent = b,
       IsSegment = false,
       Diminish = RValue(BranchTaperFactor, BranchTaperVariation),
       Tree = b.Tree,
       Trunk = false
     };
     if (RValue(0.5f))
       new_branch.Angle = -RValue(BranchSplitAngleDownMin, 0f, BranchSplitAngleDownMax);
     else
       new_branch.Angle = RValue(BranchSplitAngleUpMin, BranchSplitAngleUpMax, 0f);
     b.Branches.Add(new_branch);
     ++b.Tree.Branches;
     nLog.Debug("added a new branch with angle: {0}", new_branch.Angle);
       }
     }
       }
 }