/// <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;
 }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 private void LinkAccessory(AccessoryMountInfo info)
 {
     m_Items.Add(info);
     info.Accessory.AddObserver(this);
 }
Ejemplo n.º 7
0
 private bool StoreAccessory(ref AccessoryMountInfo mountInfo)
 {
     mountInfo.Outfit = null;
     return(mountInfo.Accessory.Store(Owner.gameObject));
 }