private void DecreaseBranchDiameter(PersistentPlantGeometryStorage geometryStorage) { Vector3 currentDirection = GetDirection(); var lastPosition = _currentPosition; _currentPosition += (ForwardStep * (_forwardStepMultiplication - 1)) * currentDirection; _renderSystem.DrawCylinder(lastPosition, _currentPosition, _currentBranchDiameter); geometryStorage.ExtendBranch(lastPosition, _currentPosition, _currentBranchDiameter); _lastMovementDirection = currentDirection; _forwardStepMultiplication = 1; double randomNumber = _randomGenerator.Next((int)(BranchReductionRate.Min * 100), (int)(BranchReductionRate.Max * 100)); _currentBranchDiameter *= (float)(randomNumber / 100); geometryStorage.StartNewBranch(_currentBranchDiameter); }
private void MoveForward(PersistentPlantGeometryStorage geometryStorage) { Vector3 currentDirection = GetDirection(); if (currentDirection == _lastMovementDirection) { ++_forwardStepMultiplication; return; } var lastPosition = _currentPosition; _currentPosition += (ForwardStep * _forwardStepMultiplication) * currentDirection; _renderSystem.DrawCylinder(lastPosition, _currentPosition, _currentBranchDiameter); geometryStorage.ExtendBranch(lastPosition, _currentPosition, _currentBranchDiameter); _lastMovementDirection = currentDirection; _forwardStepMultiplication = 1; }
private void PopTransformation(PersistentPlantGeometryStorage geometryStorage) { if (_forwardStepMultiplication > 1) { Vector3 currentDirection = GetDirection(); var lastPosition = _currentPosition; _currentPosition += (ForwardStep * _forwardStepMultiplication) * currentDirection; _renderSystem.DrawCylinder(lastPosition, _currentPosition, _currentBranchDiameter); geometryStorage.ExtendBranch(lastPosition, _currentPosition, _currentBranchDiameter); _lastMovementDirection = currentDirection; _forwardStepMultiplication = 1; } _currentPosition = _positionStack.Pop(); _currentRotation = _rotationStack.Pop(); _currentBranchDiameter = _branchDiameterStack.Pop(); _currentColor = _colorStack.Pop(); geometryStorage.Pop(); }