forked from Mirrors/openclonk
41 lines
894 B
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;
|
|
} |