openclonk/planet/Missions.ocf/Raid.ocs/System.ocg/SpinWheel.c

41 lines
894 B
C

/* SpinWheel requires a key */
#appendto SpinWheel
public func ControlUp(object clonk, ...)
{
if (!CheckLock(clonk)) return false;
return inherited(clonk, ...);
}
public func ControlDown(object clonk)
{
if (!CheckLock(clonk)) return false;
return inherited(clonk, ...);
}
func CheckLock(object clonk)
{
// already unlocked?
if (this.unlocked) return true;
// otherwise, find key
var key = clonk->FindContents(Key);
if (!key)
{
Dialogue->MessageBox("$DoorNoKey$", clonk, clonk);
clonk->Sound("Animals::Wipf::Whine");
return false;
}
// too far away? (may happen when callback is from key)
if (ObjectDistance(clonk, this) > 30)
{
Dialogue->MessageBox("$DoorTooFar$", clonk, clonk, nil, true);
return false;
}
// unlock
Dialogue->MessageBox("$DoorUnlocked$", clonk, clonk, nil, true);
this.unlocked = true;
key->RemoveObject();
Sound("UI::Click");
return true;
}