멋쟁이사자처럼 X 넥슨 MOD Suppoters Hackathon 08 TIL

SeungjunRyu·2022년 7월 31일
0

Nexon MOD Project

목록 보기
8/15

Event와 컴포넌트 확장

Event System

  • Event: 객체와 객체 간에 주고받는 형식
  • System: MOD에서 이벤트 시스템을 쉽게 활용하도록 제공하는 API

  • Event: 로직 상에서 사건의 발생을 의미 (Event의 종류의 식별 정보, 추가 정보 소유)

  • Handler: 해당 Event를 받았을 때 처리하는 행동의 주체

  • Sender: 해당 이벤트를 발송하는 객체

    • 디버깅이 어렵고 순차적 행위 수행이 어렵다는 단점 보유

LogEvent

  • 우리가 이름을 붙이는 Event

    LogEvent 생성

![]

LogEvent에 message property 생성

myComponent 생성 및 Hadler와 function 추가


핸들러 등록 구조


엔티티 이벤트 시스템 구조

  • 컴포넌트는 각 엔티티를 중계자로 사용
  • 각 컴포넌트는 엔티티를 통해 핸들러를 등록

  • sender 역시 엔티티를 통해 이벤트를 발생

이벤트를 주고 받는 과정

  • 같은 엔티티일 때
  1. A 컴포넌트에서 특정 타이밍에 의해 엔티티로 발송
  2. 로그 이벤트를 수신하겠다고 등록한 컴포넌트로 이벤트 발송
  3. 해당 컴포넌트 이벤트 실행
  • 다른 엔티티일 때

  • rabbitEntity쪽으로 이벤트를 쏘면 rabbitComponent가 수신해서 rabbitComponent 안의 로그 메시지가 출력 되는 구조.

  1. 신호를 보내는 엔티티 쪽에서 component들이 이벤트 발송
  2. 받는 엔티티 쪽에서 신호를 받고 이벤트 수행

구현 방법
1. RabbitComponent에서 로그 이벤트 등록 후, MyComponent에서 rabbitEntity쪽으로 로그이벤트 발송 등록
2. RabbitComponent에서 로그 메시지 핸들 이벤트와 출력 등록(BeerEntity로 이벤트 발송 등록 X), 그리고 BeerComponent에서 등록한 로그 이벤트를 RabbitEntity로 보내 로그 출력

이벤트 처리

  1. 이벤트 처리할 컴포넌트와 엔티티 생성
  2. 핸들러 로직 추가
  3. 이벤트 발생 로직 추가

Entity

  • 엔티티 생성 : MOD에서 제공하는 _SpawnService 제공

    • SpawnByEntityTemplate : 배치된 엔티티 복제
    • SpawnByModelId : 워크 스페이스에 추가된 모델 중 한가지 모델을 지정해 생성
  • 엔티티 삭제 : 엔티티를 삭제 _EntityService:Destroy 또는 Entity:Destroy

  • 엔티티 유효성 체크

    • isvalid를 통해 유효성 체크
isvalidValue = isvalid(self.SpawnedEntity)
profile
만년초보 ing

0개의 댓글