기존에 사용하던 스탯 시스템의 한계가 있다고 느껴서 재구축 하기로 했음.
단순하게

int[] physAttack = new int[]{0 ,0}

이런식으로 관리하면, 당장은 편하고 직관적이지만 이후에 장비 착용이나, 일시적 버프 획득 등의 수치 변경이 이루어질 시, 잘못된 복원 순서로 인해 값이 엉뚱한 값으로 변해버릴 확률이 높기 때문.


1ea9d132daf134a77dac98a518d60403e46af04b758f322a5e01

그래서 일단 Stat 추상 클래스 만들었음. 장비 착용 및 해제 시에는 EquipAdder나 Multer을 실행하고(귀찮아서 이름 대충 지음), 일시적 버프는 전부 Adder, Multer 등에서 처리할 예정.

또한 수치 변경 시, 자동 반영을 위해 ModifyValue() 함수를 만들고 이를 호출하는 식으로, 스탯이 변경되는 즉시 value에 반영되도록 했고,

이 외에도 '시야 증가 시 자동으로 시야를 갱신하는 처리'등을 하기 위한 대리자와 공격력 같이 a ~ b의 범위 수치를 가지는 값들을 위한 버프 연동 대리자도 만들어둠

1ea9d132f0c1078267bcc2bc19df252f63b38963603903e7f86f08be1811bdd4b4

이걸 Status 클래스에서 Dictionary로 등록하고,


1ea9d132f0c107967cb0c6b004c53d732a4df20925be013e256d0dc23f72

이런식으로 프로퍼티를 통해서 편하고 안정적으로 접근하도록 만듬


1ea9d132f0c1078a67b1ddfb06df231d889147e239398dc6c197c1

범위 스탯은 이렇게 두면 Min value 수정하면 Max value는 자동으로 연동됨

일단은 범위 스탯은 이 두 개밖에 없어서 직접 선언했지만, Link(Stat a, Stat b) 같은 방식도 나중에 고려는 해볼 듯?


근데 사실 이렇게 한 가장 큰 주요 목적은 이거임

03b4c229dae239b57db6c0b058c12a3a12248266ce1a68d90162fd

나는 다양한 캐릭터에 각자 다른 패시브를 넣을 생각인데, 그 패시브중 하나가 시야가 항상 사거리와 같은 값을 가지게 만드는거였음.

뭐 대충 맹인 검객이라 검이 닿는데까지만 감지 가능하다는 느낌으로?

아무튼 이런식으로 스탯의 계산 방식을 아예 바꿔버리는 유형이 상당히 자주 나올거 같아서 이악물고 이런식으로 만듬.
이제 이 Stat을 상속한 클래스로 status클래스의 stat[STAT.SIGHT]를 대체해버리고


03b4c229dae728a26fabd3fb06df231d44fcfd9bd0b0ee1feaef

임시 코드를 이용하여 확인을 해보면?

0fb8d629f7d707946fb1d1b029f020395a23fd0af2cd991a4b6668fda3cd461f


0cbbc423f7ed0aa760b8d38a17d520734ad99543ef12ca3c4754cdf35819a7

원래대로라면 거리가 333 확장되어야하는 시야가, Range를 따라 1만 확장되는 모습임.

진짜 대가리 깨지는줄 알았다 ㅅㅂ ㅋㅋㅋㅋ
앞으로 이딴 짓거리 다시 하나봐라...