void CreateTree()
    {
        if (oldSeed == null)
        {
            oldSeed = new Seed();
            oldSeed.InitBranch();
        }

        // If seed hasn't changed return;
        if (Seed.CompareSeeds(oldSeed, seed))
        {
            return;
        }

        if (seed.randomSeedFromObjectHash)
        {
            int hash = this.transform.GetHashCode();
            if (hash != seed.randomSeed)
            {
                seed.randomSeed = hash;
            }
        }

        Seed.CopySeedDataIntoOtherSeed(oldSeed, seed);

        //FIX: Might be for the better reduce function calls
        seed.InitBranch();

        BranchRung firstTreeRung = new BranchRung {
            pos = ZERO,
            rot = new Vector2(
                -transform.localEulerAngles.z * Mathf.Deg2Rad,
                transform.localEulerAngles.x * Mathf.Deg2Rad)
        };

        List <Branch> allBranches = new List <Branch>();

        // This draws whole Tree
        Branch tree = new Branch(firstTreeRung, seed, allBranches);

        // 3D Model Logic:
        DrawTreeDModel(allBranches);
    }