/// <summary> /// Applies the information values to the settings. /// </summary> /// <param name="settings">The infomration values to apply.</param> public void Apply(AccessoryMountInfo info) { LocationType = info.LocationType; IgnoreRestrictions = info.IgnoreRestrictions; Mounter = info.Mounter; // Use property. AdditionalCoverage = info.AdditionalCoverage; }
/// <summary> /// Mount the accessory to all outfits, or store it when the it can't be mounted. /// </summary> /// <param name="accessory">The accessory to add.</param> /// <param name="addSettings">The accessory mount settings.</param> /// <param name="mustMount"> /// If true a failure to immediately mount will result in a failure to add. Otherwise /// a failure to immeidately mount will result in the accessory being stored. /// </param> /// <returns> /// The result of the add operation. (Will only ever be 'success' or 'failure'.) /// </returns> public MountResult Add( Accessory accessory, AccessoryAddSettings addSettings, bool mustMount = false) { if (!accessory) { Debug.LogError("Accessory is null."); return(MountResult.FailedOnError); } // Remember: Don't need to check mounter validity. Settings setter does that. for (int i = 0; i < m_Items.Count; i++) { if (m_Items[i].Accessory && m_Items[i].Accessory == accessory) { // This is an error. Must use modify method to change configuration. Debug.LogError("Accessory is already added: " + accessory.name, Owner); return(MountResult.FailedOnError); } } MountResult status = MountResult.FailedOnError; var mountInfo = new AccessoryMountInfo(); mountInfo.Accessory = accessory; mountInfo.Apply(addSettings); if (m_Outfit) { status = MountToOutfit(ref mountInfo); } else if (mustMount) { Debug.LogError("Must succeed failure. No outfit: " + accessory.name, Owner); return(MountResult.FailedOnError); } bool isMounted = (status == MountResult.Success); if (!isMounted) { if (mustMount) { Debug.LogErrorFormat(Owner, "Must succeed failure. Failed to mount to outfit: Accessory: {0}, Status: {1}", accessory.name, status); return(MountResult.FailedOnError); } StoreAccessory(ref mountInfo); } LinkAccessory(mountInfo); return(isMounted ? MountResult.Success : MountResult.Stored); }
/// <summary> /// Attempts to mount the accessory to the current outfit and updates its information. /// (The outfit must be non-null!) /// </summary> private MountResult MountToOutfit(ref AccessoryMountInfo mountInfo) { var status = m_Outfit.Mount(mountInfo.Accessory, mountInfo.LocationType, mountInfo.IgnoreRestrictions, mountInfo.Mounter, mountInfo.AdditionalCoverage); if (status == MountResult.Success) { mountInfo.Outfit = Outfit; } return(status); }
/// <summary> /// Attempts to mount the accessory to the current outfit and updates its information. /// (The outfit must be non-null!) /// </summary> private MountResult MountToOutfit(ref AccessoryMountInfo mountInfo) { // If this is a remount and it fails the accessory will be released, so... var origIgnore = m_IgnoreAccessoryStateEvent; m_IgnoreAccessoryStateEvent = mountInfo.Accessory; var status = m_Outfit.Mount(mountInfo.Accessory, mountInfo.LocationType, mountInfo.IgnoreRestrictions, mountInfo.Mounter, mountInfo.AdditionalCoverage); m_IgnoreAccessoryStateEvent = origIgnore; return(status); }
private bool StoreAccessory(ref AccessoryMountInfo mountInfo) { var origIgnore = m_IgnoreAccessoryStateEvent; m_IgnoreAccessoryStateEvent = mountInfo.Accessory; var accessory = mountInfo.Accessory; accessory.Store(gameObject); accessory.transform.parent = transform; accessory.transform.localPosition = Vector3.zero; accessory.transform.localRotation = Quaternion.identity; m_IgnoreAccessoryStateEvent = origIgnore; return(true); }
private void LinkAccessory(AccessoryMountInfo info) { m_Items.Add(info); info.Accessory.AddObserver(this); }
private bool StoreAccessory(ref AccessoryMountInfo mountInfo) { mountInfo.Outfit = null; return(mountInfo.Accessory.Store(Owner.gameObject)); }