Esempio n. 1
0
    public void mutateTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        int offset = (formConfig.getTrunkIterations() * formConfig.getStackIterations() / 2) * -1;

        Vector3 branchStartPosition = formConfig.getStartPosition();

        branchStartPosition.y = branchStartPosition.y + 10;

        Vector3 branchStartTwist  = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        foreach (Branch branch in branches)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(offset,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          branchStartOrigin,
                          formBounds);

            offset += formConfig.getStackIterations();
        }
    }
Esempio n. 2
0
    public void createTrunk(List<Branch> branches, 
	                 FormBounds formBounds, 
	                 IFormConfiguration formConfig, 
	                 ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++) {

            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch (0,
                                        formConfig,
                                        colourConfig,
                                        branchStartPosition,
                                        branchStartTwist,
                                        branchStartOrigin,
                                        formBounds); //magic 0 no offset
            branches.Add(branch);

            //set origin to previous start position
            branchStartOrigin = branchStartPosition;

            branchStartTwist = GeometryUtility.addDeltaToRotation(branchStartTwist,
                                                                  formConfig.getTrunkRotationDelta());
            branchStartPosition = GeometryUtility.addDeltaToPosition(branchStartPosition,
                                                                     formConfig.getTrunkPositionDelta(), 1);
        }
    }
Esempio n. 3
0
    public void createTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist  = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch(i,
                                       formConfig,
                                       colourConfig,
                                       branchStartPosition,
                                       branchStartTwist,
                                       branchStartOrigin,
                                       formBounds);
            branches.Add(branch);

            branchStartPosition.x += formConfig.getTrunkPositionDelta().x;
            branchStartPosition.y += formConfig.getTrunkPositionDelta().y;
            branchStartPosition.z += formConfig.getTrunkPositionDelta().z;

            branchStartTwist.x += formConfig.getTrunkRotationDelta().x;
            branchStartTwist.y += formConfig.getTrunkRotationDelta().y;
            branchStartTwist.z += formConfig.getTrunkRotationDelta().z;
        }
    }
Esempio n. 4
0
    public void createTrunk(List<Branch> branches, 
	                 FormBounds formBounds, 
	                 IFormConfiguration formConfig, 
	                 ColourConfiguration colourConfig)
    {
        int offset = (formConfig.getTrunkIterations() * formConfig.getStackIterations() / 2) * -1;

        Vector3 branchStartPosition = formConfig.getStartPosition();
        branchStartPosition.y = branchStartPosition.y + 10;

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++) {

            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch (offset,
                                        formConfig,
                                        colourConfig,
                                        branchStartPosition,
                                        branchStartTwist,
                                        branchStartOrigin,
                                        formBounds);
            branches.Add(branch);

            offset += formConfig.getStackIterations();
        }
    }
Esempio n. 5
0
    public void mutateTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist  = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        int i = 0;

        foreach (Branch branch in branches)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(i,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          branchStartOrigin,
                          formBounds);

            branchStartPosition.x += formConfig.getTrunkPositionDelta().x;
            branchStartPosition.y += formConfig.getTrunkPositionDelta().y;
            branchStartPosition.z += formConfig.getTrunkPositionDelta().z;

            branchStartTwist.x += formConfig.getTrunkRotationDelta().x;
            branchStartTwist.y += formConfig.getTrunkRotationDelta().y;
            branchStartTwist.z += formConfig.getTrunkRotationDelta().z;
            i++;
        }
    }
Esempio n. 6
0
    private void UpdateColliderBox(Player.Form form)
    {
        FormBounds fb = GetFormBounds(form);

        collider.offset = fb.Offset;
        collider.size   = fb.Size;
    }
Esempio n. 7
0
    public void mutateTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 origin           = formConfig.getStartPosition();

        foreach (Branch branch in branches)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(0,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          origin,
                          formBounds);

            //set origin to previous start position
            origin = branchStartPosition;

            branchStartTwist = GeometryUtility.addDeltaToRotation(branchStartTwist,
                                                                  formConfig.getTrunkRotationDelta());
            branchStartPosition = GeometryUtility.addDeltaToPosition(branchStartPosition,
                                                                     formConfig.getTrunkPositionDelta(), 1);
        }
    }
Esempio n. 8
0
    public void createTrunk(List <Branch> branches,
                            FormBounds formBounds,
                            IFormConfiguration formConfig,
                            ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist  = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++)
        {
            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch(0,
                                       formConfig,
                                       colourConfig,
                                       branchStartPosition,
                                       branchStartTwist,
                                       branchStartOrigin,
                                       formBounds);              //magic 0 no offset
            branches.Add(branch);

            //set origin to previous start position
            branchStartOrigin = branchStartPosition;

            branchStartTwist = GeometryUtility.addDeltaToRotation(branchStartTwist,
                                                                  formConfig.getTrunkRotationDelta());
            branchStartPosition = GeometryUtility.addDeltaToPosition(branchStartPosition,
                                                                     formConfig.getTrunkPositionDelta(), 1);
        }
    }
Esempio n. 9
0
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        Vector3 position   = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius     = formConfig.getBranchPositionDelta().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = offset;

        foreach (IStack stack in stacks)
        {
            position.x = formConfig.getStartPosition().x + (radius * (float)Math.Cos(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float)Math.Sin(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float)Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i - offset);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i - offset);
            }

            stack.mutateTo(position, stackTwist, 0.5f, stackColour);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());

            i++;
        }
    }
Esempio n. 10
0
    //create a new model
    public Trunk(IFormConfiguration formConfig, ColourConfiguration colourConfig)
    {
        localFormConfig   = formConfig;
        localColourConfig = colourConfig;

        FormProcessor formProcessor = formConfig.getFormProcessor();

        formBounds = new FormBounds(formConfig.getStartPosition());
        formProcessor.createTrunk(branches, formBounds, formConfig, colourConfig);
    }
Esempio n. 11
0
    public void mutate(int offset,
					   IFormConfiguration formConfig, 
	                   ColourConfiguration colourConfig, 
	                   Vector3 branchStartPosition, 
	                   Vector3 branchStartTwist,
	                   Vector3 branchStartRotationOrigin,
	                   FormBounds formBounds)
    {
        FormProcessor formProcessor = formConfig.getFormProcessor ();
        formProcessor.mutateBranch(stacks,
                                   offset,
                                   formConfig,
                                   colourConfig,
                                   branchStartPosition,
                                   branchStartTwist,
                                   branchStartRotationOrigin,
                                   formBounds);
    }
Esempio n. 12
0
    public Branch(int offset,
                  IFormConfiguration formConfig,
                  ColourConfiguration colourConfig,
                  Vector3 branchStartPosition,
                  Vector3 branchStartTwist,
                  Vector3 origin,
                  FormBounds formBounds)
    {
        FormProcessor formProcessor = formConfig.getFormProcessor();

        formProcessor.createBranch(stacks,
                                   offset,
                                   formConfig,
                                   colourConfig,
                                   branchStartPosition,
                                   branchStartTwist,
                                   origin,
                                   formBounds);
    }
Esempio n. 13
0
    //mutate model
    public void mutate(IFormConfiguration formConfig, ColourConfiguration colourConfig)
    {
        //if we are receiving null configs then this is rendering on scene and not current brush
        //so use local configs
        if (formConfig == null)
        {
            formConfig = localFormConfig;
        }
        if (colourConfig == null)
        {
            colourConfig = localColourConfig;
        }

        //increment colour once for each trunk
        colourConfig.incrementDisplayColour();
        //increment pulse once for each trunk
        colourConfig.incrementPulseCount();

        FormProcessor formProcessor = formConfig.getFormProcessor();

        formBounds = new FormBounds(formConfig.getStartPosition());
        formProcessor.mutateTrunk(branches, formBounds, formConfig, colourConfig);
    }
Esempio n. 14
0
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        Vector3 position   = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius     = formConfig.getBranchPositionDelta().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++)
        {
            position.x = formConfig.getStartPosition().x + (radius * (float)Math.Cos(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float)Math.Sin(i) / (float)Math.Cosh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float)Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f, stackColour);
            stacks.Add(stack);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 15
0
    public void createBranch(List<IStack> stacks,
	                         int offset,
	                         IFormConfiguration formConfig, 
	                         ColourConfiguration colourConfig, 
	                         Vector3 branchStartPosition, 
	                         Vector3 branchStartTwist,
	                         Vector3 origin,
	                         FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();
        for (int o = 0; o < offset; o++) {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //angle to calculate ring
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;
        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++) {

            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f * scale, stackColour);
            stacks.Add(stack);

            yAngle += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 16
0
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        float   scale      = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position   = branchStartPosition;
        Vector3 twist      = branchStartTwist;

        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = 0; i < iterations; i++)
        {
            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, scale, stackColour);
            stacks.Add(stack);

            scale = scale * formConfig.getScaleDelta();
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position, formConfig.getBranchPositionDelta(), scale);
            position   = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist      = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 17
0
    public void mutateTrunk(List<Branch> branches, 
	                        FormBounds formBounds,
	                        IFormConfiguration formConfig, 
	                        ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        int i = 0;
        foreach (Branch branch in branches) {

            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(i,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          branchStartOrigin,
                          formBounds);

            branchStartPosition.x += formConfig.getTrunkPositionDelta().x;
            branchStartPosition.y += formConfig.getTrunkPositionDelta().y;
            branchStartPosition.z += formConfig.getTrunkPositionDelta().z;

            branchStartTwist.x += formConfig.getTrunkRotationDelta().x;
            branchStartTwist.y += formConfig.getTrunkRotationDelta().y;
            branchStartTwist.z += formConfig.getTrunkRotationDelta().z;
            i++;
        }
    }
Esempio n. 18
0
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        float   scale      = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position   = branchStartPosition;
        Vector3 twist      = branchStartTwist;

        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int   iterations  = formConfig.getStackIterations();
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;

        foreach (IStack stack in stacks)
        {
            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, scale, stackColour);

            scale = scale * formConfig.getScaleDelta();

            float positionScale = scale;
            if (!formConfig.getScaleBranch())
            {
                //ignore scale
                positionScale = 1;
            }
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position,
                                                                     formConfig.getBranchPositionDelta(),
                                                                     positionScale);
            position   = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist      = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
Esempio n. 19
0
    public void mutateBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        Vector3 position = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius = formConfig.getBranchPositionDelta ().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = offset;
        foreach (IStack stack in stacks) {

            position.x = formConfig.getStartPosition().x + (radius * (float) Math.Cos(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float) Math.Sin(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float) Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i - offset);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i - offset);
            }

            stack.mutateTo(position, stackTwist, 0.5f, stackColour);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());

            i++;
        }
    }
Esempio n. 20
0
    public void mutateBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        float scale = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position = branchStartPosition;
        Vector3 twist = branchStartTwist;
        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;
        foreach (IStack stack in stacks) {

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, scale, stackColour);

            scale = scale * formConfig.getScaleDelta();

            float positionScale = scale;
            if (!formConfig.getScaleBranch()) {
                //ignore scale
                positionScale = 1;
            }
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position,
                                                                     formConfig.getBranchPositionDelta(),
                                                                     positionScale);
            position = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
Esempio n. 21
0
    public void createBranch(List<IStack> stacks,
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        Vector3 position = origin;
        Vector3 stackTwist = formConfig.getStackStartTwist();

        float radius = formConfig.getBranchPositionDelta ().x * 20;
        float rhumbAngle = formConfig.getStartRotation().x * 0.032f;

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++) {

            position.x = formConfig.getStartPosition().x + (radius * (float) Math.Cos(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.y = formConfig.getStartPosition().y + (radius * (float) Math.Sin(i) / (float) Math.Cosh (Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));
            position.z = formConfig.getStartPosition().z + (radius * (float) Math.Tanh(Mathf.Rad2Deg * (Mathf.Deg2Rad * i * rhumbAngle)));

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f, stackColour);
            stacks.Add(stack);

            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 22
0
    public void createBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();

        for (int o = 0; o < offset; o++)
        {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //angle to calculate ring
        float zAngle           = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle           = branchStartTwist.y * Mathf.Deg2Rad;
        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = offset; i < offset + iterations; i++)
        {
            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack();             //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere)
            {
                //spehere
                stack = new SimpleStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box)
            {
                //box
                stack = new SimpleBoxStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1)
            {
                //complex 1
                stack = new ComplexStack();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2)
            {
                //complex 2
                stack = new ComplexStack2();
            }
            else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus)
            {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, 0.5f * scale, stackColour);
            stacks.Add(stack);

            yAngle    += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 23
0
    public void mutateTrunk(List<Branch> branches, 
	                 FormBounds formBounds,
	                 IFormConfiguration formConfig, 
	                 ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 origin = formConfig.getStartPosition();

        foreach (Branch branch in branches) {

            formBounds.calculateNewBounds(branchStartPosition);

            branch.mutate(0,
                          formConfig,
                          colourConfig,
                          branchStartPosition,
                          branchStartTwist,
                          origin,
                          formBounds);

            //set origin to previous start position
            origin = branchStartPosition;

            branchStartTwist = GeometryUtility.addDeltaToRotation(branchStartTwist,
                                                                  formConfig.getTrunkRotationDelta());
            branchStartPosition = GeometryUtility.addDeltaToPosition(branchStartPosition,
                                                                     formConfig.getTrunkPositionDelta(), 1);
        }
    }
Esempio n. 24
0
    public void createBranch(List<IStack> stacks, 
	                  int offset,
	                  IFormConfiguration formConfig, 
	                  ColourConfiguration colourConfig, 
	                  Vector3 branchStartPosition, 
	                  Vector3 branchStartTwist,
	                  Vector3 origin,
	                  FormBounds formBounds)
    {
        float scale = formConfig.getStartScale();
        Vector3 stackTwist = formConfig.getStackStartTwist();
        Vector3 position = branchStartPosition;
        Vector3 twist = branchStartTwist;
        //rotate position araound previous branch start position
        position = GeometryUtility.rotateCoordinateAboutPoint(origin,
                                                              position,
                                                              branchStartTwist);

        //colour stuff
        int iterations = formConfig.getStackIterations();
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);
        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        for (int i = 0; i < iterations; i++) {

            formBounds.calculateNewBounds(position);

            //Stack Shape
            IStack stack = new SimpleStack(); //default
            if (formConfig.getStackShape() == IFormConfiguration.StackShape.Sphere) {
                //spehere
                stack = new SimpleStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Box) {
                //box
                stack = new SimpleBoxStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex1) {
                //complex 1
                stack = new ComplexStack();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.Complex2) {
                //complex 2
                stack = new ComplexStack2();
            } else if (formConfig.getStackShape() == IFormConfiguration.StackShape.SimpleTorus) {
                //simple Torus
                stack = new SimpleTorusStack();
            }

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.initialise(position, stackTwist, scale, stackColour);
            stacks.Add(stack);

            scale = scale * formConfig.getScaleDelta();
            Vector3 newPosition = GeometryUtility.addDeltaToPosition(position, formConfig.getBranchPositionDelta(), scale);
            position = GeometryUtility.rotateCoordinateAboutPoint(position, newPosition, twist);
            twist = GeometryUtility.addDeltaToRotation(twist, formConfig.getBranchTwistDelta());
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
        }
    }
Esempio n. 25
0
    public void mutateBranch(List<IStack> stacks,
	                         int offset,
	                         IFormConfiguration formConfig, 
	                         ColourConfiguration colourConfig, 
	                         Vector3 branchStartPosition, 
	                         Vector3 branchStartTwist,
	                         Vector3 origin,
	                         FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();
        for (int o = 0; o < offset; o++) {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //first element of ring on radius
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;

        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color (colourConfig.getBaseRed(),
                                       colourConfig.getBaseGreen(),
                                       colourConfig.getBaseBlue(),
                                       1);

        //if cycling override base colour
        if (colourConfig.getCycle ()) {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;
        foreach (IStack stack in stacks) {

            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour()) {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse()) {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, 0.5f * scale, stackColour);

            yAngle += ringSegmentAngle;

            yAngle += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
Esempio n. 26
0
    public void mutateBranch(List <IStack> stacks,
                             int offset,
                             IFormConfiguration formConfig,
                             ColourConfiguration colourConfig,
                             Vector3 branchStartPosition,
                             Vector3 branchStartTwist,
                             Vector3 origin,
                             FormBounds formBounds)
    {
        int iterations = formConfig.getStackIterations();

        float scale = formConfig.getStartScale();

        for (int o = 0; o < offset; o++)
        {
            scale *= formConfig.getScaleDelta();
        }

        //centre of ring
        Vector3 position = branchStartPosition;

        //add radius of ring
        float ringRadius = formConfig.getBranchPositionDelta().x * 10 * scale;

        //first element of ring on radius
        float zAngle = branchStartTwist.z * Mathf.Deg2Rad;
        float yAngle = branchStartTwist.y * Mathf.Deg2Rad;

        float ringSegmentAngle = 360 / iterations * Mathf.Deg2Rad;

        Vector3 stackTwist = formConfig.getStackStartTwist();

        //colour stuff
        Color modelColour = new Color(colourConfig.getBaseRed(),
                                      colourConfig.getBaseGreen(),
                                      colourConfig.getBaseBlue(),
                                      1);

        //if cycling override base colour
        if (colourConfig.getCycle())
        {
            modelColour = colourConfig.getCycleColour();
        }

        int i = 0;

        foreach (IStack stack in stacks)
        {
            position.x = (ringRadius * Mathf.Cos(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.x;
            position.y = (ringRadius * Mathf.Sin(zAngle) * Mathf.Sin(yAngle)) + branchStartPosition.y;
            position.z = (ringRadius * Mathf.Cos(yAngle)) + branchStartPosition.z;

            formBounds.calculateNewBounds(position);

            //colour stuff order is important
            Color stackColour = modelColour;
            if (colourConfig.getFadeColour())
            {
                //fade colour in
                stackColour = ColourUtility.fadeModelColour(modelColour, iterations, i);
            }
            if (colourConfig.getPulse())
            {
                //do pulse
                stackColour = colourConfig.getPulseColourForStack(stackColour, i);
            }

            stack.mutateTo(position, stackTwist, 0.5f * scale, stackColour);

            yAngle += ringSegmentAngle;

            yAngle    += ringSegmentAngle;
            stackTwist = GeometryUtility.addDeltaToRotation(stackTwist, formConfig.getStackTwistDelta());
            i++;
        }
    }
Esempio n. 27
0
    public void createTrunk(List<Branch> branches, 
	                        FormBounds formBounds, 
	                        IFormConfiguration formConfig, 
	                        ColourConfiguration colourConfig)
    {
        Vector3 branchStartPosition = formConfig.getStartPosition();

        Vector3 branchStartTwist = formConfig.getStartRotation();
        Vector3 branchStartOrigin = formConfig.getStartPosition();

        for (int i = 0; i < formConfig.getTrunkIterations(); i++) {

            formBounds.calculateNewBounds(branchStartPosition);

            Branch branch = new Branch (i,
                                        formConfig,
                                        colourConfig,
                                        branchStartPosition,
                                        branchStartTwist,
                                        branchStartOrigin,
                                        formBounds);
            branches.Add(branch);

            branchStartPosition.x += formConfig.getTrunkPositionDelta().x;
            branchStartPosition.y += formConfig.getTrunkPositionDelta().y;
            branchStartPosition.z += formConfig.getTrunkPositionDelta().z;

            branchStartTwist.x += formConfig.getTrunkRotationDelta().x;
            branchStartTwist.y += formConfig.getTrunkRotationDelta().y;
            branchStartTwist.z += formConfig.getTrunkRotationDelta().z;
        }
    }