49 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| 
 | |
| namespace UnityEngine.XR.Content.Interaction
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Use this object as a generic way to validate if an object can perform some action.
 | |
|     /// The check is done in the <see cref="CanUnlock"/> method.
 | |
|     /// This class is used in combination with a <see cref="Keychain"/> component.
 | |
|     /// </summary>
 | |
|     /// <seealso cref="XRLockSocketInteractor"/>
 | |
|     /// <seealso cref="XRLockGridSocketInteractor"/>
 | |
|     [Serializable]
 | |
|     public class Lock
 | |
|     {
 | |
|         [SerializeField]
 | |
|         [Tooltip("The required keys to unlock this lock" +
 | |
|             "Create new keys by selecting \"Assets/Create/XR/Key Lock System/Key\"")]
 | |
|         List<Key> m_RequiredKeys;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Returns the required keys to unlock this lock.
 | |
|         /// </summary>
 | |
|         public List<Key> requiredKeys => m_RequiredKeys;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Checks if the supplied keychain has all the required keys to open this lock.
 | |
|         /// </summary>
 | |
|         /// <param name="keychain">The keychain to be checked.</param>
 | |
|         /// <returns>True if the supplied keychain has all the required keys; false otherwise.</returns>
 | |
|         public bool CanUnlock(IKeychain keychain)
 | |
|         {
 | |
|             if (keychain == null)
 | |
|                 return m_RequiredKeys.Count == 0;
 | |
| 
 | |
|             foreach (var requiredKey in m_RequiredKeys)
 | |
|             {
 | |
|                 if (requiredKey == null)
 | |
|                     continue;
 | |
| 
 | |
|                 if (!keychain.Contains(requiredKey))
 | |
|                     return false;
 | |
|             }
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| }
 |