using System; using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; class MultiDialogueDataManager : SceneBaseDataManager { protected override string OBJECT_FOLDER_NAME { get { return "MultiDialogue"; } } protected override string OBJECT_LIST_NAME { get { return "MultiDialogueList"; } } [SerializeField] public List MultiDialogueDataList; public override void Awake() { if (Instance == null) { Instance = this; Debug.Log("Start MultiDialogueData manager"); DynamicDataList = new MultiDialogueDataListManager(); DataLoader = new MultiDialogueDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME); base.Start(); } else { Destroy(gameObject); } } // ZMIANA KONCEPCJI // ZMIAST TRZYMAC SUROWE OBIEKTY TYM RAZEM ZAPISUJMY modele Datai updatujmy obiket w NPC Managerze public override void Start() { } protected override void AfterStart() { Debug.Log("AfterStart"); if (OnMapAppearanceMethod.GameStatus == GameStatus.NewGame) { if (OnMapAppearanceMethod.Gateway != OnMapAppearanceMethodEnum.NewGame) UseDynamicSettings(); // if there is nothing saved we will use UseDefaultSettings else UseDefaultSettings(); } else { UseDynamicSettings(); } } protected SceneBaseDataManager GetObjectType() { return GameObject.FindObjectOfType(); } protected SceneBaseDataManager CreateInstance(ref GameObject managerGameObject) { return managerGameObject.AddComponent(); } protected override void UseDefaultSettings() { DynamicDataList.SetList(new List()); MultiDialogueDataList = DynamicDataList.GetList(); // we dont need to convert anything // Instead of build elements on scene we collect shops distracted on scene from npc's } protected override void UseDynamicSettings() { // when chest detect player in near arrea and player press "c" // open panel -> chest controller handle Open panel in Scene Chest Manager passing info about what Chest Palyer want to open // Manager Build panel and pass info about chest content LoadDynamicData(); // VERy VERY provisional SOLUTION if (DynamicDataList.GetList().Count == 0) { UseDefaultSettings(); } MultiDialogueDataList = DynamicDataList.GetList(); } public void RegisterDialogue(MultiDialogue newDialogue) { if (DynamicDataList.GetList().Where(dialogue => dialogue.SpeakerName == newDialogue.SpeakerName).Any()) { // if dial is already registered - update it UpdateDialogue(newDialogue); } else { var multiDialogueData = SaveMultiDialogueManager.ConvertObjectToDataModel(newDialogue); //DynamicDataList.AddElementToList(multiDialogueData); - nie dodwaca bo modyfikacja jednej duplikuje MultiDialogueDataList.Add(multiDialogueData); } } // update proggress in dialogue - BUT FUNCTION BELOW SYNCH THIS ALREADY righhr??? public void UpdateDialogue(MultiDialogue newDialogue) { if (!DynamicDataList.GetList().Where(dialogue => dialogue.SpeakerName == newDialogue.SpeakerName).Any()) Debug.LogError($"There is no registered dialoge like {newDialogue.SpeakerName}"); else { Debug.Log($"Dialogue {newDialogue.SpeakerName} - updated"); var multiDialogueData = SaveMultiDialogueManager.ConvertObjectToDataModel(newDialogue); MultiDialogueDataList.RemoveAll(dialogue => dialogue.SpeakerName == newDialogue.SpeakerName); // duplicated from registerDialogue MultiDialogueDataList.Add(multiDialogueData); } } public MultiDialogueData? GetDialogue(MultiDialogue newDialogue) { Debug.Log(DynamicDataList.GetList()); Debug.Log(newDialogue); return DynamicDataList.GetList().Where(dialogue => dialogue.SpeakerName == newDialogue.SpeakerName).FirstOrDefault(); } public override bool SaveDynamicData() { return SaveData(MultiDialogueDataList, SceneElementTypeEnum.Dynamic); } }