openclonk/planet/Objects.ocd/Libraries.ocd/Structures.ocd/DoorControl.ocd/Script.c

70 lines
1.2 KiB
C

/*-- Door control --*/
/*
This object supplies the base functionality for structures with doors.
The buildings have to have OpenDoor, DoorOpen and CloseDoor in their act map
*/
protected func ActivateEntrance(object entering_obj)
{
if (this->~CanBlockEnemies())
{
var for_plr = entering_obj->GetOwner();
if (Hostile(GetOwner(), for_plr))
{
entering_obj->~PlaySoundDecline();
PlayerMessage(for_plr, "$TxtNoEntryEnemy$", GetPlayerName(GetOwner()));
return false;
}
}
if (ActIdle())
SetAction("OpenDoor");
return true;
}
private func OpenEntrance()
{
SetEntrance(true);
return;
}
private func CloseEntrance()
{
SetEntrance(false);
return;
}
private func SoundOpenDoor()
{
Sound("Structures::DoorOpen?");
return;
}
private func SoundCloseDoor()
{
Sound("Structures::DoorClose?");
return;
}
protected func Initialize()
{
SetEntrance(false);
return _inherited(...);
}
protected func Ejection(object obj)
{
// Let the door stay open longer on ejection.
if (GetAction () == "DoorOpen")
SetAction ("DoorOpen");
return _inherited(obj, ...);
}
protected func Collection2(object obj)
{
// Let the door stay open longer on collection.
if (GetAction () == "DoorOpen")
SetAction ("DoorOpen");
return _inherited(obj, ...);
}