Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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();
        }