Try Add Item는 말그대로 함수 이름대로 인벤토리에 넣을 수 있나 한번 시도해보는 것이다. 블루 프린트는 다음과 같다.
핵심 함수는 Is Room Available이다. 저장 방식 문단에서 말했듯 이 함수가 그렇게 효율적이진 않다. Is Room Available의 작동 방식을 의사코드로 작성하면 다음과 같다.
forleft_top in inven_cells:forx in range(left_top, left_top + item.width):fory in range(left_top, left_top + item_height):forreserved_item in inven.items:if(y, x) is in reserved_item's range:returnFalsereturnTrue
반복문이 4개나 있어서 헷갈리는데, 첫번째 for문은 인벤토리의 모든 칸에 대해 이 칸이 넣으려는 아이템의 가장 왼쪽 위 귀퉁이가 될 수 있는지 검사하는 것이다. 나머지 3개 for문은 이 과정에서 이 아이템의 모든 칸이 다른 아이템의 어떤 칸과도 겹치지 않는다는 것을 검사하는 것이다.
드랍
Inventory Widget에서 드래그를 해서 Drop한다. Drag and Drop Operation을 통해 드래그 드랍 이벤트를 실행한다.
Inventory Widget의 월드 포지션 앞에 ItemObject에 저장된 Pickup Class를 이용해 Actor를 생성한다.