forked from Mirrors/openclonk
70 lines
1.2 KiB
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, ...);
|
|
}
|