이제 보드를 만들었으니, 보드에 폰을 배치하고, 폰이 특정한 타일 좌표에 존재하는지 확인하고, 보드에서 폰을 제거해 보겠습니다.
다음 시나리오로 시작하세요. tile_coordinate에 폰이 있는지 확인하고 있으면 가져옵니다. 개념은 다음과 같습니다.
보드에는
creative_prop폰 배열이 있습니다.존재하는 폰을 반복작업하여 각 폰 위치를 타일 좌표로 구합니다.
주어진 타일 좌표에 폰이 있다면 가져옵니다.
없으면 함수가 실패합니다.
타일 좌표 동일성 확인
이를 수행하려면 두 tile_coordinate가 동일한지 테스트할 수 있어야 합니다. 이것이 필요한 이유는 현재 가진 커스텀 타일 좌표 데이터 타입이 Verse의 기본 comparable 타입의 서브타입이 아니기 때문입니다. 결과적으로 두 타일 좌표가 동일하다는 것이 무슨 의미인지 직접 정의해야 합니다. 먼저 DataTypes 모듈에서 AreTileCoordinatesEqual 함수를 만들어 이를 결정합니다.
using { /Verse.org/Simulation }
DataTypes<public> := module:
...
UtilityFunctions<public> := module:
...
이 함수는 두 입력 타일 좌표의 각 컴포넌트가 integer로 동일한 경우에만 성공합니다.
사물의 타일 좌표 구하기
폰으로 작업할 경우 폰의 위치를 타일 좌표로 구해야 합니다. 이를 위해 포크리 사물 위치를 타일 좌표로 구하기 위한 헬퍼 함수도 작성합니다.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
이 함수는 입력 포크리 사물의 월드 위치를 게임보드상의 타일 좌표로 변환 가능한 경우에만 성공합니다. 또한 이전에 월드 위치를 보드 스페이스 위치로 변환하기 위해 정의된 ToTileCoordinate 함수도 사용합니다.
타일 좌표에서 폰 구하기
GetPawn 함수를 작성합니다.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
이 함수는 다음 단계를 수행합니다.
보드 위에 존재하는 모든 폰을 반복작업합니다.
폰의 위치를 타일 좌표로 구합니다.
폰의 위치가 입력 위치와 동일하면 발견한 폰으로 저장합니다.
해당 위치에서 하나의 폰만 발견되었는지 확인합니다.
그 하나의 폰을 반환합니다.
이 함수는 입력 타일 좌표에 정확히 하나의 폰만 있으며, 폰 배열에서 해당 폰을 얻는 데 성공한 경우에만 성공합니다.
타일 좌표에 폰 설정
보드에 단일 폰을 배치하는 함수를 작성합니다. 간단한 작성을 위해 creative_prop 오브젝트를 폰으로 사용하고 SM_Box_asset을 폰 메시로 사용합니다. 이는 나중에 언제든 원하는 커스텀 오브젝트로 바꿀 수 있습니다. 개념은 다음과 같습니다.
보드에는
creative_prop폰 배열이 있습니다.tile_coordinate에 이미 폰이 있는지 확인합니다.폰이 없다면 하나 배치합니다.
SetPawn 함수를 작성합니다.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
이 함수는 다음 단계를 수행합니다.
입력 타일 좌표가 보드상에 있는지 확인합니다.
현재 입력 타일 좌표에 있는 모든 폰을 찾습니다.
해당 좌표에서 폰이 발견되지 않도록 합니다.
입력 위치에 사물을 생성하려 시도합니다.
이 함수는 다음 조건이 충족될 때만 성공합니다.
현재 입력 타일 좌표에 폰이 없습니다.
입력 타일 좌표가 보드 위에 있고 월드 위치로 변환할 수 있습니다.
폰 제거하기
마지막으로 필요한 함수 하나는 보드에서 폰을 제거하는 기능입니다. 이 함수는 포크리 사물을 가져와 제거하고, 보드와 기록 폰 배열에서 제거합니다.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):
요약
요약해 보면, 이 페이지에서는 다음 단계를 살펴보았습니다.
보드에 폰을 배치합니다.
보드에서 폰을 가져옵니다.
보드에서 폰을 제거합니다.
Files
using { /Verse.org/Simulation }
DataTypes<public> := module:
tile_coordinate<public> := class<concrete>:
@editable
Left<public>:int = 0
@editable
Forward<public>:int = 0
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Verse.org/Assets }
using { DataTypes }
using { UtilityFunctions }
board<public> := class(creative_device):