요약
이거 만드는법과 원리 설명 + 청사진 밑에 올림, 응용처 소개
회로 네트워크의 아주 기본적인 동작 방법은 알고 있다고 가정하고 최대한 쉽게 썼는데
아예 회로네트워크가 뭔지도 모른다 하면 개념글에 기초설명 있었던걸로 기억하니 정 모르겠으면 그거부터 보셈.
용도는?
무한연구 하면서 연구 종류에 따라 보라팩/군사팩 둘 중 하나만 소모하니까
기차->상자->연구소 이렇게 셋업했을 때 모든 연구팩을 동일한 개수만큼 계속 공급하면
상자랑 투입기가 하나뿐이다 보니 결국엔 다른건 다 소모하고 군사팩 아니면 생산팩만 남게 되니까 상자가 꽉 차서 막힘.
결국 손으로 빼기 전까진 연구가 멈출 수도 있을 거임.
그래서 어떻게 할까 고민하다 묶음투입기 필터 조절하는 회로네트워크로 해결봄
작동은?
1.개요
기차가 역에 정차하면 빨간색 네모친 회로가지고 일정신호 조합기에 있는 내용들 돌아가면서 필터로 설정해주고
노란색으로 표시한 상자 내용물 읽어서
파란색 네모로 표시한 쪽에서 꽉찬거는 판단해서 필터 신호 제거해줌
따라서 지정된 값보다 상자에 적은 양이 있으면 그 아이템 필터 신호는 돌아가면서 묶음 선별 투입기에 전달되서 상차되고
많으면 필터 신호가 안가니까 상차 안함
최종적으로 필터 투입기에 전달되는 필터 설정 신호는 빨간색 과 파란색 박스에서 출력하는 신호의 합임
아래 자세한 설명을 읽으면서 예제 블프를 받아서 일정신호 조합기 값을 이거저거 건드려 보면 이해에 도움이 될거라고 생각함.
2. 묶음 선별 투입기 설정
묶음 선별 투입기는 회로에 연결하고 투입기가 옮길 수 있는 아이템 종류를 입력해 주면 그 아이템으로 필터가 고정된다.
위 짤처럼 '필터 설정' 을 체크 했을때 그렇다는 것.
예를 들어 이 빨간 전선에 연결된 경우에는
보라팩 신호가 투입기에 전달되므로
수동으로 보라팩만 옮기도록 설정한 묶음 선별 투입기와 동일하게 보라팩만 집을 수 있고 다른 아이템은 건들지 못한다.
근데 지금 보이듯이 허용 목록에 직접 지정할 수 있는 신호는 1개 뿐이다.
따라서 여러 종류 아이템을 하나의 묶음 선별 투입기만 사용해서 옮기고 싶으면 모종의 방법으로 여러 신호를 번갈아가며 회로 네트워크로 입력해줄 필요가 있다.
그럼 그 방법을 알아보자.
3. 여러 종류의 아이템을 돌아가면서 필터 신호로 내보내는 방법(빨간색 박스)
먼저 빨간색 박스를 살펴보자.
위에서 부터 설명하는게 이해가 편할 것 같으니 위에 있는 수량 비교 조합기부터 보셈.
입력으로 뭔가 정신없이 바뀌는 신호를 받고
출력으로는 7종 과학팩 신호를 1틱마다 바뀌면서 내보내고 있음.
이 신호가 바로 바로 위에서 본 투입기에 전달될 신호임.
출력으로 R 도 같이 투입기에 전달되지만 아이템 신호가 아니기 때문에 필터로 설정되는게 아니라서 상관 없음.
여기서 중요한건 입력 신호를 어떻게 받느냐임.
위 수량 비교 조합기 설정임
노란 별은 each(각각) 이라는 신호로, 여러 종류의 신호를 입력받을 경우 모든 신호에 대해서 각각 비교 연산을 수행하게 됨.
결과적으로 이렇게 하면 입력받은 여러 종류의 신호 중 R이라는 신호와 크기가 같은 신호만 통과시키고 R과 다른 경우에는 통과하지 못함.
출력 방법은 1로 해도 되고 입력 값으로 해도 되는데 여기선 1로 했음.
아직은 감이 잘 안 올텐데 R 이라는 신호가 중요함.
이 R이라는 신호는 바로 밑 조합기가 만드는 신호임.
이 조합기는 자기 자신의 출력을 자기 자신의 입력에 집어넣는 일종의 루프문임.
일단 여기 입력되는 과학팩 신호는 무시하고 R 값만 보자. 어짜피 이 조합기가 비교하는 값은 R 뿐이다.
외부에서 R=1을 입력해 주면
1틱에 입력 : R=1, 출력 : R=1
2틱에 입력 : R=1, 그리고 방금 전 틱에 출력받은 R=1 두 신호가 합쳐져셔 R=2, 출력 R=2
이런식으로 매 틱마다 R 값을 하나씩 증가시키고 7이 되면 조건을 만족하지 않기 때문에 다시 0으로 스스로 리셋 되는 타이머 회로임.
즉 매 틱마다 R=1, R=2, R=3, R=4, R=5, R=6, R=0 을 출력하고
외부에서 공급되는 R=1 이라는 신호와 합쳐져서 R=2, R=3, R=4, R=5, R=7, R=1 순서로 반복되는 R 신호를 얻을 수 있음.
이제 감이 올라나?
정신없으니까 정지화면으로 아까 빨간 박스 맨 위 수량비교 조합기의 입력/출력 신호를 다시 보자.
지금은 R=2, 초록팩=2 이므로
출력으로 출력은 R=1, 초록팩=1 이렇게 두 종류의 신호가 나와야 할 것임.
근데 보니까 R=1, 빨간팩=1 신호가 나오고 있네?? 이상하지 않나?
여기서 한가지 짚고 넘어갈 점
수량 비교 조합기는 비교하는데 1 틱이 소요됨
즉, 여기서 보이는 결과는 이전 틱의 계산 결과임.
방금 전에 R=1~7을 반복하는 타이머 회로를 봤으니 이제 이해가 될거라 생각하는데
이전틱에 타이머 값은 R=1 이었고 빨간팩 신호=1 이므로
빨간팩 신호만 이 조합기를 통과해서 필터 투입기로 전달됨.
다음틱엔 R=2, 초록팩=2 니까 초록팩만 전달됨
그 다음틱엔 R=3, 군사팩=3 이니까 군사팩만 전달됨
....
결국엔 이런식으로 반복되는 회로다.
그럼 빨팩=1, 초팩=2, 군사팩=3, 파팩=4, ... 이 신호는 어디서 가져온거냐 하면
바로 옆에 있는 일정신호 조합기에서 한번에 넣어줌.
그냥 빨간선에다 같이 이어주면 저절로 신호가 합쳐지기 때문에 그렇게 했다.
4. 기차가 정차한 경우에만 필터 신호를 내보내도록 설정하는 방법
어쨌든 이제 빨간 박스 위 조합기 2개를 사용해서 돌아가면서 반복되는 필터를 설정할 수 있게 됐다.
근데 약간 거슬리는 문제가 있다.
기차가 없을땐 내릴 어짜피 내릴 아이템도 없는데
저 발광하는 투입기가 좀 가만히 있었으면 좋겠는데 무슨 방법이 없을까?
물론 있다.
아까 봤던 조합기다. R의 값과 같은 값을 같는 신호를 출력하는 그놈.
이놈이 신호를 출력하지 않으려면 R=0이면 된다.
즉 이렇게 하면 된다.
기차가 정차하면 타이머 역할을 하던 조합기에 R=1 입력해서 타이머 작동, 필터 신호 출력
기차가 없으면 타이머 역할을 하던 조합기에는 아무런 입력을 하지 않고 타이머 정지
그러나 맨 위 조합기에 입력되는 R 값은 타이머가 정지되도 사라지지 않고 남아있기 때문에 이걸 없애줘야 함.
그러려면 그 값에 -1을 곱해 다른색 전선으로 입력, +R 과 -R 이 동시에 입력되므로 R=0이 입력되는 효과를 내면 된다.
구현 방법
일단 역에서 기차 정차 신호를 받아온다.
회로 연결하고 '정차한 기차 읽기'를 체크하면 기차가 역에 정차할 경우 그 ID를 T로 받아오는데,
기차 ID는 그 맵에서 놓인 기차의 수에 따라 1부터 배정되며 따라서 무조건 0보다 크다 (T>0) 는 특징이 있다.
아무튼 역에 기차가 멈추면 T>0 출력을 보장받는다.
여기서는 테스트를 위해 T값을 입력할 수 있는 일정 신호 조합기를 달았다. '켜기'에 체크하면 T=1 으로 기차가 정차한 것과 같은 효과를 냄.
'끄기'에 체크하면 기차가 없는것과 같은 효과.
그리고 바로 옆의 조합기를 보면 T>0, 즉 기차가 정차한 경우 R=1을 내보내고
이걸 아까 그 타이머 회로에 넣어서 기차가 정차하면 타이머를 작동시킨다.
이건 리셋 회로다. T=0, 기차가 정차하지 않은 경우 R=입력 값을 그대로 내보낸다.
애초에 타이머가 작동하지 않을 경우 알아서 R=0 으로 리셋되면 좋겠지만 그게 안되서 그걸 리셋하려고 쓰는 회로다.
그니까 입력 값은 당연히 타이머에서 받아온다.
기차가 정차해 있는 경우에는. T=0 이 아니므로 출력은 없다.
T=0, 기차가 없다. 이제 받아온 R을 그대로 내보낸다.
내보낸 값은 산술 연산 조합기를 통해 -1을 곱해서
신호가 섞이지 않도록 지금까지 쓰던 빨간 선과는 다른 색 선으로
필터를 설정하는 수량 비교 조합기의 입력에 집어넣는다.
이제 이 조합기는 타이머가 출력하는 +R, 산술 연산 조합기가 출력하는 -R 두 값을 입력받으므로 R = 0 을 입력받는것과 같은 효과를 낸다.
아까 R=0이면 아무 필터도 내보내지 않는 것을 확인했으므로 성공적으로 필터를 제거한 것을 볼 수 있다.
5. 상자가 꽉 찰 것 같으면 필터를 제거하는 방법(파란색 박스)
연구소에 연구팩을 공급하는 상자다. 대충 각 1200+개, 7칸 씩 차지하면 48칸중 42칸을 채우므로 상자가 막히는걸 방지하려면 더이상 안 채우는게 좋을 것 같다.
일단 상자에 든 연구팩 갯수를 알아야 비교가 되니까 상자에 회로 전선을 입력해서 내용물을 신호로 받아온다.
여기부턴 예시를 통해서 설명하겠다.
상자에 연구팩을 직접 채워서 신호를 받는 대신에 이 일정신호 조합기로 가상의 신호를 만들었다.
편의상 이 수치들을 box(상자에 있는 아이템 수) 라고 부르겠다.
우리가 원하는 값인 1200개보다 과학팩이 1개씩 더 많은 1201개가 들어있다고 해보자. 우주팩은 훨씬 많은 2000개가 있다고 가정했다.
어짜피 지정값을 넘는지 아닌지가 중요하지, 일단 넘는 이상은 상관 없음.
초록팩은 실수가 아니라 일부러 120개로 했는데, 지금 초록팩이 부족하니까 초록팩 신호만 필터로 설정하도록 하는 예시를 보여주기 위해서이다.
그리고 그 밑은 상자에 있어도 괜찮은 최대값(max)을 설정했다. 전부 1200개로 설정.
먼저 상자에 있는 연구팩 수와 우리가 설정한 한계값의 차를 구해야 된다.
한계값 (max) - 상자의 연구팩 수 (box) 를 해주기 위해서 상자에 연결된 회로를 이 산술 연산 조합기에 집어넣어 -1을 곱한다.
그리고 그 출력과 max 옆의 일정신호 조합기를 같은 색 와이어로 연결하면
같은 회로 네트워크의 신호는 저절로 합쳐지기 때문에 우리가 원하던 뺄셈값이 나온다.
이 값이 0보다 작으면
max - box < 0
즉 max < box를 의미하므로
그 아이템은 더이상 묶음 선별 투입기가 옮겨선 안된다.
따라서 반복되는 필터에서 제거할 필요가 있다.
어떤 아이템을 필터에서 제거할지 판단하기 위해서
방금 계산한 뻴셈 값을 위 수량 비교 조합기에 집어넣고
각각의 아이템에 대해 max - box를 뺄셈 연산한 값이 0보다 작은 경우 해당 아이템 종류 신호 1을 출력하게 한다.
지금은 초록팩만 부족하기 때문에 초록팩을 제외한 모든 연구팩=1이 출력된걸 볼 수 있다.
이제 상자에 충분히 있는 아이템 종류를 알 수 있고,
이 신호들을 필터에서 제거해야 되기 때문에 새로운 산술 연산 조합기를 통과해 -1을 곱해서 음수로 만들어준다.
이 값이 최종적인 파란색 박스의 출력,
필터를 제거하는 신호이다.
빨간색 박스에서 나오는 반복되는 필터 신호와 같은 전선으로 연결해서 신호를 합쳐주면 끝난다.
그 결과 이 신호가 묶음 선별 투입기에 전달되는 신호이다.
묶음 선별 투입기는 '필터 설정' 이 체크되어 있는 경우에는
양수의 아이템 값을 신호로 받을때만 필터가 설정된다.
따라서 7틱마다 한번씩 초록팩=1일때만 필터가 초록팩으로 설정되고, 초록팩만 집을 수 있다.
나머지 6틱 동안은 빨간팩=1, 군사팩=1, 파란팩=1, ... 이렇게 반복되는 신호가 계속 빨간색 박스에서 출력되고 있지만
파란색 박스 에서 -1 값이 계속 출력되고 있기 때문에 아무리 돌아가도 연구팩=0이 될 뿐, 1 이상이 되어서 필터가 설정되는 일은 없다.
따라서 성공적으로 초록팩만 옮기는 것을 볼 수 있을 것이다.
6. 응용 방법
꼭 과학팩이 아니더라도 이건 모든 종류 아이템에 다 쓸 수 있다.
예 1. 예를들어 물류 구역을 분리하고 건설 재료가 충분하지 않을 때만 투입기로 아이템을 전달한다던지 할 경우 아이템 종류별로 요청상자를 만들 필요가 없다.
하나에 다 때려박고 이런식으로 회로로 필터만 돌아가면서 설정해주면 ok.
예 2. 방어스테이션에 탄창/포탑/돌벽/수리팩을 공급하고 싶을 경우 등등 원거리에 기차로 아이템을 전달할 필요가 있을 때,
상자랑 투입기를 아이템 종류 수만큼 쓸 필요가 없어진다.
7. 궁금한점이나 개선점 제안점 등등 있으면 코멘트 바람.
이해가 어려운 부분 있으면 보완해봄.
근데 사진 장수 제한 걸려서 사진 더 넣으려면 글 나눠써야됨.
8. 청사진 문자열
예시 조합기가 있는 버전과 없는 버전 2개임.
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
설명글은 분명 좋은 글인데 쓰는게 너무 오래걸린다. 퇴근하고 이글쓰는데 시간 다씀ㅋㅋㅋ
일부러 기능별로 섹션 나눠놨으니까 팩갤럼들이 이글 보고 이거저거 응용할 일이 많았으면 좋겠다.
신호기 쓰는사람 대다네..
게임에서까지 코딩을 해야한다니 세상에 - dc App
잘 읽었음. 왜 저번에 못보고 그냥 지나쳤을까
세상에.. 꿀팁감사합니다. 근데 여기 디씨 맞죠?? Code Guru나 Stack Overflow 보는 기분인데;;
Wa.. 개어렵다..