오늘 학습 키워드
리팩토링, 책임
오늘 학습 한 내용을 나만의 언어로 정리하기
중복된 부분 새로 Class 만들어서 합치기
- SkillSlotUI와 SkillIconUI 부분이 너무 비슷해보여서, 주말에 확인해 봤는데 실제로 똑같은 파트가 있었음
- 이름도 너무 모호해서, DraggableSkillIcon을 상속하는 SkillBarSlot, SkillInventorySlot 으로 나누기로함
책임 위임?
-
지금은 SkillManager가 스킬 하나하나에 대한 인스턴스를 리스트로 가지고 있음.
-
그런데 가만보면 스킬 바 슬롯을 비운다던가 하는 내용이 SkillManager에 들어가있음.
-
그러면 차라리 SkillBar한테 옮기는게 낫지 않나? 하는 의문.
-
>> 그러면 스킬바의 책임이 너무 커짐.
-
다른 방향으로 고민. 지금 스킬 바 슬롯이 매니저를 직접 부르고있는데, 이게 맞나?
-
그래서 스킬 바 슬롯 → 스킬 바 → 스킬 매니저 순으로 호출하도록 변경하고자 함.
그리하여 변경된 스킬 시스템 구조
--- config: theme: redux layout: elk look: neo --- classDiagram direction TB class SkillData { +name +value +cooldown +icon +SkillLogic logic } class ISkillLogic { +void Activate() } class SkillManager { +List skillDatas +Dict logicMap +UseSkill() } class SkillInstance { +SkillData Data +float currentCooldown -ISkillLogic logic +TickCooldown(float deltaTime) +CanUse() +TryUse() } class ExplosionSkillLogic_example { } class DraggableSkillIcon { +Image iconImage +SkillData skillData +GameObject dragIconPrefab -GameObject dragClone -Canvas canvas +GetIconSkillData() +OnBeginDrag() +OnDrag() +OnEndDrag() } class SkillInventorySlot { +SkillInventory skillInven +SetSlot() +OnPointerClick() } class SkillBarSlot { +TMP_Text keyText +SkillBar skillBar +SetSlot() +ClearSlot() +OnDrop() +OnPointerClick() } class SkillBar { +GameObject slotPrefab +Transform slotParent -SkillManager skillManager -List slots +AssignSkillToSlot() +ClearSkillSlot() +SwapSkillSlots() } class SkillInventory { +Transform content +GameObject skillIconPrefab +List haveSkills +SkillManager skillManager +TryEquipFirstEmptySlot() } <<ScriptableObject>> SkillData <<Interface>> ISkillLogic <<Class>> SkillManager <<Class>> SkillInstance <<Class>> ExplosionSkillLogic_example <<Class>> DraggableSkillIcon <<Class>> SkillInventorySlot <<Class>> SkillBarSlot <<Class>> SkillBar <<Class>> SkillInventory ISkillLogic -- ExplosionSkillLogic_example SkillInstance -- ISkillLogic SkillData -- ExplosionSkillLogic_example DraggableSkillIcon <|-- SkillInventorySlot DraggableSkillIcon <|-- SkillBarSlot SkillBar --> SkillBarSlot SkillInventory --> SkillInventorySlot SkillManager o-- SkillInstance : Using SkillLogicFactory SkillInventory --> SkillManager SkillBar --> SkillManager
- 변경점
- 전반적으로 클래스 명을 명확하게 바꿈
- SkillInventorySlot과 SkillBarSlot의 공통 부모로 DraggableSkillIcon을 만듬
- 책임을 위임해서, 가능하면 최하단에 있는 SlotUI들이 Manager를 직접 부르지 않고, 상위에 있는 UI를 통해 변경하도록 함
보기도, 이해하기에도 편해짐!
팀프로젝트 TextRPG 만들기
- 기존에 내가 만들었던 구조를 리팩토링 해서 사용하기로 결정
classDiagram direction TB class PlayerData { +Name +Level +Job +ATK +DEF +HP +Gold +List EquipItems +List Items +List Skills } class GameScene { List nextScenes IGameScene prevScene sceneIndex +SetNextScene(IGameScene nextScene) +SetPrevScene(IGameScene prevScene) +StartScene() +PrintNextScenes() +EndScene() } class FirstScene { } class TownScene { } class ProfileScene { } class InventoryScene { } class InnScene { } class Item { +Name +Description +Stat +Price +IsEquip +ItemType } class Dungeon { +Name +Description +GoldReward +ExperienceReward +NeedDEF +List monsters } class Monster { +Name +ATK +DEF +HP +MaxHP +IsDead } class ShopScene { +List shopItems } class DungeonScene { +List dungeons } class GameManager { +GameManager instance +Dictionary itemTypeString +PlayerData playerData +string path +GameExit() +NewPlayerData(string playerName) +LoadPlayerData() +SavePlayerData() } class SceneManager { +enum SceneType +Dictionary scenes +SceneSetting() } class SkillInventoryScene { +List skillTreeSkills +UpdateCanILearn() } class Skill { +Name +Description +Cooldown +Power +isMultiply +ToSkillTreeString() } <<Class>> PlayerData <<Class>> GameScene <<Class>> FirstScene <<Class>> TownScene <<Class>> ProfileScene <<Class>> InventoryScene <<Class>> InnScene <<Class>> Item <<Class>> Dungeon <<Class>> Monster <<Class>> ShopScene <<Class>> DungeonScene <<Class>> GameManager <<Class>> SceneManager <<Class>> SkillInventoryScene <<Class>> Skill GameManager o-- PlayerData GameScene <|-- FirstScene GameScene <|-- TownScene GameScene <|-- ProfileScene GameScene <|-- InventoryScene GameScene <|-- SkillInventoryScene GameScene <|-- ShopScene GameScene <|-- InnScene GameScene <|-- DungeonScene PlayerData o-- Item PlayerData o-- Skill DungeonScene o-- Dungeon Dungeon o-- Monster SceneManager -- GameScene GameManager -- SceneManager
- 변경점
- IGameScene 삭제
- GameScene을 관리하는 SceneManager 생성. GameManager의 과도한 책임을 SceneManager로 분리함
- Skill과 Item을 상속했던 하위 클래스 삭제.
- (차트에는 없지만) 텍스트 입출력 관련해서 클래스 생성 예정
내일 학습 할 것은 무엇인지
씬 만들기 + 텍스트 렌더러 만들기?