Example #1
0
    private void build()
    {
        saveStack.Clear();

        DrawingTransform = SimpleTransform.Identity;


        for (int i = 0; i < state.Count; i++)
        {
            GameObject go;

            switch (state[i].symbol)
            {
            case 'N':
                go = makeModule(leaf);
                DrawingTransform.AssignToGameObject(go);
                DrawingTransform.position = go.transform.position;
                break;

            case 'F':
                go = makeModule(branch);
                DrawingTransform.AssignToGameObject(go);
                DrawingTransform.position = go.transform.position + go.transform.up * 1;
                break;

            case '[':
                saveStack.Push(DrawingTransform);
                break;

            case ']':
                if (saveStack.Count > 0)
                {
                    DrawingTransform = saveStack.Pop();
                }
                break;

            case 'R':
                Vector3 localUp    = DrawingTransform.rotation * Vector3.up;
                Vector3 localRight = DrawingTransform.rotation * Vector3.right;
                if (state[i].parameters.Length == 2)
                {
                    DrawingTransform.rotation *= Quaternion.AngleAxis(state[i].parameters[0], localUp) * Quaternion.AngleAxis(state[i].parameters[1], localRight);
                }
                break;
            }
        }
    }