forked from Mirrors/openclonk
119 lines
2.5 KiB
C
119 lines
2.5 KiB
C
/**
|
|
Refinery Drain
|
|
Oil must be pumped into this structure to be processed further.
|
|
|
|
@author Maikel
|
|
*/
|
|
|
|
#include Library_Structure
|
|
#include Library_Ownable
|
|
#include Library_LiquidContainer
|
|
#include Library_PipeControl
|
|
|
|
|
|
/*-- Pipeline --*/
|
|
|
|
public func GetLiquidContainerMaxFillLevel(liquid_name)
|
|
{
|
|
return 10**9;
|
|
}
|
|
|
|
public func IsLiquidContainerForMaterial(string liquid)
|
|
{
|
|
return WildcardMatch("Oil", liquid);
|
|
}
|
|
|
|
public func QueryConnectPipe(object pipe, bool do_msg)
|
|
{
|
|
if (pipe->IsDrainPipe() || pipe->IsNeutralPipe())
|
|
{
|
|
// Also check if already connected to this refinery drain.
|
|
var line = pipe->GetConnectedLine();
|
|
if (!line)
|
|
return false;
|
|
if (!line->IsConnectedTo(this, true))
|
|
return false;
|
|
}
|
|
if (do_msg)
|
|
pipe->Report("$MsgPipeProhibited$");
|
|
return true;
|
|
}
|
|
|
|
public func OnPipeConnect(object pipe, string specific_pipe_state)
|
|
{
|
|
SetDrainPipe(pipe);
|
|
pipe->SetDrainPipe();
|
|
pipe->Report("$MsgConnectedPipe$");
|
|
}
|
|
|
|
public func OnPipeDisconnect(object pipe)
|
|
{
|
|
var result = inherited(pipe, ...);
|
|
// There may be still drain pipes connected, selected one as the current drain pipe.
|
|
for (var line in FindObjects(Find_Func("IsConnectedTo", this)))
|
|
{
|
|
var new_pipe = line->GetPipeKit();
|
|
if (new_pipe == pipe || !new_pipe->IsDrainPipe())
|
|
continue;
|
|
SetDrainPipe(new_pipe);
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
/*-- Interaction Interface --*/
|
|
|
|
public func GetOilAmount()
|
|
{
|
|
var oil = FindObject(Find_ID(Oil), Find_Container(this));
|
|
if (oil)
|
|
return oil->GetStackCount() / 1000;
|
|
return 0;
|
|
}
|
|
|
|
public func HasInteractionMenu() { return true; }
|
|
|
|
public func GetInteractionMenus(object clonk)
|
|
{
|
|
var menus = _inherited(clonk, ...) ?? [];
|
|
var oil_menu =
|
|
{
|
|
title = "$MsgOilOverview$",
|
|
entries_callback = this.GetOilDisplayMenuEntries,
|
|
callback_hover = "OnOilDisplayHover",
|
|
callback_target = this,
|
|
BackgroundColor = RGB(0, 50, 50),
|
|
Priority = 20
|
|
};
|
|
PushBack(menus, oil_menu);
|
|
return menus;
|
|
}
|
|
|
|
public func GetOilDisplayMenuEntries(object clonk)
|
|
{
|
|
return
|
|
[{
|
|
symbol = Oil,
|
|
extra_data = "oil",
|
|
custom = {
|
|
Style = GUI_FitChildren | GUI_TextVCenter | GUI_TextLeft,
|
|
Bottom = "1.1em",
|
|
BackgroundColor = {Std = 0, OnHover = 0x50ff0000},
|
|
Priority = 1,
|
|
Text = Format("$MsgOilPumped$", GetOilAmount())
|
|
}
|
|
}];
|
|
}
|
|
|
|
public func OnOilDisplayHover(id symbol, string extra_data, desc_menu_target, menu_id)
|
|
{
|
|
GuiUpdateText(Format("$MsgOilDescription$", GetOilAmount()), menu_id, 1, desc_menu_target);
|
|
return;
|
|
}
|
|
|
|
|
|
/*-- Properties --*/
|
|
|
|
local Name = "$Name$";
|
|
local Description = "$Description$"; |