0504 TODO
해야할것 우선순위
1. VContainer / VSlider 구현하고 격자모양 만들어보기
2. 텍스트 렌더링 구현
3. 나머지 UI구현
참고 : (*)붙어있는거는 최상단에 무언가를 띄워야 하는 것임...
(&)붙어있는거는 "포커스를 유지한 상태"가 필요한 거....
- Label
- H / V ScollContainer
- (&) TextEdit
- (*) ColorPicker
-> 이거 _Memo참고하기 (구현방법 나와있음)
- (*) SpinBox
- MenuBox (인스펙터 위에 있는거. 노드 / 시그널 선택하는거.)
-> 이거는 콘테이너 비슷하게 만들어야 함.
- CheckBox
- Tree
-> 이거 Godot참고하셈.
하이라키 뷰 만들 때 필요함.
- Panel
- VideoPlayer (?)
-> 이거 뇌절인가?
Resource에다가 VideoSource 만들어야 할 듯.
4. 엔진 올리기 시작
- GUI폴더에 private폴더 만들고
거기 안에다가 테스트 겸으로
엔진 인스펙터에 들어갈 (뭉탱이 컴포넌트)로 쓰일
오브젝트 구현해놓기
- 커스텀 뷰포트 만들어보고
매 프레임마다 월드뷰어 뷰포트에
커서위치 적절히 계산해서 넣어주고
만약 커서가 월드뷰어 뷰포트 안에있을 경우에만
월드뷰어뷰포트 기즈모 활성화하기
4-1. AngelScript 호환 스크립팅 레이어 올리기
5. 실질적인 오브젝트 구현 및 specific 에디터
- 그래픽스
- 2D 및 3D
- 2D 라이팅 + 오클루젼
- 3D 멀티 패스 렌더링
- 3D 기즈모 <- 좀 많이 연구 필요
- 오디오
- AudioStreamPlayer
- 애니메이션
- AnimationPlayer
- 물리
- 2D 및 3D
- Box2D
-> 근데 이게 소프트바디를 지원을 안해서
커스텀 엔진도 같이 제공하면 좋을듯
(소프트바디 + 유체역학)
-- 네트워킹 <- 뇌절. 엔진 다 만들고도 올릴까 말까임.
specific에디터
- 스크립트 에디터
- 아틀라스 텍스쳐 에디터
- 타일맵 (+오토타일)
- 오디오 믹서 에디터 UI
- 애니메이션 에디터
- 커브 에디터
- 터레인 에디터 <- 좀 많이 연구 필요
++ 픽셀아트 에디터? (이거는 나중에 다 만들고 올리자.)
App에 달려있는 RenderServer에
텍스트 렌더링에 필요한 자원(Font)과
렌더링 함수를 제공한다.
+ 나중에 아웃라인 추가할 때
Font키에다가 [아웃라인 크기]도 추가하기
단:
0. 렌더서버에서
Font를 생성할 수 있게 함.
폰트를 구별하는 키는
[폰트 경로, 폰트 크기]
-> 이걸로 비트맵을 구성한다.
물론 그건 렌더서버 딴에서 캐싱도 한다.
1. 빌드를 gltr마냥 뭉탱이로 하지 말 것.
대신 로컬 기준으로 한 Glyph에 대해서
"코드포인트가 뭔지"
"몇 번째 비트맵을 쓰는지"
"비트맵의 어디 UV인지"
"크기가 얼마나 큰지"
"Advance값이 몇인지(pen에다가 누적해감)"
그리고 Font*에서는
"코드포인트 a와 코드포인트 b사이의
커닝 정보가 존재할 경우 Kerning 벡터를 반환"
하는 메서드가 존재한다.
bool has_kerning_info() const;
Vector2f get_kerning_info(uint32_t a, uint32_t b) const;
2. render_text에서는 인자로
Font*와
pos
size
HAlign
VAlign
percent_visible
color
modulate
wrap_text : bool
wrap_based_on_words : bool
등을 받음.
3. 렌더링 할 때 size를 받는데
size를 완전히 넘어가는 글리프는
render_clipped_custom_uv_tex_quad로 클리핑.
// =========================================== //
지금 container_trace에 대해서
- collision AND
- WorldScissorRect
2개를 구해야 하는데,
첫번째는 그냥 container_trace를 캐싱하는 걸로 가능하고,
두번째는 계산을 해둬야 한다.
-> container_trace의 생성은 IObject::set_parent를 오버라이드한
시점에서.
**** 주의점 ****
set_parent를 하위노드 먼저 부른다면
상위가 만들어지지도 않았는데 생성하므로
처음에 만들 때 상위 -> 하위 방향으로 add_child / set_parent 불러야 한다.
+ build_container_trace를 public으로 해서 강제로 만들수도 있어야 한다.
-> container_trace는 "자기 자신을 제외한 parent_trace 중 연속된 container들"을 담는다