Changed pipe interface

- connect / disconnect callbacks do not include the line anymore
- the drain and source pipes are set to the pipe now, instead of the line
liquid_container
Mark 2016-02-06 23:12:26 +01:00
parent e08e8fbb51
commit ecff731d96
5 changed files with 31 additions and 27 deletions

View File

@ -102,8 +102,13 @@ private func LineBreak(bool no_msg)
if (!no_msg)
BreakMessage();
var line_end = GetPipeKit();
if (line_end) line_end->SetNeutralPipe();
if (GetPipeKit())
{
GetPipeKit()->SetNeutralPipe();
if (GetActionTarget(0)) GetActionTarget(0)->OnPipeDisconnect(GetPipeKit());
if (GetActionTarget(1)) GetActionTarget(1)->OnPipeDisconnect(GetPipeKit());
}
return;
}

View File

@ -145,7 +145,7 @@ func ConnectPipeTo(object target, string specific_pipe_state)
{
if (!target || target->~QueryConnectPipe(this)) return false;
var line = AddLineConnectionTo(target);
target->OnPipeConnect(this, line, specific_pipe_state);
target->OnPipeConnect(this, specific_pipe_state);
Sound("Objects::Connect");
return true;
}
@ -213,13 +213,13 @@ func CutLineConnection(object target)
// connected only to the kit and a structure
if (line->IsConnectedTo(this, true))
{
target->OnPipeDisconnect(this, line);
target->OnPipeDisconnect(this);
line->RemoveObject();
}
// connected to the target and another structure
else if (line->IsConnectedTo(target, true))
{
target->OnPipeDisconnect(this, line);
target->OnPipeDisconnect(this);
Exit(); // the kit was inside the line at this point.
SetPosition(target->GetX(), target->GetY());
line->SwitchConnection(target, this);

View File

@ -225,12 +225,11 @@ func DoConnectPipe(object pipe, string specific_pipe_state)
pipe->ConnectPipeTo(this, specific_pipe_state);
}
func DoCutPipe(object pipe_line)
func DoCutPipe(object pipe)
{
if (pipe_line)
if (pipe)
{
var pipe_kit = pipe_line->GetPipeKit();
pipe_kit->CutLineConnection(this);
pipe->CutLineConnection(this);
}
}
@ -248,10 +247,10 @@ func FindAvailablePipe(object container, find_state)
func CanConnectPipe(){ return true;}
func OnPipeDisconnect(object pipe, object line)
func OnPipeDisconnect(object pipe)
{
// pipe objects have to be reset!
if (line == GetDrainPipe()) SetDrainPipe();
if (line == GetSourcePipe()) SetSourcePipe();
if (line == GetNeutralPipe()) SetNeutralPipe();
if (pipe == GetDrainPipe()) SetDrainPipe();
if (pipe == GetSourcePipe()) SetSourcePipe();
if (pipe == GetNeutralPipe()) SetNeutralPipe();
}

View File

@ -175,17 +175,17 @@ func QueryConnectPipe(object pipe)
}
func OnPipeConnect(object pipe, object line, string specific_pipe_state)
func OnPipeConnect(object pipe, string specific_pipe_state)
{
if (PIPE_STATE_Source == specific_pipe_state)
{
SetSourcePipe(line);
SetSourcePipe(pipe);
pipe->SetSourcePipe();
pipe->Report("$MsgCreatedSource$");
}
else if (PIPE_STATE_Drain == specific_pipe_state)
{
SetDrainPipe(line);
SetDrainPipe(pipe);
pipe->SetDrainPipe();
pipe->Report("$MsgCreatedDrain$");
}
@ -193,27 +193,27 @@ func OnPipeConnect(object pipe, object line, string specific_pipe_state)
{
// add a drain if we already connected a source pipe,
// or if the line is already connected to a container
var pump_target = line->GetConnectedObject(this);
var line = pipe->GetConnectedLine();
var pump_target = !line || line->GetConnectedObject(this);
if (pump_target) pump_target = pump_target->~IsLiquidContainer();
if (GetSourcePipe() || pump_target)
{
OnPipeConnect(pipe, line, PIPE_STATE_Drain);
OnPipeConnect(pipe, PIPE_STATE_Drain);
}
// otherwise create a source first
else
{
OnPipeConnect(pipe, line, PIPE_STATE_Source);
OnPipeConnect(pipe, PIPE_STATE_Source);
}
}
}
func OnPipeDisconnect(object pipe, object line)
func OnPipeDisconnect(object pipe)
{
var pump_target = line->GetConnectedObject(this);
if (pump_target) pipe->SetNeutralPipe();
pipe->SetNeutralPipe();
_inherited(pipe, line);
_inherited(pipe);
}
@ -251,7 +251,7 @@ public func OnEnoughPower()
/** Returns object to which the liquid is pumped */
private func GetDrainObject()
{
if (GetDrainPipe()) return GetDrainPipe()->GetConnectedObject(this) ?? this;
if (GetDrainPipe()) return GetDrainPipe()->GetConnectedLine()->GetConnectedObject(this) ?? this;
return this;
}
@ -259,7 +259,7 @@ private func GetDrainObject()
private func GetSourceObject()
{
if (GetSourcePipe())
return GetSourcePipe()->GetConnectedObject(this) ?? this;
return GetSourcePipe()->GetConnectedLine()->GetConnectedObject(this) ?? this;
return this;
}

View File

@ -232,8 +232,8 @@ func QueryConnectPipe(object pipe)
}
func OnPipeConnect(object pipe, object line, string specific_pipe_state)
func OnPipeConnect(object pipe, string specific_pipe_state)
{
SetNeutralPipe(line);
SetNeutralPipe(pipe);
pipe->Report("$MsgConnectedPipe$");
}