- using Eflatun.SceneReference;
- using MyCollections.SceneManagement;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- public class Building : MonoBehaviour, INotifyObservers, IDisplayable, IInteractable
- {
- [Header("Building Information: ")]
- [SerializeField] private string shopName;
- [Header("Loading References: ")]
- [SerializeField] private SceneReference sceneToLoad;
- [SerializeField] private SceneReference sceneToUnload;
- [SerializeField] private SceneDataSaver sceneDataSaver;
- [Header("Display message on interact: ")]
- [SerializeField] private DisplayMessage displayMessage;
- [Header("UI GameObject Prefab: ")]
- [SerializeField] private GameObject uiObjectPrefab;
- private SceneLoader sceneLoader;
- private GameManager gameManager;
- private List<IObserver> observers = new List<IObserver>();
- private string uiObjectID = string.Empty;
-
- void Start()
- {
- gameManager = GameManager.Instance;
- sceneLoader = SceneLoader.Instance;
- }
-
- private string GenerateID() => Guid.NewGuid().ToString();
- private void OnTriggerEnter2D(Collider2D collision)
- {
- if (collision.gameObject.tag == "Player")
- {
- GameObject go = uiObjectPrefab;
- string buttonAction = InputManager.GetKey(InputAction.Interact).ToString();
- uiObjectID = GenerateID();
-
- NotifyObservers(NotificationType.UI, ("UIObject", go), ("Message", displayMessage.GetFormattedMessage(buttonAction)), ("ObjectID", uiObjectID));
- }
- }
- private void OnTriggerExit2D(Collider2D collision)
- {
- if (collision.gameObject.tag == "Player")
- {
-
-
- NotifyObservers(NotificationType.UI, ("DestroyUI", uiObjectID));
- }
- }
-
- public string GetDisplayMessage(DisplayMessage message) =>
- message.GetFormattedMessage(InputManager.GetKey(InputAction.Interact).ToString());
-
- public void NotifyObservers(NotificationType type, params (string key, object value)[] parameters)
- {
- ObserverNotification notification = new ObserverNotification(type);
- foreach ((string key, object value) param in parameters)
- {
- notification.AddData(param.key, param.value);
- }
- foreach (IObserver observer in observers)
- {
- observer.OnNotify(notification);
- }
- }
- public void AddObserver(IObserver observer)
- {
- if (!observers.Contains(observer))
- {
- observers.Add(observer);
- }
- }
- public void RemoveObserver(IObserver observer)
- {
- if (observers.Contains(observer))
- {
- observers.Remove(observer);
- }
- }
-
- public void OnInteract()
- {
- sceneLoader.LoadSceneWithLoading(sceneToLoad, sceneToUnload);
- }
- }