0419
2025년 4월 19일
카테고리 : 게임엔진
엔진 오브젝트 인터페이스에다가
IControl 을 추가함.
이건 고도엔진에 Control 노드와 똑같은 역할임.
특이한 점이 있다면 rect_final_matrix가 있는데,
렌더링시에 이걸 최종적인 worldMat로 사용함.
-> 이게 왜 필요하냐면
Sprite2D 같은건 정 중앙이 (0, 0)인데?
Control 노드는 전부 topleft가 (0, 0)이라서
월드행렬 위치에 (rect_size / 2) 만큼을 빼줘야 함.
HContainer를 처음 구현해봄.

대충 다음과 같이 구성했음. cont0 cont1 ctr0 cont2 ctr1
그리고 cont1같은놈의 크기를 강제로 변화시킨 후에,
cont0 을 update_hierarchy() 해줘야 함.
그러면 cont0의 크기도 변화됨.
-> 왜 이렇게 하는지 이유는 2개가 있음
1. 콘테이너의 경우, 자식의 크기가 변하면 자신의 크기도 변화시켜야 한다.
2. 자식이 부모에게 영향을 주는 것은 불법이다.
저 짓거리는 그냥 테스트용으로 하는거임.
사실 앱을 실제로 만들때에는,
자식의 크기가 변하는 일은 많이 없을거임
-> 매우 특수한 경우 (접혀있던게 펼쳐짐, 애니메이션 적용됨) 의
get_parent() 를 조사하고
그 부모 타입이 ContainerBase라면 update_hierarchy() 를 불러 주는게 좋을거임.
사실 이 문제 해결하려고 계속 생각해 봤는데,
그냥 자식 따위가 컨테이너 안에서
"자기 스스로 코드를 통해"
크기가 바뀐다는게 뭔가 이상한 상황임.
애초에 HContainer에다가 ContaineMode 구현하면
자식들의 크기와 위치에 대한 권한이
전적으로 HContainer에 위임됨.
만약 어쩔 수 없이 컨테이너 안에
포지션 / 크기가 변하는 Control 오브젝트를 넣게 되었다면,
(자동으로 조정이 안된다면,)
-> 유저가 직접 update_hierarchy() 일일이 불러주는 수밖에 없음.