diff --git a/Assets/Scripts/AI.meta b/Assets/Scripts/Vendor.meta similarity index 77% rename from Assets/Scripts/AI.meta rename to Assets/Scripts/Vendor.meta index f737c18f..f866818c 100644 --- a/Assets/Scripts/AI.meta +++ b/Assets/Scripts/Vendor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 384dd01a37ee6714eb5781af9707b3fa +guid: c073c0a5e5875cc418aaa82ab5c4bd57 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/Vendor/VendorController.cs b/Assets/Scripts/Vendor/VendorController.cs new file mode 100644 index 00000000..32c1dac9 --- /dev/null +++ b/Assets/Scripts/Vendor/VendorController.cs @@ -0,0 +1,84 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class VendorController : Interactable +{ + [SerializeField] private VendorData vendorData; + + public VendorData VendorData => vendorData; + + [Header("Events:")] + [SerializeField] private GameEvent_VendorData onVendorInteracted; + [SerializeField] private GameEvent onVendorReleased; + + [Header("Listeners:")] + [SerializeField] private GameEventListener onVendorUIClosed; + + bool isUIOpen = false; + + Transform storedTransform; + + protected override void Awake() + { + base.Awake(); + + onVendorUIClosed.Response.AddListener(CloseInteraction); + } + + public override void Interact(bool melee) + { + base.Interact(melee); + + if (!melee) return; + + isUIOpen = true; + onVendorInteracted.Raise(vendorData); + } + + public override void OnFocused(Transform playerTransform, PlayerController playerController) + { + base.OnFocused(playerTransform, playerController); + storedTransform = playerTransform; + } + + protected override void Update() + { + if (isFocus && !hasInteracted) + { + distance = Vector3.Distance(player.position, interactionTransform.position); + + if (distance <= radius) + { + Interact(true); + hasInteracted = true; + Debug.Log($"vendor {this.transform.name} Interacted-Closeup"); + } + else if (interactableWithRange) + { + if (distance <= rangedRadius) + { + Interact(false); + hasInteracted = true; + } + } + } + else if (isUIOpen) + { + distance = Vector3.Distance(storedTransform.position, interactionTransform.position); + + if (distance >= radius) + { + OnDeFocus(); + onVendorReleased.Raise(); + Debug.Log($"vendor {this.transform.name} released"); + } + } + } + + private void CloseInteraction() + { + isUIOpen = false; + OnDeFocus(); + } +} diff --git a/Assets/Scripts/Vendor/VendorController.cs.meta b/Assets/Scripts/Vendor/VendorController.cs.meta new file mode 100644 index 00000000..2f68f3e6 --- /dev/null +++ b/Assets/Scripts/Vendor/VendorController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe66b44b623dbb54d83226ff2584a34c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Vendor/VendorData.cs b/Assets/Scripts/Vendor/VendorData.cs new file mode 100644 index 00000000..b1c49ac3 --- /dev/null +++ b/Assets/Scripts/Vendor/VendorData.cs @@ -0,0 +1,10 @@ +using Kryz.CharacterStats.Examples; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[System.Serializable] +public class VendorData +{ + public List items = new List(); +} \ No newline at end of file diff --git a/Assets/Scripts/Vendor/VendorData.cs.meta b/Assets/Scripts/Vendor/VendorData.cs.meta new file mode 100644 index 00000000..660d3c52 --- /dev/null +++ b/Assets/Scripts/Vendor/VendorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4e9d0e8da5998b4191abb1b5eeb3f89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs b/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs new file mode 100644 index 00000000..e580396d --- /dev/null +++ b/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs @@ -0,0 +1,31 @@ +using Photon.Pun; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +public class GameEventListener_VendorData : MonoBehaviour +{ + public GameEvent_VendorData Event; + public UnityEvent_VendorData Response; + + private void OnEnable() + { + Event.RegisterListener(this); + } + + private void OnDisable() + { + Event.UnRegisterListener(this); + } + + public void OnEventRaised(VendorData vendorData) + { + Response.Invoke(vendorData); + } +} + +[System.Serializable] +public class UnityEvent_VendorData : UnityEvent +{ +} diff --git a/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs.meta b/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs.meta new file mode 100644 index 00000000..7b591136 --- /dev/null +++ b/Assets/Wavefunction/CustomEvents/GameRelated/GameEventListener_VendorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5cf5303a18e6ad4798d73c6a3e0ee52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs b/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs new file mode 100644 index 00000000..e41e01be --- /dev/null +++ b/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs @@ -0,0 +1,28 @@ +using Photon.Pun; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(fileName = "GameEvent_VendorData", menuName = "Wavefunction/Event/New GameEvent VendorData", order = 1)] +public class GameEvent_VendorData : ScriptableObject +{ + private List listeners = new List(); + + public void Raise(VendorData vendorData) + { + for (int i = listeners.Count - 1; i >= 0; i--) + { + listeners[i].OnEventRaised(vendorData); + } + } + + public void RegisterListener(GameEventListener_VendorData listener) + { + listeners.Add(listener); + } + + public void UnRegisterListener(GameEventListener_VendorData listener) + { + listeners.Remove(listener); + } +} diff --git a/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs.meta b/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs.meta new file mode 100644 index 00000000..6230fb37 --- /dev/null +++ b/Assets/Wavefunction/CustomEvents/GameRelated/GameEvent_VendorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50e076c3fdcf6c14c91afef991a3d815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: