feat: 배치 엔티티 재사용 로직 개선 및 README 업데이트

- `place_entity` 함수에서 인벤토리 아이템 유무를 확인하기 전에 기존 엔티티를 탐색하여 재사용(`REUSED`) 처리하도록 로직 개선
- 요청 좌표 주변 `±1 타일` 및 반경 `3` 타일 내에서 기존 엔티티를 찾아 재사용할 수 있도록 확장
- `stone-furnace`의 재사용 시 자동 부트스트랩 기능이 정상 작동하도록 보장
- README.md에 변경 사항 및 새로운 동작 설명 추가
- `tests/test_place_entity_reuse.py`에 대한 단위 테스트 추가
This commit is contained in:
21in7
2026-03-26 00:36:05 +09:00
parent 9b3d26aa12
commit abd388fc1e
6 changed files with 145 additions and 10 deletions

View File

@@ -170,20 +170,26 @@
### 문제 관찰
- 로그에서 `stone-furnace` 배치가 `FAIL 배치 불가`(내부적으로 `BLOCKED`)로 반복됨
- 또한 `stone-furnace`가 이미 맵에 설치돼 있어도, executor가 먼저 `NO_ITEM`으로 종료해 재사용 탐색이 실행되지 않는 케이스가 관찰됨
- `mine_resource`가 자원 엔티티 근처(종종 자원 패치 타일)로 이동한 뒤, 같은 좌표에 건물을 배치하려고 하면
Factorio의 `can_place_entity` 조건에 걸려 막힐 수 있음
### 변경 목표
1. `action_executor.py``place_entity`에서 먼저 `surface.can_place_entity`로 배치 가능 여부를 검사
2. 현재 좌표 `(x,y)`가 불가능하면, `(x,y)` 주변 `±1 타일` 후보(대각 포함)로 순차 시도
3. 실제로 배치된 좌표를 결과 메시지에 포함해 이후 계획이 더 안정적으로 반복되게 함
1. `action_executor.py``place_entity`에서 배치 아이템 유무(`NO_ITEM`) 확인 전에,
먼저 `surface.find_entities_filtered`로 기존 엔티티(같은 `name`)가 있는지 탐색
2. (기존) 요청 좌표 주변 `±1 타일(9칸)` 후보에서 기존 엔티티가 있으면 `REUSED`로 성공 처리
3. (추가) 요청 좌표 중심으로 반경 `3` 타일 내에 같은 엔티티가 있으면 가장 가까운 것을 `REUSED`로 성공 처리
4. 기존 엔티티가 없을 때만 인벤토리에 `name` 아이템이 있는지 확인하고, `surface.can_place_entity` + `±1 타일` 후보로 실제 배치를 시도
5. 실제로 배치된/재사용된 좌표를 결과 메시지에 포함해 이후 `stone-furnace` 자동 부트스트랩이 좌표를 정확히 파싱하도록 보장
### 구현 범위
- `action_executor.py`
- `place_entity` 로직을 (x,y) 실패 시 인접 타일 후보로 확장
- 기존 엔티티 탐색을 `NO_ITEM` 체크보다 먼저 수행
- 재사용(`REUSED`) 성공 케이스의 메시지/좌표 포맷 확정
- 반경 3 타일의 넓은 재사용 탐색 추가
### README 업데이트
- `place_entity``BLOCKED` 시 인접 타일을 자동 탐색하도록 동작 설명 추가
- `place_entity``BLOCKED`/`NO_ITEM` 상황에서도 기존 엔티티를 찾아 `REUSED`로 재사용하고, `stone-furnace`는 재사용이어도 자동 부트스트랩이 동작하도록 설명 반영
---