public static void Prefix(vp_MuzzleFlash __instance, ref Transform tr) { PlayerManager playerManager = GameManager.GetPlayerManagerComponent(); ModAnimationStateMachine animation = ModComponentUtils.ComponentUtils.GetComponent <ModAnimationStateMachine>(playerManager.m_ItemInHands); if (animation != null) { tr = GameManager.GetVpFPSCamera().CurrentShooter.MuzzleFlash.transform.parent; } }
/// <summary> /// /// </summary> public virtual void DoMuzzleFlashFoldout() { m_MuzzleFlashFoldout = EditorGUILayout.Foldout(m_MuzzleFlashFoldout, "Muzzle Flash"); if (m_MuzzleFlashFoldout) { m_Component.MuzzleFlashPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", m_Component.MuzzleFlashPrefab, typeof(GameObject), false); GUI.enabled = false; GUILayout.Label("Prefab should be a mesh with a Particles/Additive\nshader and a vp_MuzzleFlash script added to it.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; Vector3 currentPosition = m_Component.MuzzleFlashPosition; m_Component.MuzzleFlashPosition = EditorGUILayout.Vector3Field("Position", m_Component.MuzzleFlashPosition); Vector3 currentScale = m_Component.MuzzleFlashScale; m_Component.MuzzleFlashScale = EditorGUILayout.Vector3Field("Scale", m_Component.MuzzleFlashScale); m_Component.MuzzleFlashFadeSpeed = EditorGUILayout.Slider("Fade Speed", m_Component.MuzzleFlashFadeSpeed, 0.001f, 0.2f); m_Component.MuzzleFlashDelay = Mathf.Abs(EditorGUILayout.FloatField("Muzzle Flash Delay", m_Component.MuzzleFlashDelay)); if (!Application.isPlaying) { GUI.enabled = false; } bool currentMuzzleFlashVisible = m_MuzzleFlashVisible; m_MuzzleFlashVisible = EditorGUILayout.Toggle("Show Muzzle Fl.", m_MuzzleFlashVisible); if (Application.isPlaying) { if (m_Component.MuzzleFlashPosition != currentPosition || m_Component.MuzzleFlashScale != currentScale) { m_MuzzleFlashVisible = true; } vp_MuzzleFlash mf = (vp_MuzzleFlash)m_Component.MuzzleFlash.GetComponent("vp_MuzzleFlash"); if (mf != null) { mf.transform.localPosition = currentPosition; mf.transform.localScale = currentScale; mf.ForceShow = currentMuzzleFlashVisible; } GUI.enabled = false; GUILayout.Label("Set Muzzle Flash Z to about 0.5 to bring it into view.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; } else { GUILayout.Label("Muzzle Flash can be shown when the game is playing.", vp_EditorGUIUtility.NoteStyle); } GUI.enabled = true; //m_Component.MuzzleFlashFirstShotMaxDeviation = EditorGUILayout.Slider("1st Shot Max Deviation", m_Component.MuzzleFlashFirstShotMaxDeviation, 0, 180); // NOTE: currently broken vp_EditorGUIUtility.Separator(); } }
/////////////////////////////////////////////////////////// // this method is called to reset various shooter settings, // typically after creating or loading a shooter /////////////////////////////////////////////////////////// public override void Refresh() { // update muzzle flash position, scale and fadespeed from preset if (m_MuzzleFlash != null) { m_MuzzleFlash.transform.localPosition = MuzzleFlashPosition; m_MuzzleFlash.transform.localScale = MuzzleFlashScale; m_MuzzleFlashComponent = (vp_MuzzleFlash)m_MuzzleFlash.GetComponent("vp_MuzzleFlash"); if (m_MuzzleFlashComponent != null) { m_MuzzleFlashComponent.FadeSpeed = MuzzleFlashFadeSpeed; } } }
/// <summary> /// /// </summary> public virtual void DoMuzzleFlashFoldout() { m_MuzzleFlashFoldout = EditorGUILayout.Foldout(m_MuzzleFlashFoldout, "Muzzle Flash"); if (m_MuzzleFlashFoldout) { m_Component.MuzzleFlashPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", m_Component.MuzzleFlashPrefab, typeof(GameObject), false); Vector3 currentPosition = m_Component.MuzzleFlashPosition; m_Component.MuzzleFlashPosition = EditorGUILayout.Vector3Field("Position", m_Component.MuzzleFlashPosition); Vector3 currentScale = m_Component.MuzzleFlashScale; m_Component.MuzzleFlashScale = EditorGUILayout.Vector3Field("Scale", m_Component.MuzzleFlashScale); m_Component.MuzzleFlashFadeSpeed = EditorGUILayout.Slider("Fade Speed", m_Component.MuzzleFlashFadeSpeed, 0.001f, 0.2f); m_Component.MuzzleFlashDelay = Mathf.Abs(EditorGUILayout.FloatField("Muzzle Flash Delay", m_Component.MuzzleFlashDelay)); //m_Component.MuzzleFlashFirstShotMaxDeviation = EditorGUILayout.Slider("1st Shot Max Deviation", m_Component.MuzzleFlashFirstShotMaxDeviation, 0, 180); // TODO: currently broken if (!Application.isPlaying) { GUI.enabled = false; } bool currentMuzzleFlashVisible = m_MuzzleFlashVisible; m_MuzzleFlashVisible = EditorGUILayout.Toggle("Show Muzzle Fl.", m_MuzzleFlashVisible); if (Application.isPlaying) { if (m_Component.MuzzleFlashPosition != currentPosition || m_Component.MuzzleFlashScale != currentScale) { m_MuzzleFlashVisible = true; } vp_MuzzleFlash mf = (vp_MuzzleFlash)m_Component.MuzzleFlash.GetComponent("vp_MuzzleFlash"); if (mf != null) { mf.ForceShow = currentMuzzleFlashVisible; } } else { GUILayout.Label("Muzzle Flash can be shown when the game is playing.", vp_EditorGUIUtility.NoteStyle); } GUI.enabled = true; vp_EditorGUIUtility.Separator(); } }
/////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////// public override void OnInspectorGUI() { GUI.color = Color.white; string objectInfo = m_Component.gameObject.name; if (m_Component.gameObject.active) { GUI.enabled = true; } else { GUI.enabled = false; objectInfo += " (INACTIVE)"; } if (!m_Component.gameObject.active) { GUI.enabled = true; return; } if (Application.isPlaying || m_Component.DefaultState.TextAsset == null) { // --- Projectile --- m_ProjectileFoldout = EditorGUILayout.Foldout(m_ProjectileFoldout, "Projectile"); if (m_ProjectileFoldout) { m_Component.ProjectileFiringRate = EditorGUILayout.FloatField("Firing Rate", m_Component.ProjectileFiringRate); m_Component.ProjectilePrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", m_Component.ProjectilePrefab, typeof(GameObject), false); GUI.enabled = false; GUILayout.Label("Prefab should be a gameobject with a projectile\nlogic script added to it (such as vp_Bullet).", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; m_Component.ProjectileScale = EditorGUILayout.Slider("Scale", m_Component.ProjectileScale, 0, 2); m_Component.ProjectileCount = EditorGUILayout.IntField("Count", m_Component.ProjectileCount); m_Component.ProjectileSpread = EditorGUILayout.Slider("Spread", m_Component.ProjectileSpread, 0, 360); vp_EditorGUIUtility.Separator(); } // --- Motion --- m_MotionFoldout = EditorGUILayout.Foldout(m_MotionFoldout, "Motion"); if (m_MotionFoldout) { m_Component.MotionPositionRecoil = EditorGUILayout.Vector3Field("Position Recoil", m_Component.MotionPositionRecoil); m_Component.MotionRotationRecoil = EditorGUILayout.Vector3Field("Rotation Recoil", m_Component.MotionRotationRecoil); GUI.enabled = false; GUILayout.Label("Recoil forces are added to the secondary\nposition and rotation springs of the weapon.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; m_Component.MotionPositionReset = EditorGUILayout.Slider("Position Reset", m_Component.MotionPositionReset, 0, 1); m_Component.MotionRotationReset = EditorGUILayout.Slider("Rotation Reset", m_Component.MotionRotationReset, 0, 1); GUI.enabled = false; GUILayout.Label("Upon firing, primary position and rotation springs\nwill snap back to their rest state by this factor.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; m_Component.MotionPositionPause = EditorGUILayout.Slider("Position Pause", m_Component.MotionPositionPause, 0, 5); m_Component.MotionRotationPause = EditorGUILayout.Slider("Rotation Pause", m_Component.MotionRotationPause, 0, 5); GUI.enabled = false; GUILayout.Label("Upon firing, primary spring forces will pause and\nease back in over this time interval in seconds.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; m_Component.MotionDryFireRecoil = EditorGUILayout.Slider("Dry Fire Recoil", m_Component.MotionDryFireRecoil, -1, 1); vp_EditorGUIUtility.Separator(); } // --- MuzzleFlash --- m_MuzzleFlashFoldout = EditorGUILayout.Foldout(m_MuzzleFlashFoldout, "Muzzle Flash"); if (m_MuzzleFlashFoldout) { m_Component.MuzzleFlashPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", m_Component.MuzzleFlashPrefab, typeof(GameObject), false); GUI.enabled = false; GUILayout.Label("Prefab should be a mesh with a Particles/Additive\nshader and a vp_MuzzleFlash script added to it.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; Vector3 currentPosition = m_Component.MuzzleFlashPosition; m_Component.MuzzleFlashPosition = EditorGUILayout.Vector3Field("Position", m_Component.MuzzleFlashPosition); Vector3 currentScale = m_Component.MuzzleFlashScale; m_Component.MuzzleFlashScale = EditorGUILayout.Vector3Field("Scale", m_Component.MuzzleFlashScale); m_Component.MuzzleFlashFadeSpeed = EditorGUILayout.Slider("Fade Speed", m_Component.MuzzleFlashFadeSpeed, 0.001f, 0.2f); if (!Application.isPlaying) { GUI.enabled = false; } bool currentMuzzleFlashVisible = m_MuzzleFlashVisible; m_MuzzleFlashVisible = EditorGUILayout.Toggle("Show Muzzle Fl.", m_MuzzleFlashVisible); if (Application.isPlaying) { if (m_Component.MuzzleFlashPosition != currentPosition || m_Component.MuzzleFlashScale != currentScale) { m_MuzzleFlashVisible = true; } vp_MuzzleFlash mf = (vp_MuzzleFlash)m_Component.MuzzleFlash.GetComponent("vp_MuzzleFlash"); if (mf != null) { mf.ForceShow = currentMuzzleFlashVisible; } GUI.enabled = false; GUILayout.Label("Set Muzzle Flash Z to about 0.5 to bring it into view.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; } else { GUILayout.Label("Muzzle Flash can be shown when the game is playing.", vp_EditorGUIUtility.NoteStyle); } GUI.enabled = true; vp_EditorGUIUtility.Separator(); } // --- Shell --- m_ShellFoldout = EditorGUILayout.Foldout(m_ShellFoldout, "Shell"); if (m_ShellFoldout) { m_Component.ShellPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", m_Component.ShellPrefab, typeof(GameObject), false); GUI.enabled = false; GUILayout.Label("Prefab should be a mesh with a collider, a rigidbody\nand a vp_Shell script added to it.", vp_EditorGUIUtility.NoteStyle); GUI.enabled = true; m_Component.ShellScale = EditorGUILayout.Slider("Scale", m_Component.ShellScale, 0, 1); m_Component.ShellEjectPosition = EditorGUILayout.Vector3Field("Eject Position", m_Component.ShellEjectPosition); m_Component.ShellEjectDirection = EditorGUILayout.Vector3Field("Eject Direction", m_Component.ShellEjectDirection); m_Component.ShellEjectVelocity = EditorGUILayout.Slider("Eject Velocity", m_Component.ShellEjectVelocity, 0, 0.5f); m_Component.ShellEjectSpin = EditorGUILayout.Slider("Eject Spin", m_Component.ShellEjectSpin, 0, 1.0f); m_Component.ShellEjectDelay = Mathf.Abs(EditorGUILayout.FloatField("Eject Delay", m_Component.ShellEjectDelay)); vp_EditorGUIUtility.Separator(); } // --- Ammo --- m_AmmoFoldout = EditorGUILayout.Foldout(m_AmmoFoldout, "Ammo"); if (m_AmmoFoldout) { m_Component.AmmoMaxCount = EditorGUILayout.IntField("Max Count", m_Component.AmmoMaxCount); m_Component.AmmoReloadTime = EditorGUILayout.FloatField("Reload Time", m_Component.AmmoReloadTime); //GUI.enabled = false; //GUILayout.Label("Prefab should be a mesh with a collider, a rigidbody\nand a vp_Shell script added to it.", vp_EditorGUIUtility.NoteStyle); //GUI.enabled = true; vp_EditorGUIUtility.Separator(); } // --- Sound --- m_SoundFoldout = EditorGUILayout.Foldout(m_SoundFoldout, "Sound"); if (m_SoundFoldout) { m_Component.SoundFire = (AudioClip)EditorGUILayout.ObjectField("Fire", m_Component.SoundFire, typeof(AudioClip), false); m_Component.SoundDryFire = (AudioClip)EditorGUILayout.ObjectField("Dry Fire", m_Component.SoundDryFire, typeof(AudioClip), false); m_Component.SoundReload = (AudioClip)EditorGUILayout.ObjectField("Reload", m_Component.SoundReload, typeof(AudioClip), false); m_Component.SoundFirePitch = EditorGUILayout.Vector2Field("Fire Pitch (Min:Max)", m_Component.SoundFirePitch); EditorGUILayout.MinMaxSlider(ref m_Component.SoundFirePitch.x, ref m_Component.SoundFirePitch.y, 0.5f, 1.5f); vp_EditorGUIUtility.Separator(); } } else { vp_PresetEditorGUIUtility.DefaultStateOverrideMessage(); } // --- State --- m_StateFoldout = vp_PresetEditorGUIUtility.StateFoldout(m_StateFoldout, m_Component, m_Component.States, m_Persister); // --- Preset --- m_PresetFoldout = vp_PresetEditorGUIUtility.PresetFoldout(m_PresetFoldout, m_Component); // --- Update --- if (GUI.changed) { EditorUtility.SetDirty(target); // update the default state in order not to loose inspector tweaks // due to state switches during runtime if (Application.isPlaying) { m_Component.RefreshDefaultState(); } if (m_Component.Persist) { m_Persister.Persist(); } m_Component.Refresh(); } }
/////////////////////////////////////////////////////////// // this method is called to reset various shooter settings, // typically after creating or loading a shooter /////////////////////////////////////////////////////////// public void RefreshSettings() { // update muzzle flash position, scale and fadespeed from preset if (m_MuzzleFlash != null) { m_MuzzleFlash.transform.localPosition = MuzzleFlashPosition; m_MuzzleFlash.transform.localScale = MuzzleFlashScale; m_MuzzleFlashComponent = (vp_MuzzleFlash)m_MuzzleFlash.GetComponent("vp_MuzzleFlash"); if (m_MuzzleFlashComponent != null) m_MuzzleFlashComponent.FadeSpeed = MuzzleFlashFadeSpeed; } }