기존에 사용하던 스탯 시스템의 한계가 있다고 느껴서 재구축 하기로 했음.
단순하게
int[] physAttack = new int[]{0 ,0}
이런식으로 관리하면, 당장은 편하고 직관적이지만 이후에 장비 착용이나, 일시적 버프 획득 등의 수치 변경이 이루어질 시, 잘못된 복원 순서로 인해 값이 엉뚱한 값으로 변해버릴 확률이 높기 때문.
그래서 일단 Stat 추상 클래스 만들었음. 장비 착용 및 해제 시에는 EquipAdder나 Multer을 실행하고(귀찮아서 이름 대충 지음), 일시적 버프는 전부 Adder, Multer 등에서 처리할 예정.
또한 수치 변경 시, 자동 반영을 위해 ModifyValue() 함수를 만들고 이를 호출하는 식으로, 스탯이 변경되는 즉시 value에 반영되도록 했고,
이 외에도 '시야 증가 시 자동으로 시야를 갱신하는 처리'등을 하기 위한 대리자와 공격력 같이 a ~ b의 범위 수치를 가지는 값들을 위한 버프 연동 대리자도 만들어둠
이걸 Status 클래스에서 Dictionary로 등록하고,
이런식으로 프로퍼티를 통해서 편하고 안정적으로 접근하도록 만듬
범위 스탯은 이렇게 두면 Min value 수정하면 Max value는 자동으로 연동됨
일단은 범위 스탯은 이 두 개밖에 없어서 직접 선언했지만, Link(Stat a, Stat b) 같은 방식도 나중에 고려는 해볼 듯?
근데 사실 이렇게 한 가장 큰 주요 목적은 이거임
나는 다양한 캐릭터에 각자 다른 패시브를 넣을 생각인데, 그 패시브중 하나가 시야가 항상 사거리와 같은 값을 가지게 만드는거였음.
뭐 대충 맹인 검객이라 검이 닿는데까지만 감지 가능하다는 느낌으로?
아무튼 이런식으로 스탯의 계산 방식을 아예 바꿔버리는 유형이 상당히 자주 나올거 같아서 이악물고 이런식으로 만듬.
이제 이 Stat을 상속한 클래스로 status클래스의 stat[STAT.SIGHT]를 대체해버리고
임시 코드를 이용하여 확인을 해보면?
원래대로라면 거리가 333 확장되어야하는 시야가, Range를 따라 1만 확장되는 모습임.
진짜 대가리 깨지는줄 알았다 ㅅㅂ ㅋㅋㅋㅋ
앞으로 이딴 짓거리 다시 하나봐라...
다 좋은데 modifyvalue메서드에서 store에 장비스탯적용값 넣고 버프스탯값을 그냥 설정해서 위 내용을 버리게 되었는데 오타야?
오타네
알려줘서 고맙다 ㅋㅋㅋ 하마터면 오타 찾으려고 뒤적거릴 뻔했네
ㄴㄴ 나도 스탯시스템만든 거에서 빼먹은거 찾아서 좋았어
넌 뉴비가 아니다
깔끔하메 - dc App
저도 뉴비라 궁금한 게 있는데... 코드 중 예를 들어서 LinkedStatAdd[2] 에 AddAdder 함수를 추가하면 처음에 AddAdder 함수로 스탯 값을 추가하면 LinkedStatAdd[2]에 등록되어 있는 AddAdder 함수가 또 실행되는 거 아닌가여?? 그럼 또 AddAdder 함수에 있는 LinkedStatAdd[2]가 실행되고 무한 반복이 아닌지 궁금합니다 ...
Min의 AddAdder에만 Max의 AddAdder을 연결한거라, Min이 증가할때 Max는 따라 증가하지만, Max가 증가한다고 Min이나 Max가 다시 증가하는건 아니에요
스탯 선언 보면 STAT.MIN_PHYS_ATTACK이랑 STAT.MAX_PHYS_ATTACK에 각각 new StPhysAttack()을 선언했기에, 둘이 형태는 같지만, 완전 다른 객체