Make big vehicles (catapult) control a double elevator but not a single one.

shapetextures
Clonkonaut 2015-10-11 00:16:14 +02:00
parent 819731f78a
commit 3c97c25301
3 changed files with 22 additions and 3 deletions

View File

@ -12,6 +12,13 @@ public func FitsInElevator()
return true;
}
// Set to true for objects that only fit into a double elevator
// Objects will be centered inbetween the two cases
public func FitsInDoubleElevator()
{
return false;
}
/* Controls */
func ControlUp(object clonk)

View File

@ -312,14 +312,25 @@ private func FxFetchVehiclesTimer(object target, proplist effect, int time)
{
if (GetEffect("ElevatorControl", vehicle))
continue;
if (vehicle->FitsInDoubleElevator())
if (!IsMaster())
continue;
vehicle->SetSpeed();
// If a clonk is pushing the vehicle, its receive another push after 1 frame
Schedule(vehicle, "SetSpeed()", 2);
vehicle->SetR();
var x = GetX();
if (IsMaster())
if (ObjectDistance(vehicle) > ObjectDistance(vehicle, partner))
{
// Position vehicle inbetween the two cases
if (vehicle->FitsInDoubleElevator())
{
x = GetX() + 12;
if (partner->GetX() < GetX())
x -= 24;
} else if (ObjectDistance(vehicle) > ObjectDistance(vehicle, partner))
x = partner->GetX();
}
vehicle->SetPosition(x, GetY() + GetBottom() - 3 - vehicle->GetBottom());
AddEffect("ElevatorControl", vehicle, 30, 5, vehicle, nil, this);
Sound("Connect");
@ -441,7 +452,7 @@ private func SetMoveDirection(int dir, bool user_requested, bool drill)
SetComDir(dir);
ForceSync();
elevator->StartEngine(dir);
if (partner)
if (IsMaster())
partner->ForwardEngineStart(dir);
}
else
@ -459,7 +470,7 @@ private func Halt(bool user_requested, bool power_out)
// Stop the engine if it was still moving.
if(elevator)
elevator->StopEngine();
if (partner)
if (IsMaster())
partner->ForwardEngineStop();
// Clear speed.

View File

@ -15,6 +15,7 @@ local clonkmesh;
public func IsVehicle() { return true; }
public func IsArmoryProduct() { return true; }
public func FitsInDoubleElevator() { return true; }
protected func Initialize()
{