예제 #1
0
    //////////////////////////////////////////////////////////////////////////////////////////
    #region Constructors
    //////////////////////////////////////////////////////////////////////////////////////////

    public MoveAction(MoverComponent moverComponent, MoverComponent.ActionTypeFlag actionTypeFlag)
    {
        Debug.Assert(moverComponent != null, "Error: MoverComponent provided was null.");
        m_moverComponent = moverComponent;
        m_actionTypeFlag = actionTypeFlag;
    }
예제 #2
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        MoverComponent moverComponent = target as MoverComponent;

        EditorGUI.BeginChangeCheck();
        bool alwaysUpdate = EditorGUILayout.Toggle("Always Update", moverComponent.getAlwaysUpdate());

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(moverComponent, "Always Update");
            EditorUtility.SetDirty(moverComponent);
            moverComponent.setAlwaysUpdate(alwaysUpdate);
        }

        EditorGUILayout.LabelField("Affected Transform");
        EditorGUI.BeginChangeCheck();
        Transform transformComponent = (Transform)EditorGUILayout.ObjectField(moverComponent.getTransform(), typeof(Transform), true);

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(moverComponent, "Affected Transform");
            EditorUtility.SetDirty(moverComponent);
            moverComponent.setTransform(transformComponent);
        }

        EditorGUI.BeginChangeCheck();
        MoverComponent.ActionTypeFlag allActions = (MoverComponent.ActionTypeFlag)EditorGUILayout.EnumMaskField("Mover Actions", moverComponent.getActionTypeFlags());
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(moverComponent, "Mover Actions");
            EditorUtility.SetDirty(moverComponent);
            moverComponent.setActionTypeFlags(allActions);
        }

        Dictionary <MoverComponent.ActionTypeFlag, Mover> actionMoverBehaviors = moverComponent.getActionMovers();

        int actionTypeFlagCount = System.Enum.GetValues(typeof(MoverComponent.ActionTypeFlag)).Length;

        for (int i = 0; i < actionTypeFlagCount; ++i)
        {
            MoverComponent.ActionTypeFlag mask = (MoverComponent.ActionTypeFlag)(1 << i);
            MoverComponent.ActionTypeFlag maskedActionTypeFlag = mask & allActions;
            if (maskedActionTypeFlag != 0)
            {
                bool displayFoldout;
                if (!m_actionTypeFlagFoldoutDisplay.TryGetValue(maskedActionTypeFlag, out displayFoldout))
                {
                    m_actionTypeFlagFoldoutDisplay.Add(maskedActionTypeFlag, true);
                    displayFoldout = m_defaultFoldout;
                }

                m_actionTypeFlagFoldoutDisplay[maskedActionTypeFlag] = EditorGUILayout.Foldout(displayFoldout, maskedActionTypeFlag.ToString());
                if (displayFoldout)
                {
                    moverComponent.createMoverAction(maskedActionTypeFlag);
                    Mover mover = actionMoverBehaviors[maskedActionTypeFlag];

                    EditorGUILayout.LabelField("Mover Behaviour");
                    EditorGUI.BeginChangeCheck();
                    MoverBehavior moverBehavior = (MoverBehavior)EditorGUILayout.ObjectField(mover.getMoverBehavior(), typeof(MoverBehavior), true);
                    if (EditorGUI.EndChangeCheck())
                    {
                        Undo.RecordObject(moverComponent, "Mover Behaviour");
                        EditorUtility.SetDirty(moverComponent);
                        mover.setMoverBehavior(moverBehavior);
                    }

                    if (moverBehavior != null)
                    {
                        createMoverBehaviorUI(moverBehavior);

                        EditorGUI.BeginChangeCheck();
                        InterpolationHelper.InterpolationType interpolationType = (InterpolationHelper.InterpolationType)EditorGUILayout.EnumPopup("Interpolation Type", mover.getInterpolationType());
                        if (EditorGUI.EndChangeCheck())
                        {
                            Undo.RecordObject(moverComponent, "Interpolation Type");
                            EditorUtility.SetDirty(moverComponent);
                            mover.setInterpolationType(interpolationType);
                        }

                        if (interpolationType != InterpolationHelper.InterpolationType.None &&
                            interpolationType != InterpolationHelper.InterpolationType.Undefined)
                        {
                            if (interpolationType != InterpolationHelper.InterpolationType.Linear)
                            {
                                EditorGUI.BeginChangeCheck();
                                InterpolationHelper.EasingType easingType = (InterpolationHelper.EasingType)EditorGUILayout.EnumPopup("Easing Type", mover.getEasingType());
                                if (EditorGUI.EndChangeCheck())
                                {
                                    Undo.RecordObject(moverComponent, "Easing Type");
                                    EditorUtility.SetDirty(moverComponent);
                                    mover.setEasingType(easingType);
                                }
                            }

                            EditorGUI.BeginChangeCheck();
                            float duration = EditorGUILayout.FloatField("Duration (seconds)", mover.getDuration());
                            if (EditorGUI.EndChangeCheck())
                            {
                                Undo.RecordObject(moverComponent, "Duration");
                                EditorUtility.SetDirty(moverComponent);
                                mover.setDuration(duration);
                            }

                            EditorGUI.BeginChangeCheck();
                            float updateRate = EditorGUILayout.FloatField("Update Rate (seconds)", mover.getUpdateRate());
                            if (EditorGUI.EndChangeCheck())
                            {
                                Undo.RecordObject(moverComponent, "Update Rate");
                                EditorUtility.SetDirty(moverComponent);
                                mover.setUpdateRate(updateRate);
                            }
                        }
                    }
                }
            }
            else
            {
                moverComponent.removeMoverAction(mask);
            }
        }

        serializedObject.ApplyModifiedProperties();
    }