![2일차. 장비 관리 기능 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz612H%2FbtszRU6O0nA%2F302l6AxX2WH7jc4fPbkZ2K%2Fimg.png)
2일차. 장비 관리 기능 구현C#/텍스트 게임 "Shelter"2023. 11. 7. 11:44
Table of Contents
📌 준비
상단 와이어프레임을 기준으로 Character.cs 에서 아이템 리스트와 장비관리 클래스를 추가하여, 장비 관리 기능을 만들려고 한다.
- 보유중인 아이템 목록 보여주기
- 장착중인 아이템 따로 표시 보여주기
- 각 타입별로 하나의 아이템만 장착가능
📌 개발
📄 Equipment.cs
// 장비 슬롯 타입 열거형
public enum EquipSlot
{
Weapon,
Armor,
}
// 플레이어 장비 관리 클래스
public class Equipment
{
// Key : 장비 슬롯, Data : 해당 장비 아이템
private Dictionary<EquipSlot, ItemEquip> equipped = new();
// 클래스 생성자
public Equipment()
{
var slots = Enum.GetValues<EquipSlot>();
foreach (var slot in slots)
{
if (equipped.GetValueOrDefault(slot) != null) continue;
equipped[slot] = ItemEquip.Empty;
}
}
// 장비 아이템 장착
public void Equip(EquipSlot slot, ItemEquip itemEquip)
{
// 해당 장비창이 비어있지 않은가?
if (!equipped[slot].IsEmptyItem())
{
Unequip(slot);
}
equipped[slot] = itemEquip;
equipped[slot].IsEquipped = true;
}
// 장착된 장비 아이템 해제
public void Unequip(EquipSlot slot)
{
equipped[slot].IsEquipped = false;
equipped[slot] = ItemEquip.Empty;
}
}
- Dictionary<EquipSlot, ItemEquip>
- 열거형인 EquipSlot 을 key데이터로 정하여, 장비 아이템을 타입으로 구분 가능
- 딕셔너리 장점중 하나인 제너릭형이라 박싱/언박싱 없이 바로 사용 가능 (equipped[slot]) - Equip
- 해당 슬롯 타입에 장비 아이템 장착
- 조건문을 통해 해당 장비 슬롯에 아이템이 있는 경우, 해당 아이템 Unequip
- 장착한 장비 아이템에서 IsEquipped 값을 true - Unequip
- 장착 중인 장비 체크 해제하고 빈 아이템으로 변경
📄 ScreenEquipment.cs
// 장비 관리창을 담당하는 클래스
...
// 인벤토리에서 아이템 장착
static void EquipFromInventory()
{
var item = GameManager.player.Inventory.ElementAtOrDefault(currentItemIdx);
if (item == null || item.IsEmptyItem()) return;
var equipItem = (ItemEquip)item;
if (equipItem != null)
{
switch (equipItem.Type)
{
case EquipType.Weapon:
GameManager.player.Equipment.Equip(EquipSlot.Weapon, equipItem);
break;
case EquipType.Armor:
GameManager.player.Equipment.Equip(EquipSlot.Armor, equipItem);
break;
}
}
}
...
- EquipFromInventory
- 현재 선택되고 있는 아이템 인덱스인 currentItemIdx 를 통해 Null 체크 한다.
- 그리고 해당 아이템을 장비 아이템으로 캐스팅하여 장비 슬롯 타입별로 구분해서 장착한다.
📌 테스트
'C# > 텍스트 게임 "Shelter"' 카테고리의 다른 글
6일차. 게임 화면 꾸미기 (1) | 2023.11.13 |
---|---|
5일차. 상점 시스템 구현 (0) | 2023.11.10 |
4일차. 인벤토리 List 활용 & 스테이지 진행 (0) | 2023.11.09 |
3일차. 스크린 관리 (0) | 2023.11.08 |
1일차. 텍스트 게임 "Shelter" 스타트 (0) | 2023.11.06 |