오늘의 학습 키워드
Action,
공부한 내용
아이템 -> 인벤토리 (장착 로직과 캐릭터 상태 갱신 콜백)
인벤토리의 리스트로 있는 아이템에 접근해서 콜백을 주기에는 아이템마다 세팅 해줘야하고 나중에 있을지도 모르는 캐릭터마다 상태를 갱신시켜주는 상황이 생길 수 있다.
이를 해결하기 위해 인벤토리에서 장착 콜백을 받아놓고 처리하는 방식으로 진행하려고 한다.
public class ItemInfo : IItem
{
public ItemType Type { get; private set; }
public string Name { get; private set; }
public int AttackModifier { get; private set; }
public int DefenseModifier { get; private set; }
public string Description { get; private set; }
public int Price { get; private set; }
public bool IsEquiped { get; private set; }
public void SetInfo(ItemType type, string name, int attack, int defense, string description, int price, bool isEquiped)
{
Type = type;
Name = name;
AttackModifier = attack;
DefenseModifier = defense;
Description = description;
Price = price;
IsEquiped = isEquiped;
}
public void Equip(bool isEquip)
{
IsEquiped = isEquip;
}
}
인벤토리에 옮긴 후
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace TextRPG_Single
{
class Inventory
{
Action<Item> equipCallback;
public List<Item> Items { get; private set; } = new List<Item>();
public Inventory()
{
Items.Add(new Item(ItemType.Armor, "린넨 셔츠", 0, 1, "부드러운 천으로 만든 셔츠이다.", 100));
Items.Add(new Item(ItemType.Weapon, "나무 망치", 1, 0, "나무로 만든 망치이다.", 200));
}
public void Init(Character character)
{
equipCallback = character.ApplyToState;
}
public void Equip(Item item)
{
item.Info.IsEquiped = true;
equipCallback?.Invoke(item);
}
public void UnEquip(Item item)
{
item.Info.IsEquiped = false;
equipCallback?.Invoke(item);
}
public int GetSellingPrice(Item item)
{
return (int)(item.Info.Price * 0.85f);
}
public void RemoveItem(Item item)
{
UnEquip(item);
Items.Remove(item);
}
public Item GetSameTypeItem(Item otherItem)
{
foreach (var item in Items)
{
if (item != otherItem && item.Info.Type == otherItem.Info.Type && item.Info.IsEquiped)
{
Equip(item);
return item;
}
}
return null;
}
}
}
오늘의 회고
오늘은 리팩토링 하는 마지막 주차이다. 다른 것들은 모두 이해가 갔지만 Json Deserialize 하는 부분에서 프로퍼티 쪽으로 데이터를 넘기는 부분은 좀 더 공부가 필요한 것 같다. 그래도 목표는 거의 다 달성했으니 꽤나 만족하는 하루였다.
다음 주는 다른 사람들과 팀으로 TextRPG를 만들게 되는데 기대가 되고 개인으로 만들던 경험을 기반으로 더 잘 만들 수 있을 것 같다. 다음 주도 파이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 3주차 WIL - TextRPG (0) | 2023.08.28 |
---|---|
내일배움캠프 15일차 TIL - TextRPG 팀 과제 (0) | 2023.08.28 |
내일배움캠프 13일차 TIL - TextRPG 리팩토링 (0) | 2023.08.24 |
내일배움캠프 12일차 TIL - TextRPG 만들기 4 (0) | 2023.08.23 |
내일배움캠프 11일차 TIL - TextRPG 만들기 3 (0) | 2023.08.22 |