Equipment.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value.
  3. using UnityEngine;
  4. namespace Animancer.Samples.StateMachines
  5. {
  6. /// <summary>Manages the items equipped by a <see cref="Character"/>.</summary>
  7. ///
  8. /// <remarks>
  9. /// <strong>Sample:</strong>
  10. /// <see href="https://kybernetik.com.au/animancer/docs/samples/fsm/weapons">
  11. /// Weapons</see>
  12. /// </remarks>
  13. ///
  14. /// https://kybernetik.com.au/animancer/api/Animancer.Samples.StateMachines/Equipment
  15. ///
  16. [AddComponentMenu(Strings.SamplesMenuPrefix + "Weapons - Equipment")]
  17. [AnimancerHelpUrl(typeof(Equipment))]
  18. public class Equipment : MonoBehaviour
  19. {
  20. /************************************************************************************************************************/
  21. [SerializeField] private Transform _WeaponHolder;
  22. [SerializeField] private Weapon _Weapon;
  23. /************************************************************************************************************************/
  24. public Weapon Weapon
  25. {
  26. get => _Weapon;
  27. set
  28. {
  29. DetachWeapon();
  30. _Weapon = value;
  31. AttachWeapon();
  32. }
  33. }
  34. /************************************************************************************************************************/
  35. protected virtual void Awake()
  36. {
  37. AttachWeapon();
  38. }
  39. /************************************************************************************************************************/
  40. private void AttachWeapon()
  41. {
  42. if (_Weapon == null)
  43. return;
  44. Transform transform = _Weapon.transform;
  45. transform.parent = _WeaponHolder;
  46. transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
  47. transform.localScale = Vector3.one;
  48. _Weapon.gameObject.SetActive(true);
  49. }
  50. /************************************************************************************************************************/
  51. private void DetachWeapon()
  52. {
  53. if (_Weapon == null)
  54. return;
  55. _Weapon.transform.parent = transform;
  56. _Weapon.gameObject.SetActive(false);
  57. }
  58. /************************************************************************************************************************/
  59. }
  60. }