카테고리 없음
08/28 오후수업 정리
Cathedral8293
2024. 8. 28. 21:54
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MissionMain : MonoBehaviour
{
public UIMissionScrollView uiMissionScrollView;
void Start()
{
//======================================
DataManager.Instance.Init();
AtlasManager.Instance.Init();
InfoManager.Instance.LoadGameInfo();
//======================================
this.uiMissionScrollView.Init(); // 스크롤뷰에서 셀뷰
}
}
public class GameInfo
{
public List<MissionInfo> missionInfos;
public GameInfo()
{
}
/// <summary>
/// 처음 생성시에만 호출해주세요.
/// </summary>
public void Init()
{
this.missionInfos = new List<MissionInfo>();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 저장 클래스
// 직렬화 대상 클래스
// 객체 -> 문자열
// 매핑클래스
public class MissionInfo
{
public int id;
public int progress;
public MissionInfo(int id, int progress)
{
this.id = id;
this.progress = progress;
}
}
using JetBrains.Annotations;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class InfoManager
{
public static InfoManager Instance = new InfoManager();
public GameInfo gameInfo;
private string path;
private InfoManager()
{
path = Path.Combine(Application.persistentDataPath, "game_info.json");
}
public void LoadGameInfo()
{
Debug.Log(Application.persistentDataPath);
Debug.Log(path);
bool isExists = File.Exists(path);
if (isExists)
{
Debug.Log("기존 유저입니다.");
string json = File.ReadAllText(path);
this.gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
Debug.Log(gameInfo);
Debug.Log(gameInfo.missionInfos.Count);
foreach(MissionInfo missionInfo in gameInfo.missionInfos)
{
Debug.Log($"{missionInfo.id}, progress : {missionInfo.progress}");
}
}
else
{
Debug.Log("신규 유저입니다.");
GameInfo gameInfo = new GameInfo();
gameInfo.Init();
List<MissionData> missionDatas = DataManager.Instance.GetMissionDatas();
foreach (MissionData missionData in missionDatas)
{
MissionInfo missionInfo = new MissionInfo(missionData.id, 0);
gameInfo.missionInfos.Add(missionInfo);
}
SaveGameInfo();
}
}
public MissionInfo GetMissionInfo(int id)
{
//for(int i=0; i<this.gameInfo.missionInfos.Count; i++)
//{
// MissionInfo info = this.gameInfo.missionInfos[i];
// if(info.id == id)
// {
// return info;
// }
//}
//return null;
MissionInfo info = this.gameInfo.missionInfos.Find(x => x.id == id);
return info;
}
public void SaveGameInfo()
{
string json = JsonConvert.SerializeObject(gameInfo);
Debug.Log(json);
//파일로 저장
File.WriteAllText(path, json);
Debug.Log("게임 정보가 저장되었습니다.");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIMissionScrollView : MonoBehaviour
{
public GameObject cellViewPrefab;
public RectTransform contentTrans;
public void Init()
{
List<MissionData> missionDatas = DataManager.Instance.GetMissionDatas();
for(int i=0; i < missionDatas.Count; i++)
{
MissionData missionData = missionDatas[i];
GameObject cellviewGo = Object.Instantiate(this.cellViewPrefab, this.contentTrans);
UIMissionCellView cellview = cellviewGo.GetComponent<UIMissionCellView>();
cellview.btn.onClick.AddListener(() => {
Debug.Log(missionData.id);
MissionInfo missionInfo = InfoManager.Instance.GetMissionInfo(missionData.id);
missionInfo.progress++;
cellview.UpdateProgressTextUI();
InfoManager.Instance.SaveGameInfo();
});
cellview.Init(missionData);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.U2D;
public class UIMissionCellView : MonoBehaviour
{
public Image iconImage;
public TMP_Text nameText;
public TMP_Text descText;
public Image rewardItemIconImage;
public TMP_Text rewardItemAmountText;
public TMP_Text progressText;
public Button btn;
private MissionData data;
public void Init(MissionData data)
{
this.data = data;
this.nameText.text = data.name;
this.descText.text = string.Format(data.desc,data.goal);
this.rewardItemAmountText.text = data.reward_item_amount.ToString();
SpriteAtlas atlas = AtlasManager.Instance.GetAtlasByName("Icon");
Sprite missionIconSprite = atlas.GetSprite(data.icon_name);
iconImage.sprite = missionIconSprite;
ItemData itemData = DataManager.Instance.GetItemDatas(data.reward_item_id);
Sprite rewardItemIconSprite = atlas.GetSprite(itemData.icon_name);
this.rewardItemIconImage.sprite = rewardItemIconSprite;
UpdateProgressTextUI();
}
public void UpdateProgressTextUI()
{
MissionInfo missionInfo = InfoManager.Instance.GetMissionInfo(data.id);
this.progressText.text = $"{missionInfo.progress}/{data.goal}";
}
}