www.youtube.com/watch?v=1ufYQA8dex0&list=PLqCJpWy5Fohd3S7ICFXwUomYW0Wv67pDD&index=6
Event Class
Type - 마우스 이벤트가 어떤 상황에서 발생했는지를 지정하기 위한 열거형 변수 타입.
LPress - 마우스 왼쪽 키가 눌렸을 때 발생하는 이벤트
LRelease - 마우스 왼쪽키가 눌렸다가 다시 띄워젔을때 발생하는 이벤트
RPress - 마우스 오른키가 눌렸을 때 발생하는 이벤트
RRelease - 마우스 오른키가 눌렸다가 다시 띄워젔을때 발생하는 이벤트
WheelUp - 마우스 휠이 위쪽으로 움직였을 때 발생하는 이벤트
WheelDown - 마우스 휠이 아래쪽으로 움직였을 때 발생하는 이벤트
Move - 마우스가 움직였을 때 발생하는 이벤트
Enter - 마우스가 윈도우 창 안에 들어왔을 때 발생하는 이벤트
Leave - 마우스가 윈도우 창 밖으로 나갔을 때 발생하는 이벤트
Invalid - 유효하지 않는 마우스 이벤트를 위해 만든 타입
Type type
- 해당 이벤트가 어떤 이벤트인지를 지정하기 위한 변수.
bool leftIsPressed
- 마우스 왼쪽키가 눌렸는지를 파악하기 위한 변수
bool rightIsPressed
- 마우스 오른키가 눌렸는지를 파악하기 위한 변수
int x
- 마우스의 위치 x좌표값을 가지고 있는 변수
int y
- 마우스의 위치 y좌표값을 가지고 있는 변수
Event()
- Event class 기본 생성자이고 아무 전달 인자 값이 없을 경우 기본적인 타입은 Invalid 타입을 설정하고
leftIsPressed, rightIsPressed를 false로 설정해주고 x좌표와 y좌표를 0으로 설정해줍니다.
Event(Type type, const Mouse& parent)
- Event class 전달 인자 값이 있을 경우 Mouse class 객체를 전달해주는데 해당 Mouse class의 leftIsPressed와 rightIsPressed, 그리고 위치 값을 가져와서 할당해줍니다.
bool IsValid()
- 마우스가 유효한 상태인지를 확인하기 위해서 사용하는 함수입니다. 단 여기서는 유효한 상태임을 확인하기 위해서
type 변수가 InValid가 아닌 상태 즉 Release나 Press 상태인지를 검사하는 것입니다.
Type GetType()
- 이벤트가 어떤 타입인지를 반환해주는 함수
std::pair<int, int> GetPos()
- 위치값을 전달해주는 함수인데 x값과 y값을 동시에 반환해주기 위해서 pair를 사용해서 전달해줍니다.
int GetPosX()
- x값을 반환해줍니다.
int GetPosY()
- y값을 반환해줍니다.
bool LeftIsPressed()
- 마우스 왼쪽 키가 눌렸는지를 파악하기 위한 함수입니다.
bool RightIsPressed()
- 마우스 오른키가 눌렸는지를 파악하기 위한 함수입니다.
Mouse Class
생성자
Mouse() = default
- 컴파일러가 생성해주는 기본적인 생성자를 사용하겠다는 의미입니다. Mouse() {}와 동일
Mouse(const Mouse&) = delete
Mouse& operator=(const Mouse&) = delete
- 컴파일러가 생성해주는 기본적인 생성자를 사용하지 않겠다는 의미입니다.
복사 생성자를 방지하기 위해서 사용하고 있습니다.
Mouse m1;
Mouse m2(m1); // error발생
또는 m1 = m2 // error 발생
변수
static constexpr unsigned int bufferSize = 16u
- 한번에 처리할 수 있는 event buffe의 사이즈를 지정해서 event가 밀리는 것을 방지할 수 있습니다.
int x
- 마우스 위치의 x값을 담는 변수
int y
- 마우스 위치의 y값을 담는 변수
bool leftIsPressed = false
- 마우스 왼쪽 키가 눌렸는지에 대한 boolean 타입 변수
bool rightIsPressed = false
- 마우스 오른키가 눌렸는지에 대한 boolean 타입 변수
bool isInWindow = false
- 마우스가 윈도우 창 영역 안에 있는지에 대한 boolean 타입 변수
int wheelDeltaCarry
- 마우스 휠을 움직이는 속도를 조절하는 변수인 것 같습니다
std::queue<Event> bufffer
- Queue 자료구조는 FIFO(First In Firest Out)이므로 Event를 담아놓고 처리하기에 유용합니다. Event를 계속 Queue에 넣고 넣어진 순서대로 처리하게 됩니다.
함수
std::pair<int, int> GetPos() const noexcept
- 마우스의 위치값 x와 y 모두를 반환해주는 함수
int GetPosX() const noexcept
- 마우스 위치의 x값을 반환해주는 함수
int GetPosX() const noexcept
- 마우스 위치의 y값을 반환해주는 함수
bool IsInWindow() const noexcept
- 마우스가 윈도우창 영역 안에 있는지에 대한 변수인 isInWindow를 반환해주는 함수
bool LeftIsPressed() const noexcept
- 마우스 왼쪽키가 눌렸는지 알 수 있는 변수인 leftIsPressed 변수를 반환해주는 함수
bool RightIsPressed() const noexcept
- 마우스 오른쪽키가 눌렸는지 알 수 있는 변수인 rightIsPressed 변수를 반환해주는 함수
Mouse::Event Read() noexcept
- 클래스 변수인 buffer라는 변수에서 pop을 해서 pop 한 Event를 반환해주는 함수
bool IsEmpty() const noexcept
- buffer queue가 비었는지를 확인하는 함수
void Flush() noexcept
- buffer queue를 모두 깨끗하게 정리하기 위한 함수
void OnMouseMove(int x, int y) noexcept
- 마우스가 움직였을 때 이벤트를 처리해주는 함수. 함수 전달 인자값으로 온 x값과 y값으로 Mouse class의 변수인 x와 y를 할당해주고 buffer에다가 해당 Mouse class가 움직였다는 이벤트를 push, 단 밑에서 설명할 TrimBuffer를 통해서 해당 queue의 size가 bufferSize보다 작아질 때까지 Pop
void OnMouseLeave() noexcept
- 마우스가 윈도우 창 영역을 벗어났을 때 이벤트를 처리해주는 함수. isInWindow를 false로 만들어주고 buffer에 마우스가 윈도우창 영역을 벗어났다는 이벤트를 push
void OnMouseEnter() noexcept
- 마우스가 윈도우 창 영역 밖에서 안으로 들어왔을 때 이벤트를 처리해주는 함수. isInWindow를 true로 만들어주고 buffer에 마우스가 윈도우창 영역에 들어왔다는 이벤트를 push
void OnLeftPressed(int x, int y) noexcept
- 마우스 왼쪽키가 눌렸을 때 이벤트 처리를 해주는 함수. leftIsPressed를 true로 만들어 주고 buffer에 마우스 왼쪽 키가 눌렸다는 이벤트를 push
void OnLeftReleased(int x, int y) noexcept
- 마우스 왼쪽키가 띄워졌을 때 이벤트 처리를 해주는 함수. leftIsPressed를 false로 만들어 주고 buffer에 마우스 왼쪽 키가 띄워졌다는 이벤트를 push
void OnRightPressed(int x, int y) noexcept
- 마우스 오른키가 눌렸을 때 이벤트 처리를 해주는 함수. rightIsPressed를 true로 만들어 주고 buffer에 마우스 오른 키가 눌렸다는 이벤트를 push
void OnRightReleased(int x, int y) noexcept
- 마우스 오른 키가 띄워졌을 때 이벤트 처리를 해주는 함수. rightIsPressed를 false로 만들어 주고 buffer에 마우스 오른 키가 띄워졌다는 이벤트를 push
void OnWheelUp(int x, int y) noexcept
- 마우스 휠이 위쪽으로 움직였을 때 이벤트 처리를 해주는 함수. buffer에 마우스 휠이 위로 움직였다는 이벤트를 생성 후 buffer에 push
void OnWheelDown(int x, int y) noexcept
- 마우스 휠이 아래쪽으로 움직였을 때 이벤트 처리를 해주는 함수. buffer에 마우스 휠이 아래로 움직였다는 이벤트를 생성 후 buffer에 push
template<typename T>
static void TrimBuffer(std::queue<T>& buffer) noexcept
- 아까 위에서 여러번 언급했듯이 TrimBuffer 함수는 typename을 통해서 인자 값을 전달된 여러 유형의 queue를
bufferSize보다 아래만큼 pop을 해서 size를 줄여주는 함수
void OnWheelDelta(int x, int y, int delta) noexcept
- 마우스 휠의 움직임을 관리해주는 함수. delta값만큼 Mouse class의 변수인 wheelDeltaCarry의 값을 변화시키고 wheelDeltaCarry를 WHEEL_DELTA값을 기준으로 이벤트는 전달해주되 wheelDeltaCarry를 초기값으로 유지시키기 위한 함수
'game dev > directX 3D' 카테고리의 다른 글
DirectX 3D 8일차 - App Class (0) | 2021.04.12 |
---|---|
DirectX 3D 7일차 - 타이머, 예외처리 클래스(MyTimer, MyException) (0) | 2021.04.12 |
DirectX 3D 5일차 - 키보드 클래스(Keyboad Class) (0) | 2021.04.12 |
DirectX 3D 4일차 - 윈도우 메시지 사용해보기 (0) | 2021.04.11 |
DirectX 3D 3일차 - 윈도우 메시지 사용해보기 (0) | 2021.03.29 |