본문 바로가기

Programming/Architecture

Architecture my OpenGL engine core3

일단 가장 큰 자료의 마지막에 도달했어요. 이번 컨트롤 전반적인 설계를 포스팅 하고 난 후에는 구현을 하느라 몇 일 동안 포스팅은 어려울 듯 하지만, 그래도 최대한 후다닭 해보도록 노력해야죠 :)
  • 컨트롤 설계

    역시 일단 추상적인 생각부터 해야 겠죠.
    • 장비(Device)와 입력(Input)

      컨트롤은 임의의 장비(Device)로 부터 임의의 신호(Input)를 받아서 처리 해주는 거에요.
      임의라는 말은 일반화 되어 있지 않은 추상 클래스로 만들어야 겠죠?


      컨트롤의 입장에서는 여러 개의 Device들을 가질 수 있어요. 키보드, 마우스, 조이스틱, 카메라, ... 그것들은 모두 Device를 상속 받겠죠? 그럼 아래와 같은 설계를 생각할 수 있을 거에요.

    • 액션(Action)과 액션 맵(ActionMap)

      신호를 받았으면 처리를 해줘야 겠죠?

      일단 처리라는게 무엇인지 생각해 볼 필요가 있더라구요. FPS의 전형적인 키 입력을 예시로 들어 볼게요.

      "W"키를 누르면 플레이어는 앞으로 이동한다.
      "S"키를 누르면 플레이어는 뒤로 이동한다.
      "A"키를 누르면 플레이어는 좌측으로 이동한다.
      "D"키를 누르면 플레이어는 우측으로 이동한다.

      이걸 약간 일반화 시키면 아래와 같이 되겠죠.


      그렇다면 일련의 Action들이 있어야 저런 공식을 따라 갈 수 있겠죠. Action자체는 추상적이에요. 위의 예시에서는 이동에 관한 것만 했지만, 시야를 돌리기 위한 회전도 있을 테고, 공격, 무기 바꾸기 등등 많이 있으니까요. Action에 대한 예시까지 만든 설계는 아래와 같아요.


      하지만, Action만 "구성" 해놓는다고 끝나는 건 아니죠. 어떤 Input과 관련이 있는지를 서로 연관 시켜줘야, 완전히 공식이 만들어 지겠죠. 그럼 액션맵(ActionMap)역시 그러한 짝(Pair)들을 가지고 있어야 하구요.

    • 액션맵과 컨트롤의 관계

      입력과 액션의 관계를 짝지은 부분은 모두 구성해 놨는데, 뭔가 허전하죠? 컨트롤과의 관계는 아직 정해 지지 않아서 그런 거 에요. 입력을 받는 부분은 어디까지나 컨트롤(CONTROL) 클래스 인데, 입력 찾는 부분이 아직은 설계가 안되있잖아요?

      처음에 언급했던, "처리" 라는 부분이 여기에서 이루어 지는 거죠.
      그리고 이 처리를 진행하는 과정에서 필요한 것은 ActionMap이에요. 어떤 행동을 해야 하는지 자체를 알아야 control 하는 게 가능하니까요. 하지만 그 자체를 변수로써 가지고 있지는 않을 거에요. 인덱스나 포인트로 가지고 있어야 해요.

      그렇다면 구성은 아래와 같이 이루어 지죠.

    • DISPLAY와 AactionMap의 관계

      게임 하나를 실행 했다는 가정을 했어요. 보통 화면 구성별로 넘어가는 UI화면으로 흐름도를 나열하니까, 그것들 처럼 생각 해 봤어요.


      각 DISPLAY별로 사용되는 행동 양식들이 다르죠. 그리고 저러한 행동 양식들은 UI가 같지 않는 이상 겹치지도 않아요.
      다른 측면에서 바라본다면 하나의 DISPLAY에서는 해당 부분 안에서 정해진 행동만 한다는 거죠.

      위의 내용을 설계 하면 아래처럼 될거에요.


      이렇게 보고 나면, CONTROL이 ActionMap자체를 따라갈 필요는 없게 되죠.

      현재 활성화 되어 있는 Display가 어떤 것이냐에 따라서 적용 되는 ActionMap이 정해져 있으니까, CONTROL은 현재 활성화 되어 있는 Display가 뭔지만 알고 있으면 거기에서 ActionMap을 가지고 오는 거죠.



컨트롤에 관련된 부분은 내부적으로 어떻게 구현했느냐가 중요하지만 설계가 다른 부분에 비해서 복잡하거나 많지는 않아서 빨리 끝났네요.
DISPLAY가 여러 개 일 수도 있다라는 이야기는 앞선 포스팅에서 해야 했지만, 그렇게 되면 여기에서 설명할 내용이 바로 와닿지는 않을 거 같아서 나눠 놓았어요.

현재 제가 진행하고 있는 엔진 부분에 대한 설계가 어느정도 되었으니까 이제 구현을 해야 겠어요:D

포스팅 도입부에 얘기 했다시피 이 부분이 얼마나 걸리느냐에 따라서 다음 진행이 언제 될지가 달라지기 때문에 포스팅의 잠정적 보류가 되겠네요ㅜㅋ

'Programming > Architecture' 카테고리의 다른 글

Architecture my OpenGL engine core2  (0) 2012.08.10
Architecture my OpenGL engine core1  (0) 2012.08.07
06 Collaboration Diagram  (0) 2012.07.21
05 Sequence Diagram  (2) 2012.07.14
04 Statechart Diagram  (2) 2012.07.10