diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Libraries.ocd/CableCar.ocd/Script.c b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Libraries.ocd/CableCar.ocd/Script.c index 27e8629ba..f63281f44 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Libraries.ocd/CableCar.ocd/Script.c +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Libraries.ocd/CableCar.ocd/Script.c @@ -60,6 +60,9 @@ public func SetCableSpeed(int value) lib_ccar_speed = value; } +// Returns the speed of this cable car. +public func GetCableSpeed() { return lib_ccar_speed; } + // Positioning of the car along the cable // This should be called regularly, see header comment! public func DoMovement() @@ -104,6 +107,8 @@ public func DoMovement() public func IsCableCar() { return true; } +public func RejectCableCarPickup() { return true; } + public func GetRailTarget() { return lib_ccar_rail; } public func IsTravelling() { return lib_ccar_destination; } diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/Script.c b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/Script.c index 12c5453f0..48349d8dd 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/Script.c +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/Script.c @@ -40,11 +40,13 @@ func GetCableOffset(array position, int prec) func Engaged() { + this.Touchable = 0; SetAction("OnRail"); } func Disengaged() { + this.Touchable = 1; SetAction("Idle"); if (pickup) DropVehicle(); @@ -57,11 +59,11 @@ func GetCableCarExtraMenuEntries(array menu_entries, proplist custom_entry, obje if (!pickup && GetRailTarget()) { // Picking up vehicles - var vehicles = FindObjects(Find_AtPoint(), Find_Category(C4D_Vehicle), Find_Not(Find_Func("RejectCableHoistPickup", this)), Find_Exclude(this), Find_Func(pickup)); + var vehicles = FindObjects(Find_AtPoint(), Find_Category(C4D_Vehicle), Find_Not(Find_Func("RejectCableCarPickup", this)), Find_Exclude(this)); var i = 0; for (var vehicle in vehicles) { - if (GetEffect("CableHoistPickup", vehicle)) continue; + if (GetEffect("FxCableHoistPickup", vehicle)) continue; var to_pickup = new custom_entry { Priority = 2000 + i, @@ -86,49 +88,72 @@ func GetCableCarExtraMenuEntries(array menu_entries, proplist custom_entry, obje } } +public func OnCableCarHover(symbol, extra_data, desc_menu_target, menu_id) +{ + if (symbol && extra_data == "Pickup") + { + GuiUpdate({ Text = Format("$DescPickup$", symbol->GetName()) }, menu_id, 1, desc_menu_target); + return; + } + if (symbol && extra_data == "Drop") + { + GuiUpdate({ Text = Format("$DescDrop$", symbol->GetName()) }, menu_id, 1, desc_menu_target); + return; + } + return _inherited(symbol, extra_data, desc_menu_target, menu_id, ...); +} + /* Picking up vehicles */ public func PickupVehicle(object vehicle) { if (!vehicle) return; - if (GetEffect("CableHoistPickup", vehicle)) return; + if (GetEffect("FxCableHoistPickup", vehicle)) return; var width = vehicle->GetObjWidth() / 2; var height = vehicle->GetObjHeight() / 2; if (!Inside(GetX(), vehicle->GetX() - width, vehicle->GetX() + width)) if (!Inside(GetY(), vehicle->GetY() - height, vehicle->GetY() + height)) return; - - AddEffect("CableHoistPickup", vehicle, 1, 1, this); + vehicle->CreateEffect(FxCableHoistPickup, 1, 1, this); + pickup = vehicle; UpdateInteractionMenus(this.GetCableCarMenuEntries); } public func DropVehicle() { if (!pickup) return; - RemoveEffect("CableHoistPickup", pickup); + RemoveEffect("FxCableHoistPickup", pickup); + pickup = nil; UpdateInteractionMenus(this.GetCableCarMenuEntries); } -func FxCableHoistPickupStart(object vehicle, proplist effect) +local FxCableHoistPickup = new Effect { - vehicle->SetPosition(GetX(), GetY()+4); - vehicle->SetSpeed(0,0); - vehicle->SetR(GetR()); - vehicle->SetRDir(0); - - pickup = vehicle; -} - -func FxCableHoistPickupTimer(object vehicle, proplist effect) -{ - vehicle->SetPosition(GetX(), GetY()+4); - vehicle->SetSpeed(0,0); -} - -func FxCableHoistPickupStop(object vehicle, proplist effect) -{ - pickup = nil; -} + Construction = func(object hoist) + { + + this.hoist = hoist; + this.vehicle_touchable = Target.Touchable; + Target.Touchable = 0; + // Follow motion of hoist. + Target->SetPosition(this.hoist->GetX(), this.hoist->GetY() + 4); + Target->SetSpeed(0, 0); + Target->SetR(this.hoist->GetR()); + Target->SetRDir(0); + }, + + Timer = func(int time) + { + // Follow motion of hoist. + Target->SetPosition(this.hoist->GetX(), this.hoist->GetY() + 4); + Target->SetSpeed(0, 0); + }, + + Destruction = func() + { + Target.Touchable = this.vehicle_touchable; + } +}; /* Actions */ diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblDE.txt b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblDE.txt index bc7bccdeb..10c98b9ff 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblDE.txt +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblDE.txt @@ -2,4 +2,6 @@ Name=Schlitten Description=Zum Aufsatz auf Kabel. Transportiert Fahrzeuge. TooltipPickup=Dieses Fahrzeug an den Schlitten anhängen. -TooltipDrop=Dieses Fahrzeug vom Schlitten abnehmen. \ No newline at end of file +TooltipDrop=Dieses Fahrzeug vom Schlitten abnehmen. +DescPickup=%s an den Schlitten anhängen. +DescDrop=%s vom Schlitten abnehmen. \ No newline at end of file diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblUS.txt b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblUS.txt index cf246dc29..a502a9a11 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblUS.txt +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Vehicles.ocd/Hoist.ocd/StringTblUS.txt @@ -2,4 +2,6 @@ Name=Hoist Description=To use on a cable. Transports vehicles. TooltipPickup=Attach this vehicle to the hoist. -TooltipDrop=Drop this vehicle from the hoist. \ No newline at end of file +TooltipDrop=Drop this vehicle from the hoist. +DescPickup=Attach %s to the hoist. +DescDrop=Drop %s from the hoist. \ No newline at end of file