public sealed override MountResult Mount(Accessory accessory, MountPointType locationType, bool ignoreRestrictions, IAccessoryMounter priorityMounter, BodyCoverage additionalCoverage) { // Error checks are optimized with the assumption that the mount will succeed. Remounts to the same // location are allowed. (Mounter may have changed or may have special remount behavior.) var location = GetMountPoint(locationType); if (!location) { Release(accessory); return(MountResult.NoMountPoint); } else if (location.IsBlocked) { Release(accessory); return(MountResult.LocationBlocked); } if (!ignoreRestrictions) { if (AccessoriesLimited && !accessory.IgnoreLimited) { Release(accessory); return(MountResult.OutfitIsLimited); } var currentCoverage = CurrentCoverage; if (m_Accessories.Contains(accessory)) { currentCoverage &= ~accessory.CurrentCoverage; } if (((accessory.GetCoverageFor(location) | additionalCoverage) & currentCoverage) != 0) { Release(accessory); return(MountResult.CoverageBlocked); } } if (priorityMounter != null && LizUtil.IsUnityDestroyed(priorityMounter)) { Debug.LogError("The priority mounter is a reference to a destroyed object.", this); Release(accessory); return(MountResult.FailedOnError); } if (!accessory.Mount(location, gameObject, priorityMounter, additionalCoverage)) { Release(accessory); return(MountResult.RejectedByAccessory); } LinkAccessory(accessory); Observers.SendAccessoryMount(this, accessory); return(MountResult.Success); }
public sealed override MountResult Mount(Accessory accessory, MountPointType locationType, bool ignoreRestrictions, IAccessoryMounter priorityMounter, BodyCoverage additionalCoverage) { // Error checks are optimized with the assumption that the mount will succeed. if (m_Accessories.Contains(accessory)) { Debug.LogWarning("Attempted to attach same accessory more than once. Attempt ignored: " + accessory.name); // It is a success since the accessory is mounted. But no event. return(MountResult.Success); } if (!ignoreRestrictions) { if (AccessoriesLimited && !accessory.IgnoreLimited) { return(MountResult.OutfitIsLimited); } if (((accessory.GetCoverageFor(locationType) | additionalCoverage) & CurrentCoverage) != 0) { return(MountResult.CoverageBlocked); } } var location = GetMountPoint(locationType); if (!location) { return(MountResult.NoMountPoint); } else if (location.IsBlocked) { return(MountResult.LocationBlocked); } if (priorityMounter != null && LizittUtil.IsUnityDestroyed(priorityMounter)) { Debug.LogError("The priority mounter is a reference to a destroyed object.", this); return(MountResult.FailedOnError); } if (!accessory.Mount(location, gameObject, priorityMounter, additionalCoverage)) { return(MountResult.RejectedByAccessory); } LinkAccessory(accessory); Observers.SendMount(this, accessory); return(MountResult.Success); }