컴포넌트 기반인데, 오브젝트는 그저 정수 하나. 각 컴포넌트 매니져가 있어서, 오브젝트를 컴포넌트 매니져에 등록시키는 방식임. 멀티스레딩을 연습해보고 싶어서 오브젝트가 컴포넌트를 주저리주저리 달고 있는 방식은 사용하지 않기로 했음.

그러다보니 컴포넌트 매니저끼리는 이 오브젝트가 우리 컴포넌트를 가지고 있다는걸만 알지, 다른 컴포넌트를 가지고있는지는 모름. 그래서 메시지 방식을 도입했음.


HP 컴포넌트 매니저의 경우, HP_DECREASE 메시지를 받으면 메시지에 있는 오브젝트ID와 감소량을 읽어서 처리해줌.

그런데 무적 컴포넌트가 있다고 하면, HP 컴포넌트가 HP_DECREASE 메시지를 받으면 이 오브젝트가 무적인지 아닌지를 확인해야함. 심지어 무적 컴포넌트를 들고있지 않을 수도 있음. 아무튼 HP_DECREASE 메시지 처리부분에서는 당장 이 오브젝트가 무적인지 아닌지, 무적 컴포넌트를 들고있는지 아닌지를 알아내야함.

그런데 만약 IS_GOD_MODE 메시지를 무적 컴포넌트한테 보냈다고 쳐보자. 여기서 문제가 발생하는게, 무적 컴포넌트는 IS_GOD_MODE 메시지를 받을거임. 그리고 자신과 통신하는 "여러" 컴포넌트 매니져에게 NOT_GOD_MODE 메시지를 브로드캐스팅 할거임. 중요한건 여러 컴포넌트 매니저임. HP 컴포넌트도 메시지를 받고, 다른 컴포넌트도 메시지를 받으면, 그 다른 컴포넌트 매니져도 자기만의 로직 처리를 할거임.

만약 NOT_GOD_MODE_TO_HP라는 메시지를 억지로 만들어서 HP 컴포넌트만 받을 수 있게 한다고 쳐보자. 그런데 HP 컴포넌트는 저 메시지를 받고 뭘 처리해야함? 메시지에는 이 오브젝트가 무적상태가 아닙니다. 정보밖에 없음. 난 HP 감소 처리를 위해서 메시지를 보냈는데 이젠 HP를 얼마나 감소시켜야하는지에 대한 정보가 없음.

주저리 주저리 길었지만 하고싶은 말은 무적상태 체크는 HP_DECREASE 메시지 처리 부분에서 확인 가능해야하다는 거임. 이 문제때문에 여러 생각을 해봤지만 결론은 컴포넌트 매니져한테 직접(public 함수) 물어봐야 한다는거임. 근데 이럴거면 오브젝트에 컴포넌트 등록하는 방식보다 나은게 뭘까. 이 방법 말고는 다른 방법이 안떠오른다. 물론 서로 다른 컴포넌트 매니저끼리 상대방의 컴포넌트 값을 바꿀 수 없도록 read 혹은 상태체크 함수만 만들어서 제공한다면 큰 문제는 없을 것 같은데, 그냥 함수를 제공하는 것 자체가 내가 사용하고 있는 구조가 잘못됐다는걸 말하는 것 같아서 싫다. 컴포넌트 매니져끼리는 무조건 메시지로 통신한다는게 대전제였는데...


보통 문제 안풀릴때 디씨 글쓰기창에 주저리주저리 적다보면 아이디어 한두개쯤 생각나던데 이번엔 생각조차 안나네.

새벽에 좆같아서 그냥 글 쌌음. 보고 너무 욕하진 말아주셈...