- 스토리라인 기반의 자유로운 게임 플레이를 위한 게임 엔진 설계
- 레벨 관리를 좀더 다듬을 수 있을거 같은데..? 다만… 년도가 조금..
Event
이벤트는
- 어떤 물체로부터 전송된 것을 관찰함으로써 발생된 속성들의 변화를 뜻합니다.
- 무엇인가가 일어났음을 의미하는 소프트웨어적인 메시지를 뜻합니다. 미디와 같은 몇몇의 프로토콜들 또한 이벤트를 바탕으로 이루어져 있다.
프로그래밍 및 소프트웨어 설계에서 이벤트는 소프트웨어에 의해 인식되는 동작 또는 발생 이며, 종종 외부 환경에서 비동기적으로 발생하며 소프트웨어에 의해 처리 될 수 있습니다. 컴퓨터 이벤트는 시스템, 사용자 또는 다른 방식으로 생성 또는 트리거될 수 있습니다.
- 일반적으로 이벤트는 프로그램 흐름과 동기적으로 처리됩니다.
- 즉, 소프트웨어에는 이벤트가 처리되는 하나 이상의 전용 위치(흔이 이벤트 루프)가 있을 수 있습니다.
- 이벤트 소스에는 주변 장치를 통해 소프트웨어와 상호 작용할 수 있는 사용자가 포함됩니다. 예를 들어, 키보드로 입력합니다. 다른 소스는 타이머와 같은 하드웨어 장치입니다.
이벤트에 대한 응답으로 동작을 변경하는 소프트웨어는 종종 상호작용을 목표로 하는 이벤트 기반 소프트웨어라고 합니다.
Horror Engine
상호작용 가능한 액터중,
- 사용할 수 있는(문을 열거나, 키거나 하는) 액터는 Use 클래스를 상속받습니다.
- 먹을수 있는 아이템(종이, 비디오, 라이터) 액터는 Inspectable 클래스를 상속받습니다.
- 물리가 적용되는 액터는 PhysicsObject를 상속받습니다.
- 포탈도 Use클래스를 상속받습니다.
- Inspected는 (누군가 또는 무엇인가)를 자세히 관찰하여 일반적으로 그들의 상태를 평가하거나 결점을 발견합니다.
Horror Event
HorrorEventStruct은 각각에 대해 Event를 의미하는 작은 HE_Event 구조체들의 합으로 이루어져 있습니다. 구조체로 Environment, Player, Sounds, Quests, Levels, Subtitles로 카테고리를 구분합니다.
- 구조체를 이용하면, 이벤트가 동적으로 변했을 때, 저장과 로드를 복사만을 이용해서 할 수 있습니다.
- 다만, 새로운 이벤트를 추가할 때는, 구조체 자체를 바꿔야 합니다.
- 또한, 여러 이벤트를 지원하기 위해, 각각의 구조체는 배열에 저장됩니다.
- UObject로 하면, 추가 및 확장은 유용해도, 저장하는 코드를 작성해야 합니다. 개인적으로 무엇을 선택하는 것이 좋을지 애매하지만 게임의 규모에 따라 결정된다고 생각합니다.
이벤트 구조체를 받아서, 이벤트를 처리하는 코드는, HorrorEvents 클래스에 있습니다. HorrorEvent가 호출되면,
- AutoSave가 호출되고,
- 각각의 작은 구조체들에 대해서, 이벤트를 호출합니다.
- 참조전달 하지 않고, 복사 전달 하는 이유는 모르겠습니다…
- 따라서 Event를 추가한다면, 이를 실제 실행할 메서드를, HorrorEvents클래스에 추가해야 합니다.
- 각각의 액터의 이벤트는 예를 들어 TV가 켜짐, TV가 꺼짐은, 해당되는 클래스의 이벤트입니다.
저장과 로드
SaveGameComponent가 있고, 예를 들어 SaveGame 이벤트를 호출하면,
- 저장하고 싶은 정보를 수집하고 저장합니다.
- 이때 Useable은 Interface를 통해, 저장할 데이터를 수집합니다.
- SaveGameObject를 생성한 후, SaveGame합니다.