현재 상황:
인벤토리를 구현해서, 인벤토리간 drag&drop으로 swap을 구현하려고 하는데, 이 swap 할 데이터들 중 일부만 swap을 해야해서
어떻게 구현해야 할 지 모르겠음.
원래는 std::swap을 썻음.
일단 std::swap을 썻을 때 문제가,
Inventory가 Slot* 배열을 가지고 있는데,
std::swap으로 둘을 바꾸게 되면 Slot* 안에 있는 각 Slot의 데이터중 위치값까지 같이 이동되서
0 1 2 3 4
5 6 7 8 9
모양으로 Slot이 그려진다고 했을때 std:;swap을 하면 이렇게 됨
1 0 2 3 4
5 6 7 8 9
( 1 0 의 값이 바뀌지만, 위치값 또한 바뀌게 되어 마치 안바뀐 것처럼 된다는 뜻 )
그래서 std::swap을 쓰지말고, swap을 할때 일부 데이터만 바꾸고 싶음.
( Slot에 담긴 Item 만 )
그래서 https://stackoverflow.com/questions/15672805/c-swapping-pointers
를 참고하면서 구현을 해봤는데, 둘다 아이템이 사라져버리는 문제가 있음.
아래는 현재 코드임.
void Inventory::Drop()
{
//... drag&drop시 충돌한 Slot의 인덱스를 받아옴
ChangeSlot(&itemSlots_[dragIndex_.slotIndex], &itemSlots_[dropIndex_.slotIndex]); // itemSlots_는 Slot* 배열임.
}
void Inventory::ChangeSlot(Slot* dragSlot, Slot* dropSlot)
{
Slot* temp;
temp = *dragSlot;
(*dragSlot)->SetItem((*dropSlot)->GetItem());
(*dropSlot)->SetItem(temp->GetItem());
}
// Slot에 객체 일부
//...
class Item* slotItem_ = nullptr; // 당연히Inventory 생성 시점에 item을 넣거나 안넣어줌.
auto GetItem() { return slotItem_; }
//...
이 시점에서
얘내 셋다 slotItem_이 Null이 되버리는데 왜그런지 모르겠음
( dragSlot에 원래 item 이 있음 temp = *dragSlot; 에 종단점 넣었을 때 걸린 직후 )