Ejemplo n.º 1
0
        /// <summary>
        /// Generates the unity tree according to the given data structure of the node
        /// </summary>
        /// <param name="node"></param>
        /// <param name="position"></param>
        public GameObject GenerateTree(UiNode node, Vector2 position)
        {
            var treeHeight     = node.GetHeight() + 1;
            var trunkHeight    = manipulator.DefaultEdgeHeight * GetYScalingFactor(treeHeight);
            var trunkYScale    = manipulator.DefaultEdgeScale.y * GetYScalingFactor(treeHeight);
            var trunkThickness = manipulator.DefaultEdgeScale.x * GetXScalingFactor(treeHeight);
            var nodePosition   = new Vector3(0, trunkHeight, 0);

            var treeObject  = manipulator.AddTreeObject(position);
            var trunkObject = manipulator.AddEmptyBranchObject(treeObject.transform);
            var edgeObject  = manipulator.AddEdgeObject(trunkObject.transform, trunkYScale, 0, 0, trunkThickness);
            var nodeObject  = manipulator.AddEmptyNodeObject(node, trunkObject.transform, nodePosition, edgeObject);

            GenerateBranches(node, nodeObject.transform);

            var disposable = node.Circle.Position.Subscribe(v =>
            {
                treeObject.transform.localPosition = new Vector3(v.x, 0, v.y);
            });

            treeObject.OnDestroyAsObservable().Subscribe(_ => disposable.Dispose());

            return(treeObject);
        }