using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Ktyl.Util; using TMPro; using UnityEngine.Events; public class ArtefactControl : MonoBehaviour { private bool _show; protected bool _canInteract; private GUIStyle guiS = new GUIStyle(); public Artefact data => _data; [SerializeField] private Artefact _data; public int artefactID => _artefactID; private int _artefactID; [SerializeField] private SerialInt _nearbyArtefactID; [SerializeField] private ArtefactSystem _artefacts; [SerializeField] private TMP_Text _text; // TODO: template system private void OnEnable() { _artefacts.RegisterArtefact(_data); } protected virtual void Start() { _artefactID = data.artefactID; _show = data.show; _canInteract = data.canInteract; EventHandler.current.onArtefactTriggerEnter += NearArtefact; EventHandler.current.onArtefactTriggerExit += AwayArtefact; EventHandler.current.onArtefactPickUp += PickUp; guiS.fontSize = 22; guiS.normal.textColor = Color.white; guiS.alignment = TextAnchor.MiddleCenter; } private void LateUpdate() { _text.enabled = _show; } private void NearArtefact(int id) { if (id == this._artefactID) { _show = true; this._canInteract = true; } } private void AwayArtefact(int id) { if (id == this._artefactID) { _show = false; _canInteract = false; } } protected virtual void PickUp(int id) { if (id == this._artefactID) { if (_canInteract == true) { // artefact system informs other systems about found artefact _artefacts.FindArtefact(data); } if (this.gameObject != null) { data.Pickup(); _nearbyArtefactID.Value = -1; _canInteract = false; EventHandler.current.ArtefactUI(); Destroy(this.gameObject); } } } }