openclonk/planet/System.ocg/Library_Inventory.c

51 lines
1.2 KiB
C

/**
Library_Inventory.c
Global functions that belong to Libraries.ocd/Inventory.ocd.
@author
*/
// overload function for objects with Inventory.ocd
// documented in /docs/sdk/script/fn
global func ShiftContents(bool shift_back, id target_id)
{
if (this && (this.HandObjects > 0))
{
// special handling for only one hand: just move the hand to next item
// always move hand 0
// move to target ID?
if(target_id)
{
for(var pos = 0; pos < this.MaxContentsCount; ++pos)
{
var obj = this.inventory.objects[pos];
if(!obj) continue;
if(obj->GetID() == target_id)
{
this->SetHandItemPos(0, pos);
return true;
}
}
return false;
}
// otherwise, move in direction
var move_dir = 1;
if(shift_back) move_dir = -1;
var current_pos = this->GetHandItemPos(0);
for(var i = this.MaxContentsCount; i > 0; --i)
{
current_pos += move_dir;
if(current_pos < 0) current_pos = this.MaxContentsCount + current_pos;
else current_pos = current_pos % this.MaxContentsCount;
// is there an object at the slot?
if(!this.inventory.objects[current_pos]) continue;
this->SetHandItemPos(0, current_pos);
return true;
}
return false;
}
return _inherited(shift_back, target_id, ...);
}