카테고리 없음

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}";
    }
}