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(); }
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() { 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(); }