示例#1
0
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                EditorGUILayout.PropertyField(PropertyFromName("m_RequireAim"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AbsorptionFactor"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AbsorbExplosions"));
                // The names will be retrieved by the Attribute Manager.
                var attributeName = InspectorUtility.DrawAttribute(target, m_AttributeManager, (target as Shield).DurabilityAttributeName, "Durability Attribute");
                if (attributeName != (target as Shield).DurabilityAttributeName)
                {
                    PropertyFromName("m_DurabilityAttributeName").stringValue = attributeName;
                    serializedObject.ApplyModifiedProperties();
                }
                if (!string.IsNullOrEmpty(attributeName))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_DropWhenDurabilityDepleted"));
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Impact"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ApplyImpact"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Impact Complete Event", PropertyFromName("m_ImpactCompleteEvent"));
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_Shield, m_Shield.ImpactAnimatorAudioStateSet, "m_ImpactAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableImpactAnimatorAudioStateSetList, OnImpactAnimatorAudioStateListDraw, OnImpactAnimatorAudioStateListSelect,
                                                                                 OnImpactAnimatorAudioStateListAdd, OnImpactAnimatorAudioStateListRemove, SelectedImpactAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableImpactAnimatorAudioStateSetAudioList, OnImpactAudioListElementDraw, OnImpactAudioListAdd, OnImpactAudioListRemove,
                                                                                 ref m_ReorderableImpactAnimatorAudioStateSetStateList, OnImpactAnimatorAudioStateSetStateListDraw, OnImpactAnimatorAudioStateSetStateListAdd,
                                                                                 OnImpactAnimatorAudioStateSetStateListReorder, OnImpactAnimatorAudioStateListRemove,
                                                                                 GetSelectedImpactAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedImpactAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                }

                GUI.enabled = true;
            };

            return(baseCallback);
        }
 /// <summary>
 /// Draws the AudioStateSet element.
 /// </summary>
 private void OnAnimatorAudioStateListDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateElementDraw(m_ReorderableUseAnimatorAudioStateSetAudioList, m_UsableItem.UseAnimatorAudioStateSet, rect, index, isActive, isFocused, target);
 }
 /// <summary>
 /// Removes the state at the list index.
 /// </summary>
 private void OnAnimatorAudioStateListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListRemove(list, m_ShootableWeapon.ReloadAnimatorAudioStateSet, SelectedReloadAnimatorAudioStateSetIndexKey);
 }
 /// <summary>
 /// Removes the state at the list index.
 /// </summary>
 private void OnRecoilAnimatorAudioStateListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListRemove(list, m_MeleeWeapon.RecoilAnimatorAudioStateSet, SelectedRecoilAnimatorAudioStateSetIndexKey);
 }
 /// <summary>
 /// Draws all of the added audio clip elements.
 /// </summary>
 private void OnReloadAudioListElementDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAudioClipDraw(m_ReorderableReloadAnimatorAudioStateSetAudioList, rect, index, m_ShootableWeapon.ReloadAnimatorAudioStateSet.States, SelectedReloadAnimatorAudioStateSetIndexKey, target);
 }
 /// <summary>
 /// Draws the AudioStateSet element.
 /// </summary>
 private void OnAnimatorAudioStateListDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateElementDraw(m_ReorderableReloadAnimatorAudioStateSetList, m_ShootableWeapon.ReloadAnimatorAudioStateSet, rect, index, isActive, isFocused, target);
 }
示例#7
0
 /// <summary>
 /// Removes the state at the list index.
 /// </summary>
 private void OnEquipAnimatorAudioStateListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListRemove(list, m_Item.EquipAnimatorAudioStateSet, SelectedEquipAnimatorAudioStateSetIndexKey);
 }
 /// <summary>
 /// Removes the audio clip at the list index.
 /// </summary>
 private void OnUseAudioListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListRemove(list, m_UsableItem.UseAnimatorAudioStateSet.States, SelectedUseAnimatorAudioStateSetIndexKey, target);
 }
示例#9
0
 /// <summary>
 /// Adds a new audio clip element to the list.
 /// </summary>
 private void OnUnequipAudioListAdd(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListAdd(list, m_Item.UnequipAnimatorAudioStateSet.States, SelectedUnequipAnimatorAudioStateSetIndexKey, target);
 }
示例#10
0
 /// <summary>
 /// Adds a new state element to the list.
 /// </summary>
 private void OnUnequipAnimatorAudioStateListAdd(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListAdd(list, m_Item.UnequipAnimatorAudioStateSet, SelectedUnequipAnimatorAudioStateSetIndexKey);
 }
示例#11
0
 /// <summary>
 /// Removes the audio clip at the list index.
 /// </summary>
 private void OnEquipAudioListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListRemove(list, m_Item.EquipAnimatorAudioStateSet.States, SelectedEquipAnimatorAudioStateSetIndexKey, target);
 }
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                EditorGUILayout.PropertyField(PropertyFromName("m_ItemType"));
                EditorGUILayout.PropertyField(PropertyFromName("m_SlotID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AnimatorItemID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AnimatorMovementSetID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_DominantItem"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AllowCameraZoom"));
                EditorGUILayout.PropertyField(PropertyFromName("m_DropPrefab"));
#if ULTIMATE_CHARACTER_CONTROLLER_VR
                if (PropertyFromName("m_DropPrefab").objectReferenceValue != null)
                {
                    EditorGUILayout.PropertyField(PropertyFromName("m_DropVelocityMultiplier"));
                }
#endif
                if (Foldout("Equip"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.DrawAnimationEventTrigger(target, "Equip Event", PropertyFromName("m_EquipEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Equip Complete Event", PropertyFromName("m_EquipCompleteEvent"));
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_Item, m_Item.EquipAnimatorAudioStateSet, "m_EquipAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableEquipAnimatorAudioStateSetList, OnEquipAnimatorAudioStateListDraw, OnEquipAnimatorAudioStateListSelect,
                                                                                 OnEquipAnimatorAudioStateListAdd, OnEquipAnimatorAudioStateListRemove, SelectedEquipAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableEquipAnimatorAudioStateSetAudioList,
                                                                                 OnEquipAudioListElementDraw, OnEquipAudioListAdd, OnEquipAudioListRemove, ref m_ReorderableEquipAnimatorAudioStateSetStateList,
                                                                                 OnEquipAnimatorAudioStateSetStateListDraw, OnEquipAnimatorAudioStateSetStateListAdd, OnEquipAnimatorAudioStateSetStateListReorder, OnEquipAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedEquipAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedEquipAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Unequip"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.DrawAnimationEventTrigger(target, "Unequip Event", PropertyFromName("m_UnequipEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Unequip Complete Event", PropertyFromName("m_UnequipCompleteEvent"));
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_Item, m_Item.UnequipAnimatorAudioStateSet, "m_UnequipAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableUnequipAnimatorAudioStateSetList, OnUnequipAnimatorAudioStateListDraw, OnUnequipAnimatorAudioStateListSelect,
                                                                                 OnUnequipAnimatorAudioStateListAdd, OnUnequipAnimatorAudioStateListRemove, SelectedUnequipAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableUnequipAnimatorAudioStateSetAudioList,
                                                                                 OnUnequipAudioListElementDraw, OnUnequipAudioListAdd, OnUnequipAudioListRemove, ref m_ReorderableUnequipAnimatorAudioStateSetStateList,
                                                                                 OnUnequipAnimatorAudioStateSetStateListDraw, OnUnequipAnimatorAudioStateSetStateListAdd, OnUnequipAnimatorAudioStateSetStateListReorder, OnUnequipAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedUnequipAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedUnequipAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("UI"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_UIMonitorID"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_Icon"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ShowCrosshairsOnAim"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_CenterCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_QuadrantOffset"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_MaxQuadrantSpread"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_QuadrantSpreadDamping"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_LeftCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_TopCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_RightCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_BottomCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ShowFullScreenUI"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_FullScreenUIID"));
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Events"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.UnityEventPropertyField(PropertyFromName("m_PickupItemEvent"));
                    InspectorUtility.UnityEventPropertyField(PropertyFromName("m_EquipItemEvent"));
                    InspectorUtility.UnityEventPropertyField(PropertyFromName("m_UnequipItemEvent"));
                    InspectorUtility.UnityEventPropertyField(PropertyFromName("m_DropItemEvent"));
                    EditorGUI.indentLevel--;
                }
            };

            return(baseCallback);
        }
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                if (Foldout("Melee"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_RequireInAirMeleeAbilityInAir"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_RequireCounterAttackAbility"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_AimItemSubstateIndexAddition"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_MaxCollisionCount"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ForwardShieldSensitivity"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_SingleHit"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_MultiHitFrameCount"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_CanHitDelay"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_AllowAttackCombos"));
                    var states = m_MeleeWeapon.UseAnimatorAudioStateSet.States;
                    if (states != null)
                    {
                        if (PropertyFromName("m_AllowAttackCombos").boolValue&& states.Length == 1)
                        {
                            EditorGUILayout.HelpBox("Only 1 Use AnimatorAudio state has been added. " +
                                                    "Allow Attack Combos may need to be disabled in order for the animator to transition correctly.", MessageType.Warning);
                        }
                    }
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Impact"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactLayers"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_TriggerInteraction"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_DamageAmount"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactForce"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactForceFrames"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactStateName"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactStateDisableTimer"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_SurfaceImpact"));
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Recoil"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ApplyRecoil"));
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_MeleeWeapon, m_MeleeWeapon.RecoilAnimatorAudioStateSet, "m_RecoilAnimatorAudioStateSet", false,
                                                                                 ref m_ReorderableRecoilAnimatorAudioStateSetList, OnRecoilAnimatorAudioStateListDraw, OnRecoilAnimatorAudioStateListSelect,
                                                                                 OnRecoilAnimatorAudioStateListAdd, OnRecoilAnimatorAudioStateListRemove, SelectedRecoilAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableRecoilAnimatorAudioStateSetAudioList, OnRecoilAudioListElementDraw, OnRecoilAudioListAdd, OnRecoilAudioListRemove,
                                                                                 ref m_ReorderableRecoilAnimatorAudioStateSetStateList, OnRecoilAnimatorAudioStateSetStateListDraw, OnRecoilAnimatorAudioStateSetStateListAdd,
                                                                                 OnRecoilAnimatorAudioStateSetStateListReorder, OnRecoilAnimatorAudioStateListRemove,
                                                                                 GetSelectedRecoilAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedRecoilAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Trail"))
                {
                    EditorGUI.indentLevel++;
                    var trail = PropertyFromName("m_Trail");
                    EditorGUILayout.PropertyField(trail);
                    if (trail.objectReferenceValue != null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_TrailVisibility"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_TrailSpawnDelay"));
                        InspectorUtility.DrawAnimationEventTrigger(target, "Attack Stop Trail Event", PropertyFromName("m_AttackStopTrailEvent"));
                    }
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Events"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.UnityEventPropertyField(PropertyFromName("m_OnImpactEvent"));
                    EditorGUI.indentLevel--;
                }
            };

            return(baseCallback);
        }
 /// <summary>
 /// Removes the state at the list index.
 /// </summary>
 private void OnAnimatorAudioStateListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListRemove(list, m_UsableItem.UseAnimatorAudioStateSet, SelectedUseAnimatorAudioStateSetIndexKey);
 }
示例#15
0
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                var itemDefinition = PropertyFromName("m_ItemDefinition");
                EditorGUILayout.PropertyField(itemDefinition);
                if (itemDefinition == null)
                {
                    EditorGUILayout.HelpBox("An Item Definition is required.", MessageType.Error);
                }
                else
                {
                    // Ensure the Item Definition exists within the collection set by the Item Set Manager.
                    var itemSetManager = (target as Item).GetComponentInParent <ItemSetManager>();
                    if (itemSetManager != null && itemSetManager.ItemCollection != null)
                    {
                        if (AssetDatabase.GetAssetPath(itemDefinition.objectReferenceValue) != AssetDatabase.GetAssetPath(itemSetManager.ItemCollection))
                        {
                            EditorGUILayout.HelpBox("The Item Definition must exist within the Item Collection specified on the character's Item Set Manager.", MessageType.Error);
                        }
                    }
                }
                if (Application.isPlaying)
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.LabelField("Item Identifier", m_Item.ItemIdentifier == null ? "(none)" : m_Item.ItemIdentifier.ToString());
                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.PropertyField(PropertyFromName("m_SlotID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AnimatorItemID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AnimatorMovementSetID"));
                EditorGUILayout.PropertyField(PropertyFromName("m_DominantItem"));
                EditorGUILayout.PropertyField(PropertyFromName("m_UniqueItemSet"));
                EditorGUILayout.PropertyField(PropertyFromName("m_AllowCameraZoom"));
                EditorGUILayout.PropertyField(PropertyFromName("m_DropPrefab"));
                if (PropertyFromName("m_DropPrefab").objectReferenceValue != null)
                {
                    EditorGUI.indentLevel++;
#if ULTIMATE_CHARACTER_CONTROLLER_VR
                    EditorGUILayout.PropertyField(PropertyFromName("m_DropVelocityMultiplier"));
#endif
                    EditorGUI.indentLevel--;
                }
                EditorGUILayout.PropertyField(PropertyFromName("m_FullInventoryDrop"));
                EditorGUILayout.PropertyField(PropertyFromName("m_DropConsumableItems"));
                if (Foldout("Equip"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.DrawAnimationEventTrigger(target, "Equip Event", PropertyFromName("m_EquipEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Equip Complete Event", PropertyFromName("m_EquipCompleteEvent"));
                    if (Foldout("Animator Audio", "Equip"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_Item, m_Item.EquipAnimatorAudioStateSet, "m_EquipAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableEquipAnimatorAudioStateSetList, OnEquipAnimatorAudioStateListDraw, OnEquipAnimatorAudioStateListSelect,
                                                                                 OnEquipAnimatorAudioStateListAdd, OnEquipAnimatorAudioStateListRemove, SelectedEquipAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableEquipAnimatorAudioStateSetAudioList,
                                                                                 OnEquipAudioListElementDraw, OnEquipAudioListAdd, OnEquipAudioListRemove, ref m_ReorderableEquipAnimatorAudioStateSetStateList,
                                                                                 OnEquipAnimatorAudioStateSetStateListDraw, OnEquipAnimatorAudioStateSetStateListAdd, OnEquipAnimatorAudioStateSetStateListReorder, OnEquipAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedEquipAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedEquipAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Unequip"))
                {
                    EditorGUI.indentLevel++;
                    InspectorUtility.DrawAnimationEventTrigger(target, "Unequip Event", PropertyFromName("m_UnequipEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Unequip Complete Event", PropertyFromName("m_UnequipCompleteEvent"));
                    if (Foldout("Animator Audio", "Unequip"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_Item, m_Item.UnequipAnimatorAudioStateSet, "m_UnequipAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableUnequipAnimatorAudioStateSetList, OnUnequipAnimatorAudioStateListDraw, OnUnequipAnimatorAudioStateListSelect,
                                                                                 OnUnequipAnimatorAudioStateListAdd, OnUnequipAnimatorAudioStateListRemove, SelectedUnequipAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableUnequipAnimatorAudioStateSetAudioList,
                                                                                 OnUnequipAudioListElementDraw, OnUnequipAudioListAdd, OnUnequipAudioListRemove, ref m_ReorderableUnequipAnimatorAudioStateSetStateList,
                                                                                 OnUnequipAnimatorAudioStateSetStateListDraw, OnUnequipAnimatorAudioStateSetStateListAdd, OnUnequipAnimatorAudioStateSetStateListReorder, OnUnequipAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedUnequipAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedUnequipAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("UI"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_UIMonitorID"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_Icon"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ShowCrosshairsOnAim"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_CenterCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_QuadrantOffset"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_MaxQuadrantSpread"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_QuadrantSpreadDamping"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_LeftCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_TopCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_RightCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_BottomCrosshairs"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ShowFullScreenUI"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_FullScreenUIID"));
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Events"))
                {
                    EditorGUI.indentLevel++;
                    Shared.Editor.Inspectors.Utility.InspectorUtility.UnityEventPropertyField(PropertyFromName("m_PickupItemEvent"));
                    Shared.Editor.Inspectors.Utility.InspectorUtility.UnityEventPropertyField(PropertyFromName("m_EquipItemEvent"));
                    Shared.Editor.Inspectors.Utility.InspectorUtility.UnityEventPropertyField(PropertyFromName("m_UnequipItemEvent"));
                    Shared.Editor.Inspectors.Utility.InspectorUtility.UnityEventPropertyField(PropertyFromName("m_DropItemEvent"));
                    EditorGUI.indentLevel--;
                }
            };

            return(baseCallback);
        }
 /// <summary>
 /// Draws all of the added audio clip elements.
 /// </summary>
 private void OnUseAudioListElementDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAudioClipDraw(m_ReorderableUseAnimatorAudioStateSetList, rect, index, m_UsableItem.UseAnimatorAudioStateSet.States, SelectedUseAnimatorAudioStateSetIndexKey, target);
 }
示例#17
0
 /// <summary>
 /// Draws all of the added audio clip elements.
 /// </summary>
 private void OnImpactAudioListElementDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAudioClipDraw(m_ReorderableImpactAnimatorAudioStateSetAudioList, rect, index, m_Shield.ImpactAnimatorAudioStateSet.States, SelectedImpactAnimatorAudioStateSetIndexKey, target);
 }
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                if (Foldout("Use"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_UseRate"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_CanEquipEmptyItem"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_FaceTarget"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_StopUseAbilityDelay"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Use Event", PropertyFromName("m_UseEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Use Complete Event", PropertyFromName("m_UseCompleteEvent"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ForceRootMotionPosition"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ForceRootMotionRotation"));
                    if (Foldout("Attributes"))
                    {
                        EditorGUI.indentLevel++;
                        var attributeName = InspectorUtility.DrawAttribute(target, m_AttributeManager, m_UsableItem.UseAttributeName, "Use Attribute");
                        if (attributeName != m_UsableItem.UseAttributeName)
                        {
                            m_UsableItem.UseAttributeName = attributeName;
                            InspectorUtility.SetDirty(target);
                        }
                        if (!string.IsNullOrEmpty(m_UsableItem.UseAttributeName))
                        {
                            EditorGUI.indentLevel++;
                            EditorGUILayout.PropertyField(PropertyFromName("m_UseAttributeAmount"), new GUIContent("Use Amount"));
                            EditorGUILayout.PropertyField(PropertyFromName("m_DropWhenUseDepleted"));
                            EditorGUI.indentLevel--;
                        }
                        attributeName = InspectorUtility.DrawAttribute(target, m_CharacterAttributeManager, m_UsableItem.CharacterUseAttributeName, "Character Use Attribute");
                        if (attributeName != m_UsableItem.CharacterUseAttributeName)
                        {
                            m_UsableItem.CharacterUseAttributeName = attributeName;
                            InspectorUtility.SetDirty(target);
                        }
                        if (!string.IsNullOrEmpty(m_UsableItem.CharacterUseAttributeName))
                        {
                            EditorGUI.indentLevel++;
                            EditorGUILayout.PropertyField(PropertyFromName("m_CharacterUseAttributeAmount"), new GUIContent("Use Amount"));
                            EditorGUI.indentLevel--;
                        }
                        EditorGUI.indentLevel--;
                    }
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.PropertyField(PropertyFromName("m_PlayAudioOnStartUse"));
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_UsableItem, m_UsableItem.UseAnimatorAudioStateSet, "m_UseAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableUseAnimatorAudioStateSetAudioList, OnAnimatorAudioStateListDraw, OnAnimatorAudioStateListSelect,
                                                                                 OnAnimatorAudioStateListAdd, OnAnimatorAudioStateListRemove, SelectedUseAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableUseAnimatorAudioStateSetList, OnUseAudioListElementDraw, OnUseAudioListAdd, OnUseAudioListRemove,
                                                                                 ref m_ReorderableUseAnimatorAudioStateSetStateList, OnAnimatorAudioStateSetStateListDraw, OnAnimatorAudioStateSetStateListAdd,
                                                                                 OnAnimatorAudioStateSetStateListReorder, OnAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedUseAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                }
            };

            return(baseCallback);
        }
示例#19
0
 /// <summary>
 /// Removes the audio clip at the list index.
 /// </summary>
 private void OnImpactAudioListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListRemove(list, m_Shield.ImpactAnimatorAudioStateSet.States, SelectedImpactAnimatorAudioStateSetIndexKey, target);
 }
 /// <summary>
 /// Removes the audio clip at the list index.
 /// </summary>
 private void OnReloadAudioListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListRemove(list, m_ShootableWeapon.ReloadAnimatorAudioStateSet.States, SelectedReloadAnimatorAudioStateSetIndexKey, target);
 }
示例#21
0
 /// <summary>
 /// Draws the AudioStateSet element.
 /// </summary>
 private void OnImpactAnimatorAudioStateListDraw(Rect rect, int index, bool isActive, bool isFocused)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateElementDraw(m_ReorderableImpactAnimatorAudioStateSetList, m_Shield.ImpactAnimatorAudioStateSet, rect, index, isActive, isFocused, target);
 }
 /// <summary>
 /// A new element has been selected.
 /// </summary>
 private void OnAnimatorAudioStateListSelect(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateSelect(list, SelectedReloadAnimatorAudioStateSetIndexKey);
 }
示例#23
0
 /// <summary>
 /// Removes the state at the list index.
 /// </summary>
 private void OnImpactAnimatorAudioStateListRemove(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAnimatorAudioStateListRemove(list, m_Shield.ImpactAnimatorAudioStateSet, SelectedImpactAnimatorAudioStateSetIndexKey);
 }
        /// <summary>
        /// Returns the actions to draw before the State list is drawn.
        /// </summary>
        /// <returns>The actions to draw before the State list is drawn.</returns>
        protected override Action GetDrawCallback()
        {
            var baseCallback = base.GetDrawCallback();

            baseCallback += () =>
            {
                var projectile = PropertyFromName("m_Projectile");
                if (Foldout("Firing"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ConsumableItemDefinition"));
                    var fireMode = PropertyFromName("m_FireMode");
                    EditorGUILayout.PropertyField(fireMode);
                    if (fireMode.enumValueIndex == (int)ShootableWeapon.FireMode.Burst)
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.PropertyField(PropertyFromName("m_BurstCount"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_BurstDelay"));
                        EditorGUI.indentLevel--;
                    }
                    var fireType = PropertyFromName("m_FireType");
                    EditorGUILayout.PropertyField(fireType);
                    if (fireType.enumValueIndex != (int)ShootableWeapon.FireType.Instant)
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.PropertyField(PropertyFromName("m_MinChargeLength"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_FullChargeLength"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_ChargeItemSubstateParameterValue"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_MinChargeStrength"));
                        if (Foldout("Charge Audio"))
                        {
                            EditorGUI.indentLevel++;
                            m_ReorderableChargeAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_ShootableWeapon.ChargeAudioClipSet, PropertyFromName("m_ChargeAudioClipSet"), m_ReorderableChargeAudioClipsList, OnChargeAudioClipDraw, OnChargeAudioClipListAdd, OnChargeAudioClipListRemove);
                            EditorGUI.indentLevel--;
                        }
                        EditorGUI.indentLevel--;
                    }
                    EditorGUILayout.PropertyField(PropertyFromName("m_FireCount"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_Spread"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_FireInLookSourceDirection"));
                    EditorGUILayout.HelpBox("If a projectile prefab is specified then this projectile will be fired from the weapon. If no projectile is specified then a hitscan will be used.", MessageType.Info);
                    EditorGUILayout.PropertyField(projectile);
                    if (projectile.objectReferenceValue == null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_HitscanFireDelay"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_HitscanFireRange"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_MaxHitscanCollisionCount"));
                        Shared.Editor.Inspectors.Utility.InspectorUtility.UnityEventPropertyField(PropertyFromName("m_OnHitscanImpactEvent"));
                    }
                    else
                    {
                        if ((projectile.objectReferenceValue as GameObject).GetComponent <UltimateCharacterController.Objects.Projectile>() == null)
                        {
                            EditorGUILayout.HelpBox("The projectile must have the Projectile component attached to it.", MessageType.Error);
                        }
                        EditorGUI.indentLevel++;
                        EditorGUILayout.PropertyField(PropertyFromName("m_ProjectileFireVelocityMagnitude"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_ProjectileVisibility"));
                        var shootableWeapon = target as ShootableWeapon;
                        shootableWeapon.ProjectileStartLayer = EditorGUILayout.LayerField(new GUIContent("Projectile Start Layer",
                                                                                                         "The layer that the projectile should occupy when initially spawned."), shootableWeapon.ProjectileStartLayer);
                        shootableWeapon.ProjectileFiredLayer = EditorGUILayout.LayerField(new GUIContent("Projectile Fired Layer",
                                                                                                         "The layer that the projectile object should change to after being fired."), shootableWeapon.ProjectileFiredLayer);
                        EditorGUILayout.PropertyField(PropertyFromName("m_LayerChangeDelay"));
                        EditorGUILayout.PropertyField(PropertyFromName("m_ProjectileEnableDelayAfterOtherUse"));
                        EditorGUI.indentLevel--;
                    }
                    EditorGUILayout.PropertyField(PropertyFromName("m_DryFireItemSubstateParameterValue"));
                    if (Shared.Editor.Inspectors.Utility.InspectorUtility.Foldout(target, "Dry Fire Audio"))
                    {
                        EditorGUI.indentLevel++;
                        m_ReorderableDryFireAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_ShootableWeapon.DryFireAudioClipSet, PropertyFromName("m_DryFireAudioClipSet"), m_ReorderableDryFireAudioClipsList, OnDryFireAudioClipDraw, OnDryFireAudioClipListAdd, OnDryFireAudioClipListRemove);
                        EditorGUI.indentLevel--;
                    }
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Impact"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactLayers"));
                    if (projectile.objectReferenceValue == null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_HitscanTriggerInteraction"));
                    }
                    EditorGUILayout.PropertyField(PropertyFromName("m_DamageAmount"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactForce"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactForceFrames"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactStateName"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ImpactStateDisableTimer"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_SurfaceImpact"));
                    EditorGUI.indentLevel--;
                }

                if (Foldout("Reload"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_ClipSize"));
                    var autoReloadProperty = PropertyFromName("m_AutoReload");
                    var autoReloadString   = Enum.GetNames(typeof(UltimateCharacterController.Character.Abilities.Items.Reload.AutoReloadType));
                    autoReloadProperty.intValue = EditorGUILayout.MaskField(new GUIContent("Auto Reload", autoReloadProperty.tooltip), (int)autoReloadProperty.intValue, autoReloadString);
                    EditorGUILayout.PropertyField(PropertyFromName("m_ReloadType"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ReloadCanCameraZoom"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ReloadCrosshairsSpread"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Event", PropertyFromName("m_ReloadEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Complete Event", PropertyFromName("m_ReloadCompleteEvent"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_ReloadDetachAttachClip"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Detach Clip Event", PropertyFromName("m_ReloadDetachClipEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Show Projectile Event", PropertyFromName("m_ReloadShowProjectileEvent"));
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Attach Projectile Event", PropertyFromName("m_ReloadAttachProjectileEvent"));
                    var reloadClipProperty = PropertyFromName("m_ReloadDropClip");
                    EditorGUILayout.PropertyField(reloadClipProperty);
                    if (reloadClipProperty.objectReferenceValue != null)
                    {
                        EditorGUI.indentLevel++;
                        var shootableWeapon = target as ShootableWeapon;
                        shootableWeapon.ReloadClipTargetLayer = EditorGUILayout.LayerField(new GUIContent("Reload Clip Target Layer",
                                                                                                          "The layer that the clip object should change to after being reloaded."), shootableWeapon.ReloadClipTargetLayer);
                        EditorGUILayout.PropertyField(PropertyFromName("m_ReloadClipLayerChangeDelay"));
                        InspectorUtility.DrawAnimationEventTrigger(target, "Reload Drop Clip Event", PropertyFromName("m_ReloadDropClipEvent"));
                        EditorGUI.indentLevel--;
                    }
                    InspectorUtility.DrawAnimationEventTrigger(target, "Reload Attach Clip Event", PropertyFromName("m_ReloadAttachClipEvent"));
                    if (Foldout("Animator Audio"))
                    {
                        EditorGUI.indentLevel++;
                        AnimatorAudioStateSetInspector.DrawAnimatorAudioStateSet(m_ShootableWeapon, m_ShootableWeapon.ReloadAnimatorAudioStateSet, "m_ReloadAnimatorAudioStateSet", true,
                                                                                 ref m_ReorderableReloadAnimatorAudioStateSetList, OnAnimatorAudioStateListDraw, OnAnimatorAudioStateListSelect,
                                                                                 OnAnimatorAudioStateListAdd, OnAnimatorAudioStateListRemove, SelectedReloadAnimatorAudioStateSetIndexKey,
                                                                                 ref m_ReorderableReloadAnimatorAudioStateSetAudioList, OnReloadAudioListElementDraw, OnReloadAudioListAdd, OnReloadAudioListRemove,
                                                                                 ref m_ReorderableReloadAnimatorAudioStateSetStateList,
                                                                                 OnAnimatorAudioStateSetStateListDraw, OnAnimatorAudioStateSetStateListAdd, OnAnimatorAudioStateSetStateListReorder, OnAnimatorAudioStateSetStateListRemove,
                                                                                 GetSelectedAnimatorAudioStateSetStateIndexKey(EditorPrefs.GetInt(SelectedReloadAnimatorAudioStateSetIndexKey)));
                        EditorGUI.indentLevel--;
                    }
                    if (Shared.Editor.Inspectors.Utility.InspectorUtility.Foldout(target, "Reload Complete Audio"))
                    {
                        EditorGUI.indentLevel++;
                        m_ReorderableReloadCompleteAudioClipsList = AudioClipSetInspector.DrawAudioClipSet(m_ShootableWeapon.ReloadCompleteAudioClipSet, PropertyFromName("m_ReloadCompleteAudioClipSet"), m_ReorderableReloadCompleteAudioClipsList, OnReloadCompleteAudioClipDraw, OnReloadCompleteAudioClipListAdd, OnReloadCompleteAudioClipListRemove);
                        EditorGUI.indentLevel--;
                    }
                }
                if (Foldout("Recoil"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_PositionRecoil"), true);
                    EditorGUILayout.PropertyField(PropertyFromName("m_RotationRecoil"), true);
                    EditorGUILayout.PropertyField(PropertyFromName("m_PositionCameraRecoil"), true);
                    EditorGUILayout.PropertyField(PropertyFromName("m_RotationCameraRecoil"), true);
                    EditorGUILayout.PropertyField(PropertyFromName("m_CameraRecoilAccumulation"));
                    EditorGUILayout.PropertyField(PropertyFromName("m_LocalizeRecoilForce"));
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Muzzle Flash"))
                {
                    EditorGUI.indentLevel++;
                    var muzzleFlash = PropertyFromName("m_MuzzleFlash");
                    EditorGUILayout.PropertyField(muzzleFlash);
                    if (muzzleFlash.objectReferenceValue != null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_PoolMuzzleFlash"));
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Shell"))
                {
                    EditorGUI.indentLevel++;
                    var shell = PropertyFromName("m_Shell");
                    EditorGUILayout.PropertyField(shell);
                    if (shell.objectReferenceValue != null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_ShellVelocity"), true);
                        EditorGUILayout.PropertyField(PropertyFromName("m_ShellTorque"), true);
                        EditorGUILayout.PropertyField(PropertyFromName("m_ShellEjectDelay"));
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Smoke"))
                {
                    EditorGUI.indentLevel++;
                    var smoke = PropertyFromName("m_Smoke");
                    EditorGUILayout.PropertyField(smoke);
                    if (smoke.objectReferenceValue != null)
                    {
                        EditorGUILayout.PropertyField(PropertyFromName("m_SmokeSpawnDelay"));
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Tracer"))
                {
                    EditorGUI.indentLevel++;
                    if (PropertyFromName("m_Projectile").objectReferenceValue == null)
                    {
                        var tracer = PropertyFromName("m_Tracer");
                        EditorGUILayout.PropertyField(tracer);
                        if (tracer.objectReferenceValue != null)
                        {
                            EditorGUILayout.PropertyField(PropertyFromName("m_TracerDefaultLength"));
                            EditorGUILayout.PropertyField(PropertyFromName("m_TracerSpawnDelay"));
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A tracer can only be applied to hitscan weapons.", MessageType.Info);
                    }
                    EditorGUI.indentLevel--;
                }
                if (Foldout("Attachments"))
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.PropertyField(PropertyFromName("m_DisableScopeCameraOnNoAim"));
                    EditorGUI.indentLevel--;
                }
            };

            return(baseCallback);
        }
 /// <summary>
 /// Adds a new audio clip element to the list.
 /// </summary>
 private void OnRecoilAudioListAdd(ReorderableList list)
 {
     AnimatorAudioStateSetInspector.OnAudioClipListAdd(list, m_MeleeWeapon.RecoilAnimatorAudioStateSet.States, SelectedRecoilAnimatorAudioStateSetIndexKey, target);
 }