private static void DrawProperties() { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(5); GUILayout.Label("Base Options", UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); if (properties != null) { properties.SetAIType((AIProperties.AIType)EditorGUILayout.EnumPopup(ContentProperties.Type, properties.GetAIType())); properties.SetName(EditorGUILayout.DelayedTextField(ContentProperties.Name, properties.GetName())); if (properties.GetName() == "") { properties.SetDefaultName(); } properties.SetModel((GameObject)EditorGUILayout.ObjectField(ContentProperties.Model, properties.GetModel(), typeof(GameObject), true)); if (properties.GetModel() == null) { UEditorHelpBoxMessages.Error("AI model cannot be empty!", "Add AI model."); } properties.SetController((AnimatorController)EditorGUILayout.ObjectField(ContentProperties.Controller, properties.GetController(), typeof(AnimatorController), true)); properties.DefaultPreset(EditorGUILayout.Toggle(ContentProperties.DefaultPreset, properties.DefaultPreset())); if (properties.DefaultPreset()) { properties.SetDefaultPreset(); } EditorGUI.BeginDisabledGroup(properties.DefaultPreset()); LayerMask targetMask = EditorGUILayout.MaskField(ContentProperties.Tagrets, InternalEditorUtility.LayerMaskToConcatenatedLayersMask(properties.GetTargets()), InternalEditorUtility.layers); properties.SetTargets(InternalEditorUtility.ConcatenatedLayersMaskToLayerMask(targetMask)); LayerMask obstacleMask = EditorGUILayout.MaskField(ContentProperties.Obstacles, InternalEditorUtility.LayerMaskToConcatenatedLayersMask(properties.GetObstacles()), InternalEditorUtility.layers); properties.SetObstacles(InternalEditorUtility.ConcatenatedLayersMaskToLayerMask(obstacleMask)); EditorGUI.EndDisabledGroup(); GUILayout.Space(5); UEditor.HorizontalLine(); GUILayout.Space(5); EditorGUI.BeginDisabledGroup(!properties.GetModel()); if (UEditor.Button("Create", "Right", GUILayout.Width(70))) { _AI = CreateAI(properties); } if (_AI != null && delay.WaitForSeconds()) { if (UDisplayDialogs.Message("Create Successful", "AI was created on scene!\nSetup AI components before start play.", "Select", "Ok")) { Selection.activeGameObject = _AI; } _AI = null; } EditorGUI.EndDisabledGroup(); } else { UEditorHelpBoxMessages.Error("Properties not loaded...", "Try to reload UProject Manager window.", true); } GUILayout.Space(5); GUILayout.EndVertical(); }
private static void PhysicsBulletGUI() { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(5); GUILayout.Label(ContentProperties.BaseOptions, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); physicsBulletProperties.SetBulletType((PhysicsBullet.BulletType)EditorGUILayout.EnumPopup(ContentProperties.BulletType, physicsBulletProperties.GetBulletType())); physicsBulletProperties.SetBullet(UEditor.ObjectField <GameObject>(new GUIContent("Bullet", "Bullet gameobject."), physicsBulletProperties.GetBullet(), true)); if (physicsBulletProperties.GetBullet() == null) { UEditorHelpBoxMessages.Error("Bullet object cannot be empty!", "Add bullet gameobject."); } physicsBulletProperties.SetModel(EditorGUILayout.TextField(ContentProperties.Model, physicsBulletProperties.GetModel())); physicsBulletProperties.SetDamage(EditorGUILayout.IntField(ContentProperties.Damage, physicsBulletProperties.GetDamage())); physicsBulletProperties.SetDelay(EditorGUILayout.FloatField(ContentProperties.Delay, physicsBulletProperties.GetDelay())); if (physicsBulletProperties.GetBulletType() == PhysicsBullet.BulletType.Standard) { physicsBulletProperties.SetVariance(EditorGUILayout.FloatField(ContentProperties.Variance, physicsBulletProperties.GetVariance())); physicsBulletProperties.SetNumberBullet(EditorGUILayout.IntField(ContentProperties.NumberBullet, physicsBulletProperties.GetNumberBullet())); } else if (physicsBulletProperties.GetBulletType() == PhysicsBullet.BulletType.Rocket) { physicsBulletProperties.SetExplosionRadius(EditorGUILayout.FloatField(ContentProperties.B_ExplosionRadius, physicsBulletProperties.GetExplosionRadius())); physicsBulletProperties.SetExplosionPower(EditorGUILayout.FloatField(ContentProperties.B_ExplosionPower, physicsBulletProperties.GetExplosionPower())); physicsBulletProperties.SetExplosionEffect(UEditor.ObjectField <ParticleSystem>(ContentProperties.B_ExplosionEffect, physicsBulletProperties.GetExplosionEffect(), true)); physicsBulletProperties.SetExplosionSound(UEditor.ObjectField <AudioClip>(ContentProperties.ExplosionSound, physicsBulletProperties.GetExplosionSound(), true)); } physicsBulletProperties.SetDecalProperties(UEditor.ObjectField <DecalProperties>(ContentProperties.DecalProperties, physicsBulletProperties.GetDecalProperties(), false)); GUILayout.Space(5); UEditor.HorizontalLine(); GUILayout.Space(5); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(physicsBulletProperties.GetModel()) || physicsBulletProperties.GetBullet() == null); if (UEditor.Button("Create", "Right", GUILayout.Width(70))) { createdObject = CreatePhysicsBullet(physicsBulletProperties); } EditorGUI.EndDisabledGroup(); if (createdObject != null && editorDelay.WaitForSeconds()) { if (UDisplayDialogs.Message("Create Successful", "Physics bullet was created on scene!\nSetup bullet components before start play.", "Select", "Ok")) { Selection.activeGameObject = createdObject; } createdObject = null; } GUILayout.Space(5); GUILayout.EndVertical(); }
private static void DrawFPWeaponGUI() { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(5); GUILayout.Label(ContentProperties.BaseOptions, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); properties.SetName(EditorGUILayout.TextField(ContentProperties.WeaponName, properties.GetName())); properties.SetWeaponType((WeaponProperties.Type)EditorGUILayout.EnumPopup(ContentProperties.WeaponType, properties.GetWeaponType())); properties.SetWeapon(UEditor.ObjectField <GameObject>(ContentProperties.WeaponObject, properties.GetWeapon(), true)); if (properties.GetWeapon() == null) { UEditorHelpBoxMessages.Error("Weapon model cannot be empty!", "Add weapon model."); } properties.SetWeaponID(UEditor.ObjectField <WeaponID>(ContentProperties.WeaponID, properties.GetWeaponID(), true)); properties.SetController(UEditor.ObjectField <RuntimeAnimatorController>(ContentProperties.WeaponAnimator, properties.GetController(), false)); GUILayout.Space(10); additionalComponentsRL.DoLayoutList(); GUILayout.Space(5); UEditor.HorizontalLine(); GUILayout.Space(5); EditorGUI.BeginDisabledGroup(!properties.NameIsValid() || properties.GetWeapon() == null); if (UEditor.Button("Create", "Right", GUILayout.Width(70))) { weapon = CreateFPWeapon(properties); } EditorGUI.EndDisabledGroup(); if (weapon != null && delay.WaitForSeconds()) { if (UDisplayDialogs.Message("Create Successful", "Weapon was created on scene!\nSetup weapon components before start play.", "Select", "Ok")) { Selection.activeGameObject = weapon; } weapon = null; } GUILayout.Space(5); GUILayout.EndVertical(); }
private static void GrenadeGUI() { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(5); GUILayout.Label(ContentProperties.BaseOptions, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); grenadeProperties.SetGrenadeObject((GameObject)EditorGUILayout.ObjectField(new GUIContent("Grenade", "Grenade gameobject."), grenadeProperties.GetGrenadeObject(), typeof(GameObject), true)); if (grenadeProperties.GetGrenadeObject() == null) { UEditorHelpBoxMessages.Error("Grenade object cannot be empty!", "Add grenade gameobject."); } grenadeProperties.SetModel(EditorGUILayout.TextField(ContentProperties.Model, grenadeProperties.GetModel())); grenadeProperties.SetRadius(EditorGUILayout.FloatField(ContentProperties.G_ExplosionRadius, grenadeProperties.GetRadius())); grenadeProperties.SetDelay(EditorGUILayout.FloatField(ContentProperties.Delay, grenadeProperties.GetDelay())); grenadeProperties.SetExplosionEffect((ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.G_ExplosionEffect, grenadeProperties.GetExplosionEffect(), typeof(ParticleSystem), true)); grenadeProperties.SetExplosionSound((AudioClip)EditorGUILayout.ObjectField(ContentProperties.ExplosionSound, grenadeProperties.GetExplosionSound(), typeof(AudioClip), true)); grenadeProperties.SetExplosionProperties((ExplosionProperties)EditorGUILayout.ObjectField(ContentProperties.ExplosionProperties, grenadeProperties.GetExplosionProperties(), typeof(ExplosionProperties), true)); grenadeProperties.SetDecalProperties((DecalProperties)EditorGUILayout.ObjectField(ContentProperties.DecalProperties, grenadeProperties.GetDecalProperties(), typeof(DecalProperties), true)); GUILayout.Space(5); UEditor.HorizontalLine(); GUILayout.Space(5); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(grenadeProperties.GetModel()) || grenadeProperties.GetGrenadeObject() == null); if (UEditor.Button("Create", "Right", GUILayout.Width(70))) { createdObject = CreateGreanade(grenadeProperties); } EditorGUI.EndDisabledGroup(); if (createdObject != null && editorDelay.WaitForSeconds()) { if (UDisplayDialogs.Message("Create Successful", "Greanade was created on scene!\nSetup grenade components before start play.", "Select", "Ok")) { Selection.activeGameObject = createdObject; } createdObject = null; } GUILayout.Space(5); GUILayout.EndVertical(); }
public override void BaseGUI() { BeginBox(); GUILayout.Label(ContentProperties.ShootProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); instance.SetFirePoint((Transform)EditorGUILayout.ObjectField(ContentProperties.ShootPoint, instance.GetFirePoint(), typeof(Transform), true)); instance.SetBullet((RayBullet)EditorGUILayout.ObjectField(ContentProperties.RayBullet, instance.GetBullet(), typeof(RayBullet), false)); instance.SetRange(EditorGUILayout.FloatField(ContentProperties.ShootRange, instance.GetRange())); instance.SetImpulse(EditorGUILayout.FloatField(ContentProperties.ShootImpulse, instance.GetImpulse())); instance.SetDelay(EditorGUILayout.FloatField(ContentProperties.Delay, instance.GetDelay())); GUILayout.Space(10); GUILayout.Label(ContentProperties.FireEffectProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); if (instance.GetMuzzleFlash() != null) { instance.SetMuzzleFlash((ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.MuzzleFlash, instance.GetMuzzleFlash(), typeof(ParticleSystem), true)); } else { GUILayout.BeginHorizontal(); instance.SetMuzzleFlash((ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.MuzzleFlash, instance.GetMuzzleFlash(), typeof(ParticleSystem), true)); if (SearchButton()) { ParticleSystem muzzleFlash = UEditorInternal.FindMuzzleFlash(instance.transform); if (muzzleFlash != null) { instance.SetMuzzleFlash(muzzleFlash); } else { UDisplayDialogs.Message("Searching", "Muzzle Flash not found, try find it manually."); } } GUILayout.EndHorizontal(); UEditorHelpBoxMessages.Tip("Muzzle flash is empty!", "Muzzle flash won't play."); } if (instance.GetCartridgeEjection() != null) { instance.SetCartridgeEjection((ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.CartridgeEjection, instance.GetCartridgeEjection(), typeof(ParticleSystem), true)); } else { GUILayout.BeginHorizontal(); instance.SetCartridgeEjection((ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.CartridgeEjection, instance.GetCartridgeEjection(), typeof(ParticleSystem), true)); if (SearchButton()) { ParticleSystem cartridgeEjection = UEditorInternal.FindCartridgeEjection(instance.transform); if (cartridgeEjection != null) { instance.SetCartridgeEjection(cartridgeEjection); } else { UDisplayDialogs.Message("Searching", "Cartridge Ejection not found, try find it manually."); } } GUILayout.EndHorizontal(); UEditorHelpBoxMessages.Tip("Cartridge ejection is empty!", "Cartridge ejection won't play."); } GUILayout.Space(10); GUILayout.Label(ContentProperties.SoundProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); IncreaseIndentLevel(); BeginSubBox(); GUILayout.Space(3); shootSoundsFoldout = EditorGUILayout.Foldout(shootSoundsFoldout, ContentProperties.ShootSound, true); if (shootSoundsFoldout) { if (instance.GetFireSounds() == null || instance.GetFireSounds().Length == 0) { UEditorHelpBoxMessages.Tip("Fire sounds is empty!", "Add new fire sound by click on [Add] button.", true); } else { for (int i = 0; i < instance.GetFireSounds().Length; i++) { GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label("Clip " + (i + 1), GUILayout.Width(35)); instance.SetFireSound(i, (AudioClip)EditorGUILayout.ObjectField(instance.GetFireSound(i), typeof(AudioClip), true)); if (GUILayout.Button("", GUI.skin.GetStyle("OL Minus"), GUILayout.Width(20))) { fireSounds.DeleteArrayElementAtIndex(i); } GUILayout.Space(3); GUILayout.EndHorizontal(); } } GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add ")) { fireSounds.arraySize++; } GUILayout.Space(3); GUILayout.EndHorizontal(); GUILayout.Space(5); } GUILayout.Space(3); EndSubBox(); DecreaseIndentLevel(); EndBox(); }
private static void DrawPickableWeaponGUI() { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(5); GUILayout.Label(ContentProperties.BaseOptions, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); properties.SetName(EditorGUILayout.TextField(ContentProperties.Name, properties.GetName())); properties.SetProcessingType((PickableItem.PickupType)EditorGUILayout.EnumPopup(ContentProperties.PickupType, properties.GetProcessingType())); properties.SetObjectType((PickableItem.ItemType)EditorGUILayout.EnumPopup(ContentProperties.ObjecftType, properties.GetObjectType())); if (properties.GetProcessingType() == PickableItem.PickupType.ByKey) { properties.SetPickUpKey((KeyCode)EditorGUILayout.EnumPopup(ContentProperties.PickupKey, properties.GetPickUpKey())); } GUILayout.Space(10); GUILayout.Label(ContentProperties.ItemProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); properties.SetClearWeapon(UEditor.ObjectField <GameObject>(ContentProperties.Item, properties.GetClearWeapon(), true)); if (properties.GetClearWeapon() == null) { UEditorHelpBoxMessages.Error("Item cannot be empty!", "Add item game object!"); } switch (properties.GetObjectType()) { case PickableItem.ItemType.Weapon: properties.SetWeaponID(UEditor.ObjectField <WeaponID>(ContentProperties.Weapon, properties.GetWeaponID(), true)); properties.AutoActivate(EditorGUILayout.Toggle(ContentProperties.AutoActivate, properties.AutoActivate())); break; case PickableItem.ItemType.Ammo: properties.SetWeaponID(UEditor.ObjectField <WeaponID>(new GUIContent("Target Weapon", "Target weapon for ammo."), properties.GetWeaponID(), true)); properties.SetValue(EditorGUILayout.IntField(new GUIContent("Bullets", "How many bullet add in weapon ammo."), properties.GetValue())); break; case PickableItem.ItemType.HealthBox: properties.SetValue(EditorGUILayout.IntField(new GUIContent("Health Point", "How many health point add in target."), properties.GetValue())); break; } if (!properties.DestroyAfterUse()) { float refReusableDelay = properties.GetReusableDelay(); bool refIsReusable = properties.IsReusable(); UEditor.HiddenFloatField(ContentProperties.ReusableDelay, ContentProperties.IsReusable, ref refReusableDelay, ref refIsReusable); properties.SetReusableDelay(refReusableDelay); properties.IsReusable(refIsReusable); } else { EditorGUI.BeginDisabledGroup(true); properties.IsReusable(EditorGUILayout.Toggle(ContentProperties.IsReusable, false)); EditorGUI.EndDisabledGroup(); } if (!properties.IsReusable()) { properties.DestroyAfterUse(EditorGUILayout.Toggle(ContentProperties.DestroyAfterUse, properties.DestroyAfterUse())); } else { EditorGUI.BeginDisabledGroup(true); properties.DestroyAfterUse(EditorGUILayout.Toggle(ContentProperties.DestroyAfterUse, false)); EditorGUI.EndDisabledGroup(); } GUILayout.Space(10); GUILayout.Label(ContentProperties.UI, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); if (properties.GetWeaponID() != null) { GUILayout.BeginHorizontal(); properties.SetPickUpMessage(EditorGUILayout.TextField(ContentProperties.PickUpMessage, properties.GetPickUpMessage())); if (UEditor.GenerateButton()) { properties.SetPickUpMessage("HOLD [{0}] TO PICKUP \"{1}\""); } GUILayout.EndHorizontal(); } else { properties.SetPickUpMessage(EditorGUILayout.TextField(ContentProperties.PickUpMessage, properties.GetPickUpMessage())); } if (properties.GetWeapon() != null) { GUILayout.BeginHorizontal(); properties.SetReplaceMessage(EditorGUILayout.TextField(ContentProperties.ReplaceMessage, properties.GetReplaceMessage())); if (UEditor.GenerateButton()) { properties.SetPickUpMessage("HOLD [{0}] TO CHANGE \"{1}\""); } GUILayout.EndHorizontal(); } else { properties.SetReplaceMessage(EditorGUILayout.TextField(ContentProperties.ReplaceMessage, properties.GetReplaceMessage())); } GUILayout.Space(10); GUILayout.Label(ContentProperties.Effects, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); AudioClip se = properties.GetSoundEffect(); UEditor.ObjectHiddenField <AudioClip>(ContentProperties.P_SoundEffect, ContentProperties.P_SoundEffect, ref se, ref useSoundEffect); properties.SetSoundEffect(useSoundEffect ? se : null); GUILayout.Space(5); UEditor.HorizontalLine(); GUILayout.Space(5); EditorGUI.BeginDisabledGroup(!properties.NameIsValid() || properties.GetClearWeapon() == null); if (UEditor.Button("Create", "Right", GUILayout.Width(70))) { weapon = CreatePickableWeapon(properties); } EditorGUI.EndDisabledGroup(); if (weapon != null && delay.WaitForSeconds()) { if (UDisplayDialogs.Message("Create Successful", "Pickable weapon was created on scene!\nSetup weapon components before start play.", "Select", "Ok")) { Selection.activeGameObject = weapon; } weapon = null; } GUILayout.Space(5); GUILayout.EndVertical(); }
private static void WeaponIDsListGUI() { if (weaponIDs != null && weaponIDs.Count > 0) { GUILayout.BeginVertical(EditorStyles.helpBox); GUILayout.Space(3); for (int i = 0; i < weaponIDs.Count; i++) { if (i >= weaponIDs.Count) { break; } Object _weaponID = weaponIDs[i]; if (_weaponID == null) { OnEnable(); continue; } GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label(_weaponID.name, EditorStyles.boldLabel); GUI.color = new Color32(70, 150, 255, 255); if (GUILayout.Button("Open", "ButtonLeft", GUILayout.Width(70))) { Selection.activeObject = _weaponID; } #if UNITY_EDITOR_OSX EditorGUI.BeginDisabledGroup(true); #endif GUI.color = new Color32(70, 220, 70, 255); if (GUILayout.Button("Duplicate", "ButtonMid", GUILayout.Width(70))) { string path = AssetDatabase.GetAssetPath(_weaponID); string name = _weaponID.name; path = path.Replace(_weaponID.name + ".asset", ""); AssetDatabase.CopyAsset(AssetDatabase.GetAssetPath(_weaponID), path + name + ".asset"); AssetDatabase.Refresh(); OnEnable(); } #if UNITY_EDITOR_OSX EditorGUI.EndDisabledGroup(); #endif GUI.color = new Color32(255, 55, 55, 255); if (GUILayout.Button("Delete", "ButtonRight", GUILayout.Width(70))) { if (UDisplayDialogs.Confirmation("Are you really want to delete \"" + _weaponID.name + "\" asset?")) { string path = AssetDatabase.GetAssetPath(_weaponID); AssetDatabase.DeleteAsset(path); AssetDatabase.Refresh(); OnEnable(); break; } } GUI.color = Color.white; GUILayout.Space(3); GUILayout.EndHorizontal(); if (weaponIDs.Count > 1 && i < weaponIDs.Count - 1) { GUILayout.Space(3); UEditor.HorizontalLine(); GUILayout.Space(3); } else { GUILayout.Space(3); } } GUILayout.Space(3); GUILayout.EndVertical(); } else { UEditorHelpBoxMessages.Message("WeaponID's not found...\n" + "Create new property or reload properties", MessageType.Warning); } GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Refresh Assets ", GUILayout.Width(105.5f))) { weaponIDs = UEditorInternal.FindAssetsByType <WeaponID>(); } GUILayout.Space(8); GUILayout.EndHorizontal(); }
public override void BaseGUI() { GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.Space(5); animatorController = ObjectField <RuntimeAnimatorController>(ContentProperties.Animator, animatorController, true); if (animatorController != null) { clips = animatorController.animationClips; } GUILayout.Space(5); GUILayout.EndHorizontal(); GUILayout.Space(5); IncreaseIndentLevel(); for (int i = 0, length = instance.GetLength(); i < length; i++) { BeginBox(); AnimationEventProperty animationEventProperty = instance.GetProperty(i); bool foldout = propertiesFoldout[i]; string name = animationEventProperty.GetAnimationName().AddSpaces(); AnimationClip clip = null; if (animatorController != null && clips != null) { for (int c = 0, c_length = clips.Length; c < c_length; c++) { AnimationClip _clip = clips[c]; if (_clip.name == animationEventProperty.GetAnimationName()) { clip = _clip; break; } } } Rect animationRemoveButtonRect = GUILayoutUtility.GetRect(0, 0); animationRemoveButtonRect.x = animationRemoveButtonRect.width + 5; animationRemoveButtonRect.y += 1; animationRemoveButtonRect.width = 16.5f; animationRemoveButtonRect.height = 16.5f; if (GUI.Button(animationRemoveButtonRect, GUIContent.none, GUI.skin.GetStyle("OL Minus"))) { properties.DeleteArrayElementAtIndex(i); propertiesFoldout.RemoveAt(i); eventsFoldout.Remove(i); break; } foldout = EditorGUILayout.Foldout(foldout, name, true); if (foldout) { GUILayout.Space(3); if (animatorController != null && clips != null) { GUILayout.BeginHorizontal(); animationEventProperty.SetAnimationName(EditorGUILayout.TextField(ContentProperties.AnimationName, animationEventProperty.GetAnimationName())); if (ListButton()) { GenericMenu menu = new GenericMenu(); for (int c = 0, c_length = clips.Length; c < c_length; c++) { AnimationClip _clip = clips[c]; string sendMessage = i + "," + _clip.name; menu.AddItem(new GUIContent(_clip.name), _clip.name == animationEventProperty.GetAnimationName(), (_object) => { string message = (string)_object as string; string[] parseMessage = message.Split(','); int index = int.Parse(parseMessage[0]); AnimationEventProperty _animationEventProperty = instance.GetProperty(index); _animationEventProperty.SetAnimationName(parseMessage[1]); instance.SetProperty(index, _animationEventProperty); }, sendMessage); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); } else { animationEventProperty.SetAnimationName(EditorGUILayout.TextField(ContentProperties.AnimationName, animationEventProperty.GetAnimationName())); } AnimationEventProperty.EventProperty[] eventProperties = animationEventProperty.GetEventProperties(); SerializedProperty serializedEventProperties = properties.GetArrayElementAtIndex(i).FindPropertyRelative("eventProperties"); for (int j = 0, _length = eventProperties.Length; j < _length; j++) { if (!eventsFoldout.ContainsKey(i) || eventsFoldout[i].Count == 0 || j >= eventsFoldout[i].Count) { break; } BeginSubBox(); bool eventFoldout = eventsFoldout[i][j]; Rect eventRemoveButtonRect = GUILayoutUtility.GetRect(0, 0); eventRemoveButtonRect.x = eventRemoveButtonRect.width + 15; eventRemoveButtonRect.y += 1; eventRemoveButtonRect.width = 16.5f; eventRemoveButtonRect.height = 16.5f; if (GUI.Button(eventRemoveButtonRect, GUIContent.none, GUI.skin.GetStyle("OL Minus"))) { serializedEventProperties.DeleteArrayElementAtIndex(j); eventsFoldout[i].RemoveAt(j); break; } eventFoldout = EditorGUILayout.Foldout(eventFoldout, "Event " + (j + 1), true); if (eventFoldout) { GUILayout.Space(3); AnimationEventProperty.EventProperty eventProperty = eventProperties[j]; if (animatorController != null && clips != null && clip != null) { eventProperty.SetAnimationTime(EditorGUILayout.Slider(ContentProperties.AnimationTime, eventProperty.GetAnimationTime(), 0, clip.length)); } else { eventProperty.SetAnimationTime(EditorGUILayout.FloatField(ContentProperties.AnimationTime, eventProperty.GetAnimationTime())); } GUILayout.Space(10); GUILayout.Label(ContentProperties.SoundEffect, UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); eventProperty.SetSoundEffect(ObjectField <AudioClip>(ContentProperties.SoundEffect, eventProperty.GetSoundEffect(), false)); GUILayout.Space(10); GUILayout.Label(ContentProperties.CameraShake, UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); ShakeCamera.ShakeProperties shakeProperties = eventProperty.GetShakeProperties(); shakeProperties.SetTarget((ShakeCamera.ShakeEvent.Target)EditorGUILayout.EnumPopup("Target", shakeProperties.GetTarget())); EditorGUI.BeginDisabledGroup(shakeProperties.GetTarget() == ShakeCamera.ShakeEvent.Target.None); shakeProperties.SetAmplitude(EditorGUILayout.FloatField("Amplitude", shakeProperties.GetAmplitude())); shakeProperties.SetFrequency(EditorGUILayout.FloatField("Frequency", shakeProperties.GetFrequency())); shakeProperties.SetDuration(EditorGUILayout.FloatField("Duration", shakeProperties.GetDuration())); shakeProperties.SetBlendOverLifetime(EditorGUILayout.CurveField("Blend Over Life time", shakeProperties.GetBlendOverLifetime())); EditorGUI.EndDisabledGroup(); eventProperty.SetShakeProperties(shakeProperties); eventProperties[j] = eventProperty; GUILayout.Space(3); } eventsFoldout[i][j] = eventFoldout; EndSubBox(); } animationEventProperty.SetEventProperties(eventProperties); GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); bool clipContains = (animatorController != null && clips != null && clip != null && (clip.events != null && clip.events.Length > 0)); if (GUILayout.Button(" Add Event ", clipContains ? "ButtonLeft" : "Button")) { serializedEventProperties.arraySize++; eventsFoldout[i].Add(false); break; } if (clipContains) { if (GUILayout.Button(new GUIContent(" Parse Event ", "Current clip contains event.\nPress \"Parse events\" to read and add this events here."), "ButtonRight")) { AnimationEvent[] unityAnimationEvents = clip.events; for (int e = 0, e_length = unityAnimationEvents.Length; e < e_length; e++) { serializedEventProperties.arraySize++; eventsFoldout[i].Add(false); AnimationEvent unityAnimationEvent = unityAnimationEvents[e]; SerializedProperty animationTime = serializedEventProperties.GetArrayElementAtIndex(serializedEventProperties.arraySize - 1).FindPropertyRelative("animationTime"); SerializedProperty soundEffect = serializedEventProperties.GetArrayElementAtIndex(serializedEventProperties.arraySize - 1).FindPropertyRelative("soundEffect"); soundEffect.objectReferenceValue = unityAnimationEvent.objectReferenceParameter; animationTime.floatValue = unityAnimationEvent.time; } break; } } GUILayout.EndHorizontal(); GUILayout.Space(3); } propertiesFoldout[i] = foldout; instance.SetProperty(i, animationEventProperty); EndBox(); } DecreaseIndentLevel(); GUILayout.Space(3); if (instance.GetLength() == 0) { UEditorHelpBoxMessages.Tip("Properties is empty!", "Add new properties."); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Animation", "ButtonLeft", GUILayout.Width(120))) { properties.arraySize++; properties.GetArrayElementAtIndex(properties.arraySize - 1).FindPropertyRelative("animationName").stringValue = "Empty " + properties.arraySize; properties.GetArrayElementAtIndex(properties.arraySize - 1).FindPropertyRelative("eventProperties").arraySize = 0; propertiesFoldout.Add(false); eventsFoldout.Add(properties.arraySize - 1, new List <bool>()); } if (GUILayout.Button("Clear All Animation", "ButtonRight", GUILayout.Width(120))) { if (UDisplayDialogs.Confirmation(string.Format("Are you sure want clear camera shake properites:[{0}]", properties.arraySize))) { properties.arraySize = 0; propertiesFoldout.Clear(); eventsFoldout.Clear(); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }
public override void BaseGUI() { BeginBox(); GUILayout.Label(ContentProperties.ShootProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); instance.SetMode((WeaponShootingSystem.Mode)EditorGUILayout.EnumPopup(ContentProperties.ShootingMode, instance.GetMode())); instance.SetBulletType((WeaponShootingSystem.BulletType)EditorGUILayout.EnumPopup(ContentProperties.BulletType, instance.GetBulletType())); instance.SetFirePoint((Transform)EditorGUILayout.ObjectField(ContentProperties.ShootPoint, instance.GetFirePoint(), typeof(Transform), true)); switch (instance.GetBulletType()) { case WeaponShootingSystem.BulletType.RayBullet: instance.SetRayBullet((RayBullet)EditorGUILayout.ObjectField(ContentProperties.RayBullet, instance.GetRayBullet(), typeof(RayBullet), false)); instance.SetFireRange(EditorGUILayout.FloatField(ContentProperties.ShootRange, instance.GetFireRange())); break; case WeaponShootingSystem.BulletType.PhysicsBullet: instance.SetPhysicsBullet((PhysicsBullet)EditorGUILayout.ObjectField(ContentProperties.BulletType, instance.GetPhysicsBullet(), typeof(PhysicsBullet), true)); break; } instance.SetFireImpulse(EditorGUILayout.FloatField(ContentProperties.ShootImpulse, instance.GetFireImpulse())); instance.SetDelay(EditorGUILayout.FloatField(ContentProperties.Delay, instance.GetDelay())); if (instance.GetMode() == WeaponShootingSystem.Mode.Queue) { instance.SetFixedQueueCount(EditorGUILayout.IntField(ContentProperties.FixedQueueCount, instance.GetFixedQueueCount())); } GUILayout.Space(10); GUILayout.Label(ContentProperties.FireEffectProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); WeaponShootingSystem.FireEffectProperties fireEffectProperties = instance.GetFireEffects(); if (fireEffectProperties.muzzleFlash != null) { fireEffectProperties.muzzleFlash = (ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.MuzzleFlash, fireEffectProperties.muzzleFlash, typeof(ParticleSystem), true); } else { GUILayout.BeginHorizontal(); fireEffectProperties.muzzleFlash = (ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.MuzzleFlash, fireEffectProperties.muzzleFlash, typeof(ParticleSystem), true); if (SearchButton()) { ParticleSystem muzzleFlash = UEditorInternal.FindMuzzleFlash(instance.transform); if (muzzleFlash != null) { fireEffectProperties.muzzleFlash = muzzleFlash; } else { UDisplayDialogs.Message("Searching", "Muzzle Flash not found, try find it manually."); } } GUILayout.EndHorizontal(); } if (fireEffectProperties.cartridgeEjection != null) { fireEffectProperties.cartridgeEjection = (ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.CartridgeEjection, fireEffectProperties.cartridgeEjection, typeof(ParticleSystem), true); } else { GUILayout.BeginHorizontal(); fireEffectProperties.cartridgeEjection = (ParticleSystem)EditorGUILayout.ObjectField(ContentProperties.CartridgeEjection, fireEffectProperties.cartridgeEjection, typeof(ParticleSystem), true); if (SearchButton()) { ParticleSystem cartridgeEjection = UEditorInternal.FindCartridgeEjection(instance.transform); if (cartridgeEjection != null) { fireEffectProperties.cartridgeEjection = cartridgeEjection; } else { UDisplayDialogs.Message("Searching", "Cartridge Ejection not found, try find it manually."); } } GUILayout.EndHorizontal(); } instance.SetFireEffects(fireEffectProperties); GUILayout.Space(10); GUILayout.Label(ContentProperties.SoundProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); BeginSubBox(); GUILayout.Space(3); IncreaseIndentLevel(); shootSoundsFoldout = EditorGUILayout.Foldout(shootSoundsFoldout, ContentProperties.ShootSound, true); if (shootSoundsFoldout) { if (instance.GetSoundProperties().GetFireSounds() == null || instance.GetSoundProperties().GetFireSoundsCount() == 0) { UEditorHelpBoxMessages.Tip("Fire sounds is empty!", "Add new fire sound by click on [Add] button.", true); } else { for (int i = 0; i < instance.GetSoundProperties().GetFireSoundsCount(); i++) { GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label("Clip " + (i + 1), GUILayout.Width(35)); instance.GetSoundProperties().SetFireSound(i, (AudioClip)EditorGUILayout.ObjectField(instance.GetSoundProperties().GetFireSound(i), typeof(AudioClip), true)); if (GUILayout.Button("", GUI.skin.GetStyle("OL Minus"), GUILayout.Width(20))) { shootSounds.DeleteArrayElementAtIndex(i); } GUILayout.Space(3); GUILayout.EndHorizontal(); } } GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add ")) { shootSounds.arraySize++; } GUILayout.Space(3); GUILayout.EndHorizontal(); } GUILayout.Space(3); EndSubBox(); BeginSubBox(); GUILayout.Space(3); emptySoundsFoldout = EditorGUILayout.Foldout(emptySoundsFoldout, ContentProperties.EmptySound, true); if (emptySoundsFoldout) { if (instance.GetSoundProperties().GetEmptySounds() == null || instance.GetSoundProperties().GetEmptySoundsCount() == 0) { UEditorHelpBoxMessages.Tip("Empty sounds is empty!", "Add new empty sound by click on [Add] button.", true); } else { for (int i = 0; i < instance.GetSoundProperties().GetEmptySoundsCount(); i++) { GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label("Clip " + (i + 1), GUILayout.Width(35)); instance.GetSoundProperties().SetEmptySound(i, (AudioClip)EditorGUILayout.ObjectField(instance.GetSoundProperties().GetEmptySound(i), typeof(AudioClip), true)); if (GUILayout.Button("", GUI.skin.GetStyle("OL Minus"), GUILayout.Width(20))) { emptySounds.DeleteArrayElementAtIndex(i); } GUILayout.Space(3); GUILayout.EndHorizontal(); } } GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add ")) { emptySounds.arraySize++; } GUILayout.Space(3); GUILayout.EndHorizontal(); } GUILayout.Space(3); EndSubBox(); GUILayout.Space(10); GUILayout.Label(ContentProperties.AdditionalSystem, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); BeginSubBox(); GUILayout.Space(3); weaponSpreadSystemFoldout = EditorGUILayout.Foldout(weaponSpreadSystemFoldout, ContentProperties.WeaponSpreadProperties, true); if (weaponSpreadSystemFoldout) { instance.SetSpreadProperties((SpreadProperties)EditorGUILayout.ObjectField(ContentProperties.SpreadProperties, instance.GetSpreadProperties(), typeof(SpreadProperties), true)); if (instance.GetSpreadProperties() == null) { UEditorHelpBoxMessages.Message("Spread properties is empty!\nWeapon won't have a bullet spread and camera shake while shoothing!", MessageType.Warning, true); } } GUILayout.Space(3); EndSubBox(); DecreaseIndentLevel(); EndBox(); }
public override void BaseGUI() { if (instance == null) { return; } for (int i = 0; i < instance.GetLength(); i++) { BeginBox(); IncreaseIndentLevel(); ClimbstepProperty property = instance.GetProperty(i); SerializedProperty serializedProperty = properties.GetArrayElementAtIndex(i); string propertyName = "New Property " + (i + 1); if (property.GetPhysicMaterial() != null) { propertyName = property.GetPhysicMaterial().name; } Rect removeButtonRect = GUILayoutUtility.GetRect(0, 0); removeButtonRect.x = removeButtonRect.width + 5; removeButtonRect.y += 1; removeButtonRect.width = 16.5f; removeButtonRect.height = 16.5f; if (GUI.Button(removeButtonRect, GUIContent.none, GUI.skin.GetStyle("OL Minus"))) { properties.DeleteArrayElementAtIndex(i); propertiesFoldout.RemoveAt(i); break; } propertiesFoldout[i] = EditorGUILayout.Foldout(propertiesFoldout[i], propertyName, true); if (propertiesFoldout[i]) { GUILayout.Space(3); GUILayout.Label("Surface", UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); property.SetPhysicMaterial((PhysicMaterial)EditorGUILayout.ObjectField("Physic Material", property.GetPhysicMaterial(), typeof(PhysicMaterial), true)); if (property.GetPhysicMaterial() == null) { UEditorHelpBoxMessages.Tip("Add Physic Material for handle surface.", "For create Physic Material press right mouse button Create > Physic Material.", true); } GUILayout.Space(10); GUILayout.Label("Sounds", UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); BeginSubBox(); GUILayout.Space(3); climbFoldout = EditorGUILayout.Foldout(climbFoldout, "Climb ounds", true); if (climbFoldout) { if (property.GetSoundsLength() == 0) { UEditorHelpBoxMessages.Tip("Climb sounds is empty!", "Add new climb sound by click on [Add] button.", true); } for (int s = 0; s < property.GetSoundsLength(); s++) { string clipName = property.GetSound(i) != null?property.GetSound(i).name : "Clip " + (i + 1); GUILayout.BeginHorizontal(); GUILayout.Space(3); GUILayout.Label(clipName, GUILayout.Width(35)); property.SetSound(i, (AudioClip)EditorGUILayout.ObjectField(property.GetSound(i), typeof(AudioClip), true)); if (GUILayout.Button("", GUI.skin.GetStyle("OL Minus"), GUILayout.Width(20))) { serializedProperty.FindPropertyRelative("sounds").DeleteArrayElementAtIndex(s); } GUILayout.Space(3); GUILayout.EndHorizontal(); } GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add ")) { serializedProperty.FindPropertyRelative("sounds").arraySize++; } GUILayout.EndHorizontal(); } GUILayout.Space(3); EndSubBox(); GUILayout.Space(3); instance.SetProperty(i, property); } DecreaseIndentLevel(); EndBox(); } if (instance.GetLength() == 0) { UEditorHelpBoxMessages.Tip("Properties is empty!", "Add new properties."); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(" Add Property ", "ButtonLeft", GUILayout.Width(120))) { properties.arraySize++; propertiesFoldout.Add(false); } if (GUILayout.Button(" Clear All Properties ", "ButtonRight", GUILayout.Width(120))) { if (UDisplayDialogs.Confirmation("Are you really want to remove all properties from this Climbstep Properties asset?")) { properties.ClearArray(); } } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); }
public override void BaseGUI() { BeginBox(); GUILayout.Label(ContentProperties.MainProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); instance.SetPlayer((Transform)EditorGUILayout.ObjectField(ContentProperties.Player, instance.GetPlayer(), typeof(Transform), true)); if (instance.GetPlayer() == null) { if (MiniButton("Try find Camera")) { Transform player = UEditorInternal.FindPlayer(); if (player != null) { instance.SetPlayer(player); } else { UDisplayDialogs.Message("Searching", "Player not found, try find it manually."); } } UEditorHelpBoxMessages.PlayerError(); } instance.SetOriginalYAxis(EditorGUILayout.Slider(ContentProperties.OriginalYAxis, instance.GetOriginalYAxis(), -360.0f, 360.0f)); instance.SetAnimationEventProperties(ObjectField <AnimationEventProperties>(ContentProperties.EventProperties, instance.GetAnimationEventProperties(), true)); GUILayout.Space(10); GUILayout.Label("Animator", UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); if (clips != null && clips.Length > 0) { GUILayout.BeginHorizontal(); instance.SetTakeTime(EditorGUILayout.FloatField(ContentProperties.TakeTime, instance.GetTakeTime())); if (ListButton()) { GenericMenu menu = new GenericMenu(); for (int i = 0, length = clips.Length; i < length; i++) { AnimationClip clip = clips[i]; menu.AddItem(new GUIContent(clip.name), UMathf.Approximately(clip.length, instance.GetTakeTime(), 0.01f), (x) => { instance.SetTakeTime(UMathf.AllocatePart((float)x)); }, clip.length); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); instance.SetPutAwayTime(EditorGUILayout.FloatField(ContentProperties.PutAwayTime, instance.GetPutAwayTime())); if (ListButton()) { GenericMenu menu = new GenericMenu(); for (int i = 0, length = clips.Length; i < length; i++) { AnimationClip clip = clips[i]; menu.AddItem(new GUIContent(clip.name), UMathf.Approximately(clip.length, instance.GetPutAwayTime(), 0.01f), (x) => { instance.SetPutAwayTime(UMathf.AllocatePart((float)x)); }, clip.length); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); } else { instance.SetTakeTime(EditorGUILayout.FloatField(ContentProperties.TakeTime, instance.GetTakeTime())); instance.SetPutAwayTime(EditorGUILayout.FloatField(ContentProperties.PutAwayTime, instance.GetPutAwayTime())); } GUILayout.Space(10); GUILayout.Label("Vector Animations", UEditorStyles.SectionHeaderLabel); GUILayout.Space(5); BeginSubBox(); EditorGUI.BeginDisabledGroup(!instance.UseRotationSway()); IncreaseIndentLevel(); rotationSwayFoldout = EditorGUILayout.Foldout(rotationSwayFoldout, ContentProperties.RotationSway, true); if (rotationSwayFoldout) { instance.SetPositionSensitivity(EditorGUILayout.FloatField(ContentProperties.PositionSensitivity, instance.GetPositionSensitivity())); instance.SetMaxPositionSensitivity(EditorGUILayout.FloatField(ContentProperties.MaxPositionSensitivity, instance.GetMaxPositionSensitivity())); instance.SetSmoothPosition(EditorGUILayout.FloatField(ContentProperties.SmoothPosition, instance.GetSmoothPosition())); instance.SetSmoothRotation(EditorGUILayout.FloatField(ContentProperties.SmoothRotation, instance.GetSmoothRotation())); instance.SetRotationSensitivity(EditorGUILayout.FloatField(ContentProperties.RotationSensitivity, instance.GetRotationSensitivity())); } string rotationSwayToggleName = instance.UseRotationSway() ? "Rotation Sway Enabled" : "Rotation Sway Disabled"; EditorGUI.EndDisabledGroup(); if (rotationSwayFoldout && !instance.UseRotationSway()) { Rect notificationBackgroungRect = GUILayoutUtility.GetLastRect(); Rect notificationTextRect = GUILayoutUtility.GetLastRect(); notificationBackgroungRect.y -= 75; notificationBackgroungRect.height = 93.5f; notificationTextRect.y -= 58.5f; notificationTextRect.height = 60; Notification("Rotation Sway Disabled", notificationBackgroungRect, notificationTextRect); } instance.RotationSwayActive(EditorGUILayout.Toggle(rotationSwayToggleName, instance.UseRotationSway())); EndSubBox(); BeginSubBox(); EditorGUI.BeginDisabledGroup(!instance.UseJumpSway()); jumpSwayFoldout = EditorGUILayout.Foldout(jumpSwayFoldout, ContentProperties.JumpSway, true); if (jumpSwayFoldout) { instance.SetMaxYPosJump(EditorGUILayout.FloatField(ContentProperties.MaxYPosJump, instance.GetMaxYPosJump())); instance.SetSmoothJump(EditorGUILayout.FloatField(ContentProperties.SmoothJump, instance.GetSmoothJump())); instance.SetSmoothLand(EditorGUILayout.FloatField(ContentProperties.SmoothLand, instance.GetSmoothLand())); } string jumpSwayToggleName = instance.UseJumpSway() ? "Jump Sway Enabled" : "Jump Sway Disabled"; EditorGUI.EndDisabledGroup(); if (jumpSwayFoldout && !instance.UseJumpSway()) { Rect notificationBackgroungRect = GUILayoutUtility.GetLastRect(); Rect notificationTextRect = GUILayoutUtility.GetLastRect(); notificationBackgroungRect.y -= 39; notificationBackgroungRect.height = 58; notificationTextRect.y -= 36.5f; notificationTextRect.height = 50; Notification("Jump Sway Disabled", notificationBackgroungRect, notificationTextRect); } instance.JumpSwayActive(EditorGUILayout.Toggle(jumpSwayToggleName, instance.UseJumpSway())); EndSubBox(); DecreaseIndentLevel(); EndBox(); if (GUI.changed) { clips = UEditorInternal.GetAllClips(instance.GetComponent <Animator>()); } }
public override void BaseGUI() { BeginBox(); GUILayout.Label(ContentProperties.BaseSettings, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); if (instance.GetFPCamera() != null) { instance.SetFPCamera((Transform)EditorGUILayout.ObjectField(ContentProperties.Camera, instance.GetFPCamera(), typeof(Transform), true)); } else { GUILayout.BeginHorizontal(); instance.SetFPCamera((Transform)EditorGUILayout.ObjectField(ContentProperties.Camera, instance.GetFPCamera(), typeof(Transform), true)); if (SearchButton()) { Camera camera = UEditorInternal.FindFPCamera(instance.transform); if (camera != null) { instance.SetFPCamera(camera.transform); } else { UDisplayDialogs.Message("Searching", "Camera not found, try find it manually."); } } GUILayout.EndHorizontal(); UEditorHelpBoxMessages.CameraError(); } instance.SetSwitchMode((SwitchWeaponMode)EditorGUILayout.EnumPopup(ContentProperties.Switch, instance.GetSwitchMode())); instance.AllowIdenticalWeapons(EditorGUILayout.Toggle(ContentProperties.AllowIdenticalWeapons, instance.AllowIdenticalWeapons())); EndBox(); BeginBox(3); IncreaseIndentLevel(); weaponsEditFoldout = EditorGUILayout.Foldout(weaponsEditFoldout, ContentProperties.Weapons, true); if (weaponsEditFoldout) { GUILayout.Space(5); GUILayout.BeginVertical(); int pos = -1; for (int i = 0; i < groupsProperty.arraySize; i++) { SerializedProperty inventoryGroup = groupsProperty.GetArrayElementAtIndex(i); GUILayout.Space(5); GUILayout.BeginVertical(GUI.skin.window); Rect groupNameRect = GUILayoutUtility.GetRect(0, 0); groupNameRect.y -= 19; groupNameRect.height = 15; if (editingGroups) { DecreaseIndentLevel(); EditorGUI.PropertyField(groupNameRect, inventoryGroup.FindPropertyRelative("name"), new GUIContent("Group Name")); IncreaseIndentLevel(); } else { GUI.Label(groupNameRect, inventoryGroup.FindPropertyRelative("name").stringValue, UEditorStyles.SectionHeaderLabel); } SerializedProperty inventorySlots = inventoryGroup.FindPropertyRelative("inventorySlots"); if (inventorySlots.arraySize == 0) { UEditorHelpBoxMessages.Message("Group is empty, add weapon!", MessageType.Warning, true); } for (int j = 0; j < inventorySlots.arraySize; j++) { pos++; SerializedProperty slot = inventorySlots.GetArrayElementAtIndex(j); InventorySlot _slot = instance.GetGroups() [i].GetInventorySlot(j); string slotName = _slot.GetWeapon() != null?_slot.GetWeapon().name : "Empty Slot " + (j + 1); GUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(_slot.GetWeapon() == null || _slot.GetKey() == KeyCode.None); radioToggles[pos] = EditorGUILayout.Toggle(radioToggles[pos], EditorStyles.radioButton, GUILayout.Width(15)); if (radioToggles[pos]) { int except = !(_slot.GetKey() == KeyCode.None) ? pos : -1; SetToggleValues(except, false); savedGroupIndex = i; savedSlotIndex = j; } EditorGUI.EndDisabledGroup(); GUILayout.Label(slotName, GUILayout.Width(70)); EditorGUILayout.PropertyField(slot.FindPropertyRelative("key"), GUIContent.none, GUILayout.MaxWidth(110)); EditorGUILayout.PropertyField(slot.FindPropertyRelative("weapon"), GUIContent.none); GUILayout.BeginVertical(); GUILayout.Space(0.7f); if (GUILayout.Button("", GUI.skin.GetStyle("OL Minus"), GUILayout.Width(20))) { inventorySlots.DeleteArrayElementAtIndex(j); if (radioToggles[pos]) { savedGroupIndex = -1; savedSlotIndex = -1; } radioToggles.RemoveAt(j); pos--; break; } GUILayout.EndVertical(); GUILayout.EndHorizontal(); } GUILayout.Space(3); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button(ContentProperties.AddWeaponButton, editingGroups ? EditorStyles.miniButtonLeft : EditorStyles.miniButton, GUILayout.Height(17))) { inventorySlots.arraySize++; radioToggles.Add(false); } if (editingGroups && GUILayout.Button(ContentProperties.RemoveGroupButton, EditorStyles.miniButtonRight, GUILayout.Height(17))) { groupsProperty.DeleteArrayElementAtIndex(i); if (savedGroupIndex == i) { savedGroupIndex = -1; savedSlotIndex = -1; } radioToggles.Clear(); if (editingGroups && groupsProperty.arraySize == 0) { editingGroups = false; } radioToggles = CreateRadioToggles(); } GUILayout.EndHorizontal(); GUILayout.Space(2); GUILayout.EndVertical(); GUILayout.Space(5); } if (groupsProperty.arraySize == 0) { UEditorHelpBoxMessages.Tip("Inventory is empty!", "Add new group and weapon.", true); } GUILayout.BeginHorizontal(); if ((savedGroupIndex != -1 && savedSlotIndex != -1) && GUILayout.Button("Disable Start Weapon", EditorStyles.miniButton, GUILayout.Height(17))) { savedGroupIndex = -1; savedSlotIndex = -1; } GUILayout.FlexibleSpace(); if (GUILayout.Button(ContentProperties.AddGroupButton, groupsProperty.arraySize > 0 ? EditorStyles.miniButtonLeft : EditorStyles.miniButton, GUILayout.Height(17))) { if (groupsProperty != null) { instance.GetGroups().Add(new InventoryGroup("New Group " + instance.GetGroups().Count, new List <InventorySlot>())); } } if (editingGroups && GUILayout.Button(ContentProperties.ApplyChangesButton, EditorStyles.miniButtonRight, GUILayout.Height(17))) { editingGroups = false; } else if (!editingGroups && groupsProperty.arraySize > 0 && GUILayout.Button(ContentProperties.EditGroupButton, EditorStyles.miniButtonRight, GUILayout.Height(17))) { editingGroups = true; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); ApplySavedToggle(); } DecreaseIndentLevel(); EndBox(); }
public override void BaseGUI() { BeginBox(); GUILayout.Space(5); GUILayout.Label(ContentProperties.BaseSettings, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); if (instance.GetAttackPoint() != null) { instance.SetAttackPoint((Transform)EditorGUILayout.ObjectField(ContentProperties.AttackPoint, instance.GetAttackPoint(), typeof(Transform), true)); } else { GUILayout.BeginHorizontal(); instance.SetAttackPoint((Transform)EditorGUILayout.ObjectField(ContentProperties.AttackPoint, instance.GetAttackPoint(), typeof(Transform), true)); if (SearchButton()) { Transform attackPoint = UEditorInternal.FindFirePoint(instance.transform.root); if (attackPoint != null) { instance.SetAttackPoint(attackPoint); } else { UDisplayDialogs.Message("Searching", "Attack point not found, try find it manually."); } } GUILayout.EndHorizontal(); UEditorHelpBoxMessages.Error("Attack point cannot be empty!", "Add attack point manually or try to use auto search button."); } instance.SetDecalProperties((DecalProperties)EditorGUILayout.ObjectField(ContentProperties.DecalProperties, instance.GetDecalProperties(), typeof(DecalProperties), true)); if (instance.GetDecalProperties() == null) { UEditorHelpBoxMessages.Tip("Decals won't be created.", "For create Decal Properties asset press right mouse button on Project window and select Create > Unreal FPS > Weapon > Decal Properties."); } GUILayout.Space(10); GUILayout.Label(ContentProperties.NormalAttackProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); WeaponMeleeSystem.AttackProperties normalAttackProperties = instance.GetNormalAttackProperties(); normalAttackProperties.range = EditorGUILayout.FloatField(ContentProperties.Range, normalAttackProperties.range); normalAttackProperties.impulse = EditorGUILayout.FloatField(ContentProperties.Impulse, normalAttackProperties.impulse); normalAttackProperties.damage = EditorGUILayout.IntField(ContentProperties.Damage, normalAttackProperties.damage); normalAttackProperties.hitTime = EditorGUILayout.Slider(ContentProperties.HitTime, normalAttackProperties.hitTime, 0, normalAttackProperties.delay); normalAttackProperties.delay = EditorGUILayout.FloatField(ContentProperties.Delay, normalAttackProperties.delay); GUILayout.Space(10); GUILayout.Label(ContentProperties.SpecialAttackProperties, UEditorStyles.SectionHeaderLabel); GUILayout.Space(7); WeaponMeleeSystem.AttackProperties specialAttackProperties = instance.GetSpecialAttackProperties(); instance.SetSpecialAttackKey((KeyCode)EditorGUILayout.EnumPopup(ContentProperties.SpecialKey, instance.GetSpecialAttackKey())); specialAttackProperties.range = EditorGUILayout.FloatField(ContentProperties.Range, specialAttackProperties.range); specialAttackProperties.impulse = EditorGUILayout.FloatField(ContentProperties.Impulse, specialAttackProperties.impulse); specialAttackProperties.damage = EditorGUILayout.IntField(ContentProperties.Damage, specialAttackProperties.damage); specialAttackProperties.hitTime = EditorGUILayout.Slider(ContentProperties.HitTime, specialAttackProperties.hitTime, 0, specialAttackProperties.delay); specialAttackProperties.delay = EditorGUILayout.FloatField(ContentProperties.Delay, specialAttackProperties.delay); instance.SetAttackProperties(normalAttackProperties, specialAttackProperties); EndBox(); }