Home
home

이벤트 트리거 시스템

Observer components

각 옵저버 컴포넌트는 씬의 특정 오브젝트에 대해 특정한 관점으로 관찰하고, 그 상태를 플래그에 반영한다. 특정한 관점에 따라 네 종류의 옵저버 컴포넌트가 존재한다.
모든 옵저버 컴포넌트는 multiple 컴포넌트로서 한 오브젝트에 여러 개의 동일한 옵저버 컴포넌트를 붙일 수 있다.

position-observer

포지션 옵저버 컴포넌트는 이 컴포넌트를 가진 오브젝트가 특정한 목표 포지션과 일치하는지 관찰하여 그 상태를 플래그에 반영해준다.
{ goal : {type: 'vec3'}, tolerance : {type: 'number', default: 0.1}, flagName : {type: 'string'}, onWorldCoordinate : {default : false} }
JavaScript
복사
goal은 목표점의 위치벡터이다.
tolerance는 목표점과 이 오브젝트의 origin이 어느정도 근접해야 일치한 것으로 판단할 것인지를 나타낸다. 정확하게는 목표점과 오브젝트 origin 사이의 거리가 tolerance 이하일 경우 일치한 것으로 판단한다.
flagName은 포지션 일치 상태를 반영할 플래그의 이름이다. 등록되지 않은 플래그 이름을 입력하면 무시된다.
onWorldCoordinate는 goal이 월드좌표계를 따르는지 로컬좌표계를 따르는지 나타내는 부울 값이다.

rotation-observer

로테이션 옵저버 컴포넌트는 이 컴포넌트를 가진 오브젝트의 로테이션이 특정한 목표 오일러 각과 일치하는지 관찰하여 그 상태를 플래그에 반영해준다.
{ goal : {type: 'vec3'}, tolerance : {type: 'number', default: 0.1}, flagName : {type: 'string'}, onWorldCoordinate : {default: false} }
JavaScript
복사
goal은 목표로 하는 오리엔테이션에 대한 오일러 각이다. 오일러 각의 축 순서는 오브젝트의 오일러 순서를 따른다.
tolerance는 goal과 오브젝트의 오리엔테이션이 온전히 일치하기 위해서 한번의 임의의 축을 기준으로 한 회전을 한다고 할때의 회전량의 절반에 대한 임계값을 호도법으로 나타낸 값이다. 실제 차이가 이 값을 넘지 않으면 일치한 것으로 판단한다.
flagName은 회전 일치 상태를 반영할 플래그의 이름이다. 등록되지 않은 플래그 이름을 입력하면 무시된다.
onWorldCoordinate는 goal이 월드좌표계를 따르는지 로컬좌표계를 따르는지 나타내는 부울 값이다.

scale-observer

스케일 옵저버 컴포넌트는 이 컴포넌트를 가진 오브젝트의 스케일이 특정한 목표 스케일 벡터와 일치하는지 관찰하여 그 상태를 플래그에 반영해준다.
{ goal : {type: 'vec3'}, tolerance : {type: 'number', default: 0.1}, flagName : {type: 'string'}, onWorldCoordinate : {default : false} }
JavaScript
복사
goal은 목표로 하는 스케일 벡터이다.
tolerance는 goal과 오브젝트의 스케일 벡터 차의 magnitude 임계 값이다. 이 값을 넘지 않으면 일치한 것으로 판단한다.
flagName은 스케일 일치 상태를 반영할 플래그의 이름이다. 등록되지 않은 플래그 이름을 입력하면 무시된다.
onWorldCoordinate는 goal이 월드좌표계를 따르는지 로컬좌표계를 따르는지 나타내는 부울 값이다.

collision-observer

콜리전 옵저버는 이 컴포넌트를 가진 오브젝트가 다른 특정한 오브젝트와 충돌된 상태인지 관찰하여 그 상태를 플래그에 반영해준다.
{ target : {type: 'string'}, flagName : {type: 'string'} }
JavaScript
복사
target은 충돌 대상의 id이다. 입력할때 '#'을 접두사로 붙여주어야 한다.
flagName은 충돌 상태를 반영할 플래그의 이름이다. 등록되지 않은 플래그 이름을 입력하면 무시된다.

detection-observer

디텍션 옵저버는 active-marker 엘리먼트에 조합되었을 때에만 유효하다. 워크스페이스에서 AR 사용자가 디텍션 옵저버가 달린 액티브 마커를 인식하게 되면, 마커를 인식한 AR 사용자를 제외한 모든 사용자에게 해당 마커가 인식되었음이 전파되며, 이들은 플래그를 true로 설정한다.
{ validDuration : {type: 'number', default: 100}, flagName : {type: 'string'} }
JavaScript
복사
validDuration은 마커 디텍션 알림이 유효하다고 인정하는 시간이다. 즉, 해당 시간 동안만 플래그가 true로 설정되며, 해당 시간이 지난 후에는 플래그를 false로 되돌린다. mili-second 단위이다.
flagName은 마커 인식 상태를 반영할 플래그의 이름이다. 등록되지 않은 플래그 이름을 입력하면 무시된다.

flag

flag 컴포넌트는 On/Off(True/False) 상태를 갖는 불리언 변수를 내장하며 그 값은 옵저버에 의해서만 갱신될 수 있다.
{ name : {type: 'string'}, inverse : {type: 'boolean'} }
JavaScript
복사
flag의 스키마는 위와 같다. name 프로퍼티는 플래그의 이름인데 서로 다른 플래그더라도 같은 이름을 가질 수 있다. 이런 경우 그 플래그들은 항상 동시에 업데이트되어 같은 상태를 갖는다.
inverse 프로퍼티는 그 플래그의 값을 평가할 때 반전시킬지 결정하는 불리언 값이다. 예를 들어 같은 name을 갖는 플래그 한 쌍 있는데 하나는 inverse가 true이고 다른 하나는 false라면 둘은 항상 플래그 값이 서로 다르게 평가된다.

trigger

트리거 컴포넌트는 다른 트리거 또는 플래그를 자식으로 가져서 하나의 부울변수식을 대변한다. 트리거도 플래그와 같이 On/Off(True/False)의 상태를 갖는데 이 상태는 자식 트리거나 자식 플래그들이 갱신됨에 따라 자동적으로 갱신되며 직접 상태 값을 수정할 수 없다.
{ type : {default: 'and', oneOf:['and', 'or']}, inverse : {type: 'boolean'}, risingEdgeEvent : {type: 'string'}, fallingEdgeEvent : {type: 'string'} }
JavaScript
복사
트리거는 AND타입과 OR타입이 있으며 AND타입 트리거는 자식들이 모두 ON(true) 상태일 때 자신도 ON이되고, OR타입 트리거는 자식들 중 하나 이상 ON 상태라면 자신도 ON이된다. 자식이 하나도 없는 트리거이며 타입이 AND라면 ON 상태이고, 타입이 OR라면 OFF 상태가 된다. 이를 통해 상수 플래그 역할을 할 수 있다.
또한 플래그와 마찬가지로 inverse 옵션이 있어 평가되는 값을 반전시킬 수 있다.
트리거는 OFF에서 ON으로 갱신되는 순간(rising edge)과 ON에서 OFF로 갱신되는 순간(falling edge)를 구분하여 서로 다른 이름의 이벤트를 emit할 수 있다.

event-capturer

트리거가 발생시킨 이벤트는 항상 씬의 루트인 a-scene 엘리먼트에서 emit된다. A-Frame의 이벤트는 버블링만 지원하고 캡처링을 지원하지 않기 때문에 a-scene 하위 엘리먼트가 이러한 이벤트를 수신하기 위해서는 이벤트 캡처러 컴포넌트를 통해 캡처해야한다.
{ targetEvent : {type : 'string'} }
JavaScript
복사
targetEvent라는 하나의 프로퍼티를 갖는데 캡처할 이벤트 이름이다. targetEvent에는 ',' 를 구분자로 하여 여러 개의 이벤트 이름을 작성할 수 있으며 이렇게 나열된 모든 이벤트를 캡처링한다. 캡처된 이벤트는 이 컴포넌트를 가진 엔티티에서 버블링되지 않는 이벤트로서 다시 emit된다. multiple 컴포넌트이기 때문에 여러 이벤트에 대한 캡처를 위해 여러 개의 event-capturer를 사용할 수도 있지만 이러한 방식은 비권장하며 ','를 구분자로 나열하는 방식을 권장한다.

뷰('td-mode-controls' component)

3D 모드 인터페이스에서 flags탭에 보여지는 트리뷰이다. 플래그와 트리거로 구성된 트리를 보여주며 플래그는 항상 종단 노드이다. 서로 분리되어 있는 복수 개의 트리가 존재할 수있으며 각 트리가 하나의 부울변수식을 대변한다.
플래그는 괄호 안에 이름을 표시해주고 inverse 플래그인 경우는 이름 앞에 !를 붙여서 표시해준다.
트리거나 플래그의 값은 각 노드 뷰의 우측에 깃발 모양의 아이콘으로 표시해준다. ON 상태일때 깃발이 표시되고 OFF 상태일때는 사라진다.