Scriptum/Assets/Scripts/REFACTORING/Application/Mission/Save/MissionDataManager.cs

146 lines
4.6 KiB
C#
Raw Normal View History

2023-01-03 22:44:24 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;
class MissionDataManager : SceneBaseDataManager<MissionData>
{
protected override string OBJECT_FOLDER_NAME { get { return "Mission"; } }
protected override string OBJECT_LIST_NAME { get { return "MissionsList"; } }
[SerializeField]
public List<MissionData> MissionDataList;
public override void Awake()
{
if (Instance == null)
{
Instance = this;
// moved from start beacuse we need to prepare env before NpcMissionmanager start registering and uipdating mission model
Debug.Log("Start Mission manager");
DynamicDataList = new MissionDataListManager();
DataLoader = new MissionDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME);
base.Start(); // (afterStart invoking - to load saved data)
}
else
{
Destroy(gameObject);
}
}
// ZMIANA KONCEPCJI
// ZMIAST TRZYMAC SUROWE OBIEKTY TYM RAZEM ZAPISUJMY modele Datai updatujmy obiket w NPC Managerze
// nadpisujemy by nir duplikowac wywoałania i nadpisyuwanie MissionDataList z Awake
public override void Start()
{
}
protected override void 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<MissionData> GetObjectType()
{
return GameObject.FindObjectOfType<MissionDataManager>();
}
protected SceneBaseDataManager<MissionData> CreateInstance(ref GameObject managerGameObject)
{
return managerGameObject.AddComponent<MissionDataManager>();
}
protected override void UseDefaultSettings()
{
DynamicDataList.SetList(new List<MissionData>());
MissionDataList = 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
Debug.Log("UseDynamicSettings");
LoadDynamicData();
// VERy VERY provisional SOLUTION
if (DynamicDataList.GetList().Count == 0)
{
UseDefaultSettings();
}
MissionDataList = DynamicDataList.GetList();
}
public void RegisterMission(Mission newMission)
{
if (DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).Any())
{
// if dial is already registered - update it
UpdateMission(newMission);
}
else
{
var misssionData = SaveMissionManager.ConvertObjectToDataModel(newMission);
//DynamicDataList.AddElementToList(multiDialogueData); - nie dodwaca bo modyfikacja jednej duplikuje
MissionDataList.Add(misssionData);
}
}
// update proggress in dialogue - BUT FUNCTION BELOW SYNCH THIS ALREADY righhr???
public void UpdateMission(Mission newMission)
{
if (!DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).Any())
Debug.LogError($"There is no registered dialoge like {newMission.SpeakerName}");
else
{
var missionData = SaveMissionManager.ConvertObjectToDataModel(newMission);
MissionDataList.RemoveAll(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName);
// duplicated from registerDialogue
MissionDataList.Add(missionData);
}
}
public MissionData? GetMission(Mission newMission)
{
return DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).FirstOrDefault();
}
public override bool SaveDynamicData()
{
return SaveData(MissionDataList, SceneElementTypeEnum.Dynamic);
}
}