이번 글에서는 AAI Programmable Structures의 핵심인 스캐너와 컨트롤러, 그중에서도 타일, 지역, 유닛정보 스캐너/컨트롤러에 대해 설명을 하고자 함


0. 스캐너/컨트롤러란?


스캐너와 컨트롤러 들은 이렇게 생겼음

다른것들은 다 스캐너와 컨트롤러가 쌍으로 있지만 타일스캐너는 타일컨트롤러 없이 단독으로 존재함

당연히 타일자체를 컨트롤 할수는 없기 때문


스캐너는 스캔을 하고자 하는 대상을 입력으로 넣으면 그 대상에 대한 정보를 출력으로 얻을 수 있음

컨트롤러는 조정하고자 하는 대상과 어떻게 조정할지에 대한 내용을 신호입력으로 넣으면 그에 맞게 대상이 조정이 됨

걍 말로만 하면 이게 뭔소린가 싶으니 하나하나 알아보도록 하자


각 건물들 기능에 대한 간단한 요약

타일스캐너

입력:좌표

출력:해당 좌표에 존재하는 것들에 대한 정보



지역스캐너

입력:지역(ZONE)

출력:해당 지역의 좌표

지역컨트롤러

입력:지역의 종류, 좌표

결과:해당좌표에 지역을 설정할 수 있음

유닛스캐너

입력:유닛ID

출력:해당 유닛의 좌표/속도/각도/체력

/보유중인아이템/설정된경로 등등

유닛컨트롤러

입력:유닛ID, 속도/각도 or 좌표, 경로

결과:설정한대로 유닛이 움직임

유닛정보스캐너

입력:유닛ID

출력:해당 유닛의 유닛데이터

유닛정보컨트롤러

입력:유닛ID, 설정하고자하는 유닛데이터

결과:기존의 유닛데이터를 덮어 씌움

경로스캐너

입력:경로신호/웨이포인트신호

출력:해당 경로/웨이포인트에 대한 정보

경로컨트롤러

입력:경로신호/웨이포인트신호, 좌표, 유닛ID

결과:원하는 좌표 또는 유닛ID 등으로 경로를 지정함


이거는 간략하게만 정리한 것이니 자세한 건 각 문단에서 확인


1. 타일스캐너

일단 스캐너들은 이렇게 생겼다

스캐너의 왼쪽은 신호를 입력하는 곳이고 스캐너의 오른쪽은 출력 신호가 나오는 곳임

저기를 누르면 아래와 같은 창이 뜬다.


출력으로 어떠한 항목들이 나오는지를 알 수 있음

체크박스를 풀면 원하지 않는 정보는 뜨지 않게할 수도 있다.


틱제한은 기본으로 1로 되어있는데 이러면 1틱당 한번의 스캔을 수행함

만약 60으로 설정한다면 60틱(1초)마다 스캔을 수행함


틱을 2이상으로 설정했을때 출력펄스를 체크한다면 1틱만 출력이 나오고 그 다음 스캔을 수행할 때까지 출력이 나오지 않음

출력펄스를 체크하지 않는다면 한번 스캔 후 그 다음 스캔을 할때 까지 마지막 스캔 정보가 출력으로 유지 됨




실제로 어떻게 사용하는지 모습을 보자


스샷을 보면 빨간 전선으로 일정신호조합기에서 나오는 입력을 넣어주고 있고

초록 전선으로는 출력을 뽑아내고 있음

앞으로 스캐너에 대한 설명을 할때는 전부 이런식으로 할 거임


입력으로 X와 Y좌표를 넣어주자 출력으로 뭔가 나오고 있는 것을 알 수 있음

좀 생소할만한 신호들도 있으니 간단한 설명


5635

해당 좌표에는 철광석 자원이 있기 때문에 철광석이 얼마나 있는지 출력이 되고있음


는 표면(surface)신호인데 현재 해당하는 surface의 고유번호를 나타냄

기본적으로 플레이어가 시작하는 surface인 nauvis부터 1번을 받게됨

우주를 개척해서 다른 행성으로 가게 된다면 차례대로 다른 번호를 받는다

지금은 지역스캐너의 입력으로 XY 좌표만 넣었는데 표면신호를 같이 넣으면 다른행성에 대한 정보도 얻을 수 있음


는 토지(land)신호다. 해당지점이 땅이라는 뜻


5637

이곳에는 물웅덩이가 존재함


는 물(water)신호다. 해당지점이 물이라는 뜻

근데 사실 지금 스샷 보면 이게 아니라 검정색 신호(void)가 나오고 있음. 일단은 버그라고 생각하는데 알아보긴 해야할듯

5640

이곳에는 강철 상자가 존재함

출력으로 강철 상자가 찍혀있는걸 확인할 수 있음

5641

이곳에는 유닛 ID의 값이 25인 홀러가 존재함

해당 ID가 출력으로 나오고 있고, 또 홀러 자체에 대한 신호도 같이 나오고 있음

근데 왜 값이 2인지는 모르겠음. 수동차량이면 1로뜨고 AI 차량이면 2로 뜨더라

5242

이곳에는 가 있는데 밑에서 설명하겠지만 이건 지역(zone)을 설정한 것임

이 지역 시그널이 출력으로 나오는 것을 볼 수 있음




이렇게 원하는 지점의 좌표를 입력으로 넣으면 그 좌표에 대해 정보들을 얻을 수 있다


타일스캐너 입력으로는 좌표외에 거리(range) 신호도 사용을 할 수 있음

좌표 없이 거리신호만 넣으면 아래와 같이 동작함



현재 타일스캐너의 위치를 기준으로 거리 10이내에 있는 좌표들에 대해 랜덤으로 스캔을 수행하게 됨

거리10이라 함은 반지름이 10인 원을 그리는 것은 아니고 반지름이 10인 정사각형(20x20 범위) 이라고 보면 된다


만약 거리신호+좌표를 함께 입력으로 넣어주면 설정한 좌표를 기준으로하여 설정한 거리 내에 있는 좌표들에 대해 랜덤 스캔을 수행함



2. 지역 스캐너/컨트롤러


일단 지역이 뭔지를 알아보자



지역은 지역 계획기를 이용하여 지정할 수 있음


지역 유형에는 총12가지의 색상이 있으며 17종류의 유형이 있음

즉 총 12*17=204가지의 지역유형이 있을 수 있다는 뜻이다.

원하는 유형을 선택한 후 드래그를 하면 지역이 설정되고, Shift+드래그를 하면 설정한 지역이 제거 된다


이렇게 단순히 지역만 설정하는건 그냥 뽀대용에 불과함

지역을 유의미하게 사용하고자 한다면 지역스캐너/지역컨트롤러를 통해 제어를 해야한다.



지역스캐너의 출력물 종류


(타일스캐너와 마찬가지로 입력은 빨간신호, 출력은 초록신호)

지역을 임의로 10칸 설정해 주었음

지역스캐너의 입력으로 1을 넣어주면 가장 첫번째로 설정된 지역의 좌표가 출력으로 나오는 것을 볼 수 있음


유형수량(count) 신호도 나오는 것을 볼 수 있는데 이것은 현재 설정한 지역이 총 몇개나 있는지를 의미함

지역이 총 10칸이 있기 때문에 10이 나오는 것을 알 수 있음


지역스캐너의 입력으로 10을 넣어주면 10번째로 설정한 지역의 좌표에 대하서 알 수 있음


스샷에는 없지만 -1 같은 값도 넣을수 있는데 이러면 가장 마지막에 설정한 지역에 대해 얻을 수 있음




신호를 이용하여 다음과 같은 회로를 생각해볼 수 있음

(대충 신호를 계속 1씩 증가시키되 의 값에 도달하면 다시 1로 돌아가게 하는 회로)


이렇게 구성을 해두면 출력이 다음과 같이 나오는 것을 볼 수 있음


모든 지역을 순회하면서 각 좌표를 얻을 수 있다



지역컨트롤러의 사용법은 다음 gif를 보면 바로 알수 있을 것이라고 생각함

좌표와 지역 신호를 함께 지역컨트롤러에 입력해주면 해당좌표에 지역을 설정하게 됨

만약 지역 신호 없이 오직 좌표만 지역컨트롤러에 입력한다면 해당 좌표의 지역을 제거하게 됨


사실 여기까지만 보면 그래서 이걸 어디다 쓰냐고? 라는 생각이 들 수 있음

간단한 사용예시를 들어보자면

1. (타일스캐너) 랜덤하게 좌표를 검색한다.

2. 랜덤좌표 검색 결과 철광석이 나왔다.

3. (지역컨트롤러) 해당 좌표를 입력으로 받아 지역A 마킹을 한다.

4. (유닛컨트롤러) 설정한 지역A로 채굴차량을 보낸다.

이런 시나리오를 생각해볼 수 있음


위의 시나리오에 이어 하나 더 생각해보자면

1.(지역스캐너) 지역A에 대해 루프를 돌면서 좌표를 얻는다.

2.(타일스캐너) 해당좌표에 철광석이 아직 남아있는지 확인한다.

3.스캔 결과 철광석이 다 떨어진 곳이 있다.

4.(지역컨트롤러) 해당좌표에 마킹된 지역A를 제거한다.

5.(유닛컨트롤러) 해당좌표에 있던 채굴차량을 다른곳으로 이동시킨다.

이런것도 생각을 해볼 수가 있음


이걸 잘하게 된다면 채굴완전자동화를 꿈꿀수도 있을것이고, 만약 검색 타겟이 광석이 아니라 바이터 둥지일 경우에는 전투 자동화도 꿈 꿀 수 있을것임

결국은 유닛컨트롤러를 잘 써야하는데 이건 다음 글에서 다룰 예정


3. 유닛 정보 스캐너/컨트롤러

1편을 보았다면 유닛 데이터가 뭔지는 알것임


차량을 한대 배치하고 유닛데이터가 뭔지를 일단 확인해 보았음

해당차량의 홀러ID는 16, 유닛ID는 36이며 위와같이 유닛데이터가 설정되어있음


한편 유닛 정보 스캐너를 통해 얻을 수 있는 정보는 다음과 같음



유닛 정보 스캐너는 두 종류의 입력을 받을 수 있음

차량 ID 또는 유닛 ID를 입력으로 넣는다.


이렇게 홀러ID 16 또는 유닛ID 36을 넣을 경우

해당 유닛의 유닛데이터가 출력으로 나오는 것을 볼 수 있음


유닛 데이터 외에도

현재 유닛이 몇종류인지 를 통해 확인할 수 있고(총 16대 있음)

를 통해 어느 surface에 있는지 알 수 있고


또는 각 차량ID 신호를 얻을 수도 있음




유닛 정보 컨트롤러의 사용법도 간단함

차량ID 또는 유닛ID와 함께 설정하고 싶은 유닛 데이터 정보를 입력해보자.


해당차량의 유닛데이터를 확인해보니 원하는대로 변경된 것을 볼 수 있음

실물 아이템도 유닛데이터로 넣을 수 있고 가상 신호도 유닛데이터로 넣을 수 있다.


내친김에 몇가지 가상신호들을 더 넣어 봤음

대부분의 가상신호는 잘 설정이 되지만 안되는 신호가 몇개 존재함

유닛ID신호, 차량ID신호, 표면(surface)신호, 유형수량(count)신호는 아무리 설정을 하려해도 반영이 되지 않음

유닛 정보 스캐너를 통해 출력으로 얻을 수 있는 신호 유형이면 설정 또한 안된다고 보면 된다






다음 글에서는 유닛 스캐너/컨트롤러, 경로 스캐너/컨트롤러를 마저 설명할 예정인데 언제가 될지 모르겠네

유닛 컨트롤러가 너무 귀찮다