/// <summary> /// re-caches all of the standard UFPS local player components /// </summary> private static void RefreshPlayerComponents() { m_FPCamera = null; m_FPController = null; m_FPInput = null; m_FPDamageHandler = null; m_FPWeaponHandler = null; m_Inventory = null; m_Respawner = null; m_FPBodyAnimator = null; m_RagdollHandler = null; m_FootFXHandler = null; if (m_FPEventHandler == null) { return; } m_FPCamera = m_FPEventHandler.GetComponentInChildren <vp_FPCamera>(); m_FPController = m_FPEventHandler.GetComponentInChildren <vp_FPController>(); m_FPInput = m_FPEventHandler.GetComponentInChildren <vp_FPInput>(); m_FPDamageHandler = m_FPEventHandler.GetComponentInChildren <vp_FPPlayerDamageHandler>(); m_FPWeaponHandler = m_FPEventHandler.GetComponentInChildren <vp_FPWeaponHandler>(); m_Inventory = m_FPEventHandler.GetComponentInChildren <vp_PlayerInventory>(); m_Respawner = m_FPEventHandler.GetComponentInChildren <vp_PlayerRespawner>(); m_FPBodyAnimator = m_FPEventHandler.GetComponentInChildren <vp_FPBodyAnimator>(); m_RagdollHandler = m_FPEventHandler.GetComponentInChildren <vp_RagdollHandler>(); m_FootFXHandler = m_FPEventHandler.GetComponentInChildren <vp_PlayerFootFXHandler>(); }
protected virtual void Awake() { vp_FPWeaponHandler.cs = this; if (base.GetComponent <vp_FPWeapon>()) { Debug.LogError("Error: (" + this + ") Hierarchy error. This component should sit above any vp_FPWeapons in the gameobject hierarchy."); return; } this.m_Player = (vp_FPPlayerEventHandler)base.transform.root.GetComponentInChildren(typeof(vp_FPPlayerEventHandler)); vp_FPWeapon[] componentsInChildren = base.GetComponentsInChildren <vp_FPWeapon>(true); for (int i = 0; i < componentsInChildren.Length; i++) { vp_FPWeapon item = componentsInChildren[i]; this.m_Weapons.Insert(this.m_Weapons.Count, item); } if (this.m_Weapons.Count == 0) { Debug.LogError("Error: (" + this + ") Hierarchy error. This component must be added to a gameobject with vp_FPWeapon components in child gameobjects."); return; } IComparer @object = new vp_FPWeaponHandler.WeaponComparer(); this.m_Weapons.Sort(new Comparison <vp_FPWeapon>(@object.Compare)); this.StartWeapon = Mathf.Clamp(this.StartWeapon, 0, this.m_Weapons.Count); }
/// </summary> /// /// </summary> public vp_FPSDemoManager(GameObject player) { Player = player; Controller = Player.GetComponent<vp_FPController>(); Camera = Player.GetComponentInChildren<vp_FPCamera>(); WeaponHandler = Player.GetComponentInChildren<vp_FPWeaponHandler>(); PlayerEventHandler = (vp_FPPlayerEventHandler)Player.GetComponentInChildren(typeof(vp_FPPlayerEventHandler)); Input = Player.GetComponent<vp_FPInput>(); Earthquake = (vp_Earthquake)Component.FindObjectOfType(typeof(vp_Earthquake)); // on small screen resolutions the editor preview screenshot // panel is minimized by default, otherwise expanded if (Screen.width < 1024) EditorPreviewSectionExpanded = false; }
/// </summary> /// /// </summary> public vp_FPSDemoManager(GameObject player) { Player = player; Controller = Player.GetComponent <vp_FPController>(); Camera = Player.GetComponentInChildren <vp_FPCamera>(); WeaponHandler = Player.GetComponentInChildren <vp_FPWeaponHandler>(); PlayerEventHandler = (vp_FPPlayerEventHandler)Player.GetComponentInChildren(typeof(vp_FPPlayerEventHandler)); Input = Player.GetComponent <vp_FPInput>(); Earthquake = (vp_Earthquake)Component.FindObjectOfType(typeof(vp_Earthquake)); // on small screen resolutions the editor preview screenshot // panel is minimized by default, otherwise expanded if (Screen.width < 1024) { EditorPreviewSectionExpanded = false; } }
/// <summary> /// creates a copy of the currently selected UFPS player gameobject /// - stripped of all its 1st person functionality. the new object /// can be used for AI or multiplayer remote players /// </summary> public static void Generate() { GameObject target = Selection.activeObject as GameObject; if ((target == null) || (!vp_Utility.IsActive(target)) || (target.GetComponentInChildren <vp_FPController>() == null) && (target.GetComponentInChildren <vp_FPCamera>() == null)) { EditorUtility.DisplayDialog("Failed to run wizard", "Please select the main gameobject of a 1st person player in the Hierarchy view (make sure it's active) and try again.", "OK"); return; } if (!EditorUtility.DisplayDialog("Generate Remote Player?", "This wizard will create a copy of the selected player object - stripped of all its 1st person functionality. This new object can be used for AI or multiplayer remote players.\n\nNOTE: Only default UFPS classes will be processed.", "OK", "Cancel")) { return; } DecideCopyStates(target); string name = target.name + "(Remote)"; // generate - and operate upon - a copy of the target target = (GameObject)GameObject.Instantiate(target); target.name = target.name.Replace("(Clone)", ""); try { // layer likely should no longer be 'LocalPlayer', so default to 'RemotePlayer' target.gameObject.layer = vp_Layer.RemotePlayer; // convert weapons ConvertWeaponsTo3rdPerson(target); // find any charactercontroller and convert it into a capsulecollider with a rigidbody CharacterController ch = target.GetComponentInChildren <CharacterController>(); if (ch != null) { if (ch.transform.GetComponent <Rigidbody>() == null) { CapsuleCollider ca = ch.gameObject.AddComponent <CapsuleCollider>(); ca.radius = ch.radius; ca.height = ch.height; ca.center = ca.center; Rigidbody r = ch.gameObject.AddComponent <Rigidbody>(); r.useGravity = false; r.isKinematic = true; r.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; } } // convert 1st person controller vp_FPController fpController = target.GetComponent <vp_FPController>(); if (fpController != null) { vp_CapsuleController cController = target.AddComponent <vp_CapsuleController>(); vp_EditorUtility.CopyValuesFromDerivedComponent(fpController, cController, true, false, null); // TEST: fpcontroller is not derived from capsulecontroller! see note in 'GenerateStatesAndPresetsFromDerivedComponent' if (m_CopyStates && !string.IsNullOrEmpty(m_StatePath)) { vp_EditorUtility.GenerateStatesAndPresetsFromDerivedComponent(fpController, cController, m_StatePath); } } // convert weapon handler vp_FPWeaponHandler fpWHandler = target.GetComponent <vp_FPWeaponHandler>(); if (fpWHandler != null) { vp_WeaponHandler wHandler = target.AddComponent <vp_WeaponHandler>(); vp_EditorUtility.CopyValuesFromDerivedComponent(fpWHandler, wHandler, true, false, null); } // convert damage handler vp_FPPlayerDamageHandler fpDHandler = target.GetComponent <vp_FPPlayerDamageHandler>(); if (fpDHandler != null) { vp_PlayerDamageHandler dHandler = target.AddComponent <vp_PlayerDamageHandler>(); vp_EditorUtility.CopyValuesFromDerivedComponent(fpDHandler, dHandler, true, true, null); } // convert event handler vp_FPPlayerEventHandler fpEHandler = target.GetComponent <vp_FPPlayerEventHandler>(); if (fpEHandler != null) { vp_PlayerEventHandler eHandler = target.AddComponent <vp_PlayerEventHandler>(); vp_EditorUtility.CopyValuesFromDerivedComponent(fpEHandler, eHandler, true, false, null); } // convert body animator vp_FPBodyAnimator fpBAnimator = target.GetComponentInChildren <vp_FPBodyAnimator>(); if (fpBAnimator != null) { vp_BodyAnimator bAnimator = fpBAnimator.gameObject.AddComponent <vp_BodyAnimator>(); vp_EditorUtility.CopyValuesFromDerivedComponent(fpBAnimator, bAnimator, true, true, null); } // delete 'remoteplayer-illegal' components DeleteComponentsOfType(target.transform, typeof(vp_FPCamera)); // these first due to dependencies DeleteComponentsOfType(target.transform, typeof(vp_FPController)); // these first due to dependencies DeleteComponentsOfTypes(target.transform, new System.Type[] { typeof(Camera), typeof(AudioListener), typeof(vp_FPInput), typeof(vp_SimpleCrosshair), typeof(vp_FootstepManager), typeof(vp_FPInteractManager), typeof(vp_SimpleHUD), typeof(vp_PainHUD), typeof(vp_FPEarthquake), typeof(CharacterController), typeof(vp_FPWeaponHandler), typeof(vp_FPPlayerDamageHandler), typeof(vp_FPPlayerEventHandler), typeof(vp_FPBodyAnimator) }); Transform weaponCamera = vp_Utility.GetTransformByNameInChildren(target.transform, "WeaponCamera", true); if (weaponCamera != null) { GameObject.DestroyImmediate(weaponCamera.gameObject); } target.name = name; } catch (System.Exception e) { Debug.Log(e); target.name = target.name + " (CONVERSION FAILED - see error log)"; } }