Develop_Log

[내배캠 최종 프로젝트] 스테이지 및 캐릭터 데이터 구성

리네엔 2024. 12. 11. 23:59

Json으로 기본 데이터 테이블을 구성하고, 이를 Info클래스로 받아서 사용한다.

앞의 Json데이터는 서버가 붙을 경우 서버에서 받아올 수 있다.

이 데이터로 유저가 사용하는 데이터 클래스로 감싸고, 이 묶음을 유저 데이터에서 관리해준다.

그리고 그 유저데이터를 다시 Json으로 구성하여 저장하고 있다.

 

내가 구성하는 부분은 데이터 테이블 부터 InstanceClass와 로드까지하고, 뒤의 저장하는 부분은 다른 분이 맡아 주셨다.

 

위는 캐릭터 테이블이고, 아래는 스테이지 테이블이다. 

id로 조인하여 사용 할 수 있게 만들어놨다.

이를 json와 info클래스로 변환해주는 프로그램을 사용하여 json과 infoclass로 만들었다.

InstanceClass에서는 Info클래스와 여러 기타 정보를 갖고 있다.

 

[Serializable]
public class CharacterInstance 
{
	public int Key;
	public int Level;
	public int CharacterInfoKey;
	[JsonIgnore] public CharacterInfo CharacterInfo {  get; private set; }
	[JsonIgnore] public SupportSkillInfo SupportSkillInfo { get; private set; }
	[JsonIgnore] public CharacterStat CharacterStat { get; private set; }

	// public ItemInstance[] EquipedItems;

	public void LoadInfos()
	{
		this.CharacterInfo = Managers.Instance.Data.CharacterLoader.GetByKey(CharacterInfoKey);
		SupportSkillInfo = Managers.Instance.Data.SupportSkillLoader.GetByKey(CharacterInfo.SupportSkillID);
	}

	private void SetCharacterStatBase()
	{
		CharacterStat = new CharacterStat(CharacterInfo);
	}
}
public class CharacterInstanceLoader
{
	public List<CharacterInstance> ItemList { get; private set; }
	public Dictionary<int, CharacterInstance> ItemDict { get; private set; }

	public CharacterInstance GetbyKey(int key)
	{
		return ItemDict[key];
	}

	public void LoadInstance(List<CharacterInstance> list)
	{
		ItemList = list;
		for(int i = 0; i < ItemList.Count; i++)
		{
			ItemList[i].LoadInfos();
		}
	}
	public void SetDict()
	{
		ItemDict = new Dictionary<int, CharacterInstance>();
		for (int i = 0; i < ItemList.Count; i++)
		{
			ItemDict.Add(ItemList[i].Key, ItemList[i]);
		}
	}

	public CharacterInstance CreateInstance(int key)
	{
		CharacterInstance item = new CharacterInstance();
		item.Key = Utils.CreateId(ItemDict.Keys.ToList<int>());
		item.CharacterInfoKey = key;
		item.LoadInfos();
		item.Level = 1;
		return  item;
	}

	public void AddInstance(CharacterInstance item)
	{
		ItemList.Add(item);
	}

}

Infoclass가 갖고 있는 데이터는 JsonIgnore를 붙여서 저장되지 않도록 했다.

Loaderclass를 만들어서 데이터를 불러오고, 새로운 데이터를 저장해야하면, key를 만들고 데이터를 알맞게 초기화 해주는 기능을 만들어주었다. 또한 key로 데이터를 한번에 접근해가져올 수 있도록 했다.