오늘 IndexToPos, PosToIndex 만들고
TestMap 띄워두기는 했다.
우리 바바 인덱스 [0][0]에 있는 것좀 보세요 카와이.
충돌체 필요없음
ULevel ⇒ ATileLevelMode 같은거 만들어서 얘를 상속받게해서
std::map<int64, std::shptr> 있게 하기 // int64 : FIntPoint
모든애들은 AActor 상속받는 타일
class Tile
{
public:
FIntPoint PosToIndex(); // GetIndex();
}
모두 타일이어야하기 때문.
오늘 여까지
그리고 Tile을 상속받는 Baba(다 바바로 보시는중 ㅋㅋ)
여기까지가 다음주 화요일까지 가능해야함
(맵에디터 만든다)
람다 == 함수.
람다는 기본적으로 virtual function과 같은 개념이다. 근데 클래스 만들기 귀찮잖앙
아무 관계없는 다른 클래스의 함수나 전역함수로도 대신 실행시켜주는 개념과 방식 : CallBack이라 함
virtual, functional 다 표현식이 다른 함수포인터로 본다.
엄연히 말하면 가상함수는 부모클래스의 함수를 자식클래스의 함수가 대신 실행하는거로 쫌 다른 느낌이긴 함.
람다 캡쳐라는 것은 외부의 값을 받아오는 것을 말함.
람다를 만드는 순간 외부의 값들을 어떻게 받아올 것인가.
= 은 복사를 하겠다.
&레퍼런스로 받아오겠다.
근데 전역함수는 복사되지 않는다.
지역변수는 파괴될 변수이기 때문에 람다에서 사용할 때 복사해서 만든다. 아래 코드에서 람다 안에있는 Value와 그 밖에 있는 Value의 주솟값이 다르다. 그래서 값을 바꾸는 것이 의미가 없기 떄문에 컴파일러가 안되게 막는다. const int로 받아버림
// 지역변수
int Value = 30;
FunctionPtr = [=]()
{
Value;
};
전역변수는 복사본을 사용하지 않고 그대로 가져다가 사용한다. 주솟값 같음. 그래서 값 변경도 가능하다.
람다캡쳐 표현식에 아무것도 없으면 “내부의 구성만으로 만들겠다. 외부 지역변수들 금지. (전역변수는 걍 쓰면 됨)
지역변수 가리키는 포인터 사용도 위험하다. 파괴된 위치의 주소를 사용하려는 것임.
[&] : 외부의 변수를 레퍼런스로 받는다.
[ ]안에 변수를 아예 명시할 수도 있음.
int Test1 = 0;
int Test2 = 10;
FunctionPtr = [Test1, &Test2]()
{
};
클래스 내에서는 this도 넘겨줄 수 있음. 멤버변수는 또 가능하다. 주소값 같은 애 씀.
class MyClass
{
public:
int Value;
std::function<void()> MemberPtr = nullptr;
void Test()
{
MemberPtr = [this]()
{
this.Value = 20;
}
}
}
라이브러리임.
EngineEditorGUI로 사용할거임
버튼 하나 만드는 것도 일반적으로는 코드로 내가 만들려고 하면 고생스러움.
깃허브 들어가서 docking 브랜치 버전으로 받기
같은이름 디버그윈도우 불가능
창 띄우려면 Begin(), End() 무조건해야함. Begin()에 이름 안넣어주면 터짐.
엔진에서 제공하는 gui창은 텍스트보여주는 디버그용 창 딱하나 만드신다고 하심.
순수가상함수 만들면 자식들 무조건 만들어야함
OnGui 순수가상함수로 만듦. 업데이트될게 없으면 디버그gui창 의미가 없으니가.
Init() 윈도우 처음 만들어질 때 실행
GERERATE_BODY 옮김 (엔진 수정사항)
{
std::string Msg = std::format("PlayerPos : {}\n",GetActorLocation().ToString());
UEngineDebugMsgWindow::PushMsg(Msg);
}
{
std::string Msg = std::format("MousePos : {}\n",GEngine->EngineWindow.GetScreenMousePos().ToString());
UEngineDebugMsgWindow::PushMsg(Msg);
}