확장팩 FFF 모음 정리 링크



https://www.factorio.com/blog/post/fff-392




FFF #392 - 매개변수화된 청사진

게시자 Kovarex

2024-01-05



안녕하세요,


이제 막 완성한 특집을 다뤄보려고 합니다.

이 아이디어는 이미 몇 년 전부터 생각하고 있었습니다.

이 기능은 너무 하드코어해서 바닐라에 넣기는 어렵다고 생각했지만, 플레이어를 과소평가하는 것은 실수라는 것을 알게 되었고, 일단 해보고 나중에 피드백을 공유하기로 결정했습니다.




동기 부여


가장 일반적인 동기 부여의 예는 기차의 하차역입니다.

일반적으로 저는 철도, 기차 정류장, 섞임 방지를 위한 선별 투입기 등 전체 설정을 청사진에 담습니다.


이 방법은 좋지만 블루프린트를 제작할 때마다 대상 아이템에 대해 모든 선별 투입기를 다시 구성하고 정거장 이름도 변경해야 하므로 지루합니다.





기차역을 하나씩 설정하는 길고 단조로운 과정.



1.1에서 이를 해결하는 방법은 두 가지가 있습니다:

- 회로망을 사용하는 것. 그런데 이 방법은 과한 것 같고(뒤에서 자세히 설명할게요), 현재로서는 회로망별로 정거장 이름을 설정할 수도 없습니다.

- 각 아이템에 대해 하나씩의 새로운 청사진을 만드는 것. 이건 악몽처럼 들리네요.






매개변수화된 청사진


이는 자연스럽게 우리가 원하는 것을 정의하는 것으로 이어집니다:

특정 아이템 구성이 아니라 범용적이며 지을 때마다 다르게 구성할 수 있는 블루프린트를 원합니다.


문제는 이 특정 기능을 불필요한 GUI를 추가하지 않고 어떻게 구현할 수 있을까요?



기존 블루프린트 재구성


퍼즐의 첫 번째 조각은 기존 블루프린트를 재구성하는 툴입니다.


간단하게 설명하기 위해 다음과 같이 구성된 일정 상수 조합기의 예를 들어 보겠습니다:





이제 블루프린트를 만들면 재구성에 사용되는 새로운 기본 툴에 액세스할 수 있습니다.







이 UI의 가장 간단한 첫 번째 사용법은 블루프린트에서 특정 항목이나 숫자의 모든 항목을 다른 것으로 변경하는 것입니다. 블루프린트에서 모든 위치의 [X] 신호를 [Y]로 변경하려면 UI에서 값을 변경하고 확인하기만 하면 됩니다. 바로 블루프린트가 재구성되는 겁니다.

블루프린트에서 5라는 상수값을 모두 변경할 때도 마찬가지입니다.


투입기 필터, 조립기계 레시피, 회로망 설정, 조합기 구성, 물류 요청, 인벤토리 필터, 심지어 이미지 텍스트 아이콘까지 엔티티에 포함할 수 있는 거의 모든 설정과 숫자를 이 기능으로 재구성할 수 있습니다.

마지막 항목은 서식 있는 텍스트를 만들면 기차 정류장의 이름을 변경하는 데 사용할 수 있습니다.


제작하기 전에 언제든지 다른 항목으로 청사진을 다시 구성할 수 있으므로 많이 개선되었지만 여전히 충분히 완벽하지는 않습니다.




매개변수


첫 번째 단계는 아이템, 레시피, 유체 및 엔티티에 대한 매개변수라는 특수 ID를 정의하는 것이었습니다.





매개변수는 매개변수화 컨텍스트 외에는 의미가 없으며 블루프린트 일반 구성에만 사용됩니다. 일반적으로 블루프린트 구성 메뉴 외에는 게임 내 어디에서도 선택할 수 없지만, 숙련된 플레이어를 위해 인터페이스 설정을 통해 어디에서나 사용할 수 있도록 설정할 수 있습니다.


따라서 원래의 블루프린트로 돌아가서 다음과 같이 재구성할 수 있습니다:





여기서는 3개의 ID를 모두 매개변수로 지정하고 두 아이템에 사용된 숫자 5도 매개변수로 지정했습니다. 이름을 채울 필요는 없지만, 블루프린트 사용자가 다음 단계에서 블루프린트를 제작할 때 무엇을 요청했는지 알 수 있어 유용합니다.


이렇게 구성된 블루프린트를 제작하려고 할 때마다 이 작은 대화 상자가 표시되며, 이 대화 상자에서 블루프린트의 특정 인스턴스에 대한 매개변수를 입력하라는 메시지가 표시됩니다:






매개변수가 지정되는 동안 제작 미리보기가 어떻게 변경되는지 확인할 수도 있습니다.





매개변수를 선택하면 미리보기 아이콘도 업데이트됩니다.


그리고 확인을 누르면 원하는 구성으로 블루프린트가 제작됩니다.





매개변수를 사용하면 기차역을 쉽게 설정할수 있습니다.




종속 매개변수


이 기능은 이미 꽤 유용해 보이지만 여전히 충분하지 않습니다. 왜 그럴까요? 때때로 매개변수는 서로 관련되어 있을 것으로 예상되며, 블루프린트 사용자가 항상 올바르게 입력하도록 강요하는 것은 좋은 방식이 아니기 때문입니다.


종속성이란 무엇을 의미할까요? 3개의 재료(매개변수 1, 2, 3)로 아이템을 제작하고 기차 네트워크에서 재료를 가져오는 청사진이 있다고 가정해 봅시다.

당연히 3개의 공급역이 각각 입력 중 하나로 매개변수화되고, 원하는 아이템을 만들도록 매개변수화된 조립 기계의 행이 있는 큰 설정을 만들 수 있습니다(매개변수 0).

하지만 이 청사진을 만들 때마다 원하는 아이템의 재료 3가지를 기억하고 수동으로 채워야 하므로 작업 속도가 느려질 뿐만 아니라 실수할 가능성도 있습니다.


그래서 매개변수를 입력할 필요 없이 자동으로 다른 매개변수의 성분이 되도록 구성할 수 있습니다.





매개변수 1,2,3은 매개변수 0의 성분으로 설정되어 있으므로 이 블루프린트를 작성할 때 매개변수 0의 값만 요청하고 나머지 값은 자동으로 채워집니다.





종속 상수


상수 구성을 사용하면 수학이 존재하기 때문에 종속성을 설정하는 방식이 훨씬 더 자유로워집니다!

이 예시를 살펴보겠습니다:





100, 101, 200의 세 가지 숫자가 있는 블루프린트가 있습니다. 하지만 어떤 이유에서인지 사용자는 100이라는 값만 수정하고 싶지만 장치에서는 두 번째 숫자를 1 더 크게, 세 번째 숫자를 첫 번째 숫자의 두 배로만 수정하면 됩니다.

그렇기 때문에 각 매개변수화된 숫자에 변수를 할당할 수 있고, 그 값을 이후의 모든 종속 숫자의 수학 공식에 사용할 수 있습니다.


따라서 이 경우 청사진을 만들 때 100을 10으로 채우면 101은 자동으로 11로, 200은 20으로 설정됩니다.





결론


팩토리오는 프로그래밍에 여러 번 비유되었는데, 이것은 비유 중 하나에 불과합니다. 매개변수화된 블루프린트로 할 수 있는 거의 모든 작업은 회로망 로직을 통해 할 수 있으므로 거의 중복되는 것처럼 보입니다.


프로그래밍에서 병렬은 컴파일 타임 함수 실행과 런타임 함수 실행을 말하는데, 기본적으로 프로그램을 컴파일할 때 계산 결과를 이미 알고 있다면 프로그램을 실행할 때마다 계산하는 것이 아까워서 그냥 그 숫자를 프로그램에 바로 넣으면 됩니다. 이는 마치 철 톱니바퀴를 만들 때 항상 필터링이 된다는 것을 알고 있는 것과 매우 유사하므로 제작 과정을 단순화하기 위해 회로망 로직을 만드는 것은 조금 과하다고 느껴집니다.




이 기능에 대한 여러분의 의견을 듣고 싶습니다. 너무 많은가요? 이해할 수 있으신가요? 빨리 사용해보고 싶으신가요? 평소 사용하던 채널에서 알려주세요.