/// --------------------------------------------- /// Ultimate Character Controller /// Copyright (c) Opsive. All Rights Reserved. /// https://www.opsive.com /// --------------------------------------------- namespace Opsive.UltimateCharacterController.FirstPersonController.Items { using Opsive.UltimateCharacterController.Items.Actions.PerspectiveProperties; using UnityEngine; /// /// Describes any first person perspective dependent properties for the GrenadeItem. /// public class FirstPersonGrenadeItemProperties : FirstPersonThrowableItemProperties, IGrenadeItemPerspectiveProperties { [Tooltip("A reference to the pin attachment transform.")] [SerializeField] protected Transform m_PinAttachmentLocation; [Tooltip("The ID of the pin attachment transform. This field will be used if the value is not -1 and the location is null.")] [SerializeField] protected int m_PinAttachmentLocationID = -1; [Opsive.Shared.Utility.NonSerialized] public Transform PinAttachmentLocation { get { return m_PinAttachmentLocation; } set { m_PinAttachmentLocation = value; } } [Opsive.Shared.Utility.NonSerialized] public int PinAttachmentLocationID { get { return m_PinAttachmentLocationID; } set { m_PinAttachmentLocationID = value; } } /// /// Initialize the default values. /// protected override void Awake() { base.Awake(); // If the ID is not -1 then find the transform that it will attach to. if (m_PinAttachmentLocation == null && m_PinAttachmentLocationID != -1) { var firstPersonObject = GetComponent().Object; var objectIdentifiers = firstPersonObject.GetComponentsInChildren(); if (objectIdentifiers.Length > 0) { for (int i = 0; i < objectIdentifiers.Length; ++i) { if (objectIdentifiers[i].ID == m_PinAttachmentLocationID) { m_PinAttachmentLocation = objectIdentifiers[i].transform; break; } } // If no IDs match then log a warning and assign the first transform. if (m_PinAttachmentLocation == null) { Debug.LogWarning("Warning: Unable to find the first person pin attachment ObjectIdentifier with the ID " + m_PinAttachmentLocationID + " for item " + name + "."); m_PinAttachmentLocation = objectIdentifiers[0].transform; } } } } } }