From 816754a3de85104e6e5785bfc1ab387a0b7859f7 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Sat, 31 Mar 2018 11:00:24 +0200 Subject: [PATCH] cable cars: improve tests and script clean up --- .../CableReel.ocd/CableLine.ocd/Script.c | 2 +- .../Libraries.ocd/CableCar.ocd/Script.c | 22 +++++++------- .../Structures.ocd/Crossing.ocd/Script.c | 12 ++++---- .../Vehicles.ocd/Hoist.ocd/Script.c | 5 ++-- planet/Tests.ocf/CableCars.ocs/Scenario.txt | 2 +- planet/Tests.ocf/CableCars.ocs/Script.c | 30 ++++++++++++++++--- 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Items.ocd/CableReel.ocd/CableLine.ocd/Script.c b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Items.ocd/CableReel.ocd/CableLine.ocd/Script.c index 7169e987a..fb38e185e 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Items.ocd/CableReel.ocd/CableLine.ocd/Script.c +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Items.ocd/CableReel.ocd/CableLine.ocd/Script.c @@ -146,7 +146,7 @@ public func Deactivation(int count) /*-- Saving --*/ -public func SaveScenarioObject(props) +public func SaveScenarioObject(proplist props) { if (!inherited(props, ...)) return false; 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 b94a89c89..5e24de993 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 @@ -30,28 +30,28 @@ local lib_ccar_delivery; // Overload these functions as you feel fit // Called after the car is attached to a rail -func Engaged() {} +public func Engaged() {} // Called after the car is detached from the rail -func Disengaged() {} +public func Disengaged() {} // To offset the position on the cable from the object's center // position is a 2-value-array [x,y] // prec is nil or a value to multiply your calculations with -func GetCableOffset(array position, int prec) {} +public func GetCableOffset(array position, int prec) {} // To add custom interaction menu entries after the regular cable car entries // custom_entry is a prototype for proper spacing of buttons // Use priorities > 2000 just to be sure -func GetCableCarExtraMenuEntries(array menu_entries, proplist custom_entry, object clonk) {} +public func GetCableCarExtraMenuEntries(array menu_entries, proplist custom_entry, object clonk) {} // Whenever movement is about to begin // Movement data like lib_ccar_direction is still nil at this moment -func OnStart() {} +public func OnStart() {} // Whenever the car stops its movement // failed is true if the movement to a destination was cancelled (usually because the path broke in the meantime) -func OnStop(bool failed) {} +public func OnStop(bool failed) {} /*-- Interface --*/ @@ -265,7 +265,7 @@ public func EngageRail(object crossing, bool silent) UpdateInteractionMenus(this.GetCableCarMenuEntries); Engaged(); - lib_ccar_rail->OnCableCarEngaged(this); + lib_ccar_rail->~OnCableCarEngaged(this); } // Detach the car from its current holding point (cable or crossing, does not matter) @@ -280,7 +280,7 @@ public func DisengageRail() Disengaged(); if (lib_ccar_rail) - lib_ccar_rail->OnCableCarDisengaged(this); + lib_ccar_rail->~OnCableCarDisengaged(this); } // Sets a target point for travelling and starts the movement process @@ -336,7 +336,7 @@ public func DestinationReached() { if (lib_ccar_delivery) FinishedRequest(lib_ccar_rail); - lib_ccar_rail->OnCableCarArrival(this); + lib_ccar_rail->~OnCableCarArrival(this); } } @@ -344,7 +344,7 @@ public func DestinationReached() public func DestinationFailed() { if (lib_ccar_rail) - lib_ccar_rail->OnCableCarStopped(this); + lib_ccar_rail->~OnCableCarStopped(this); lib_ccar_destination = nil; lib_ccar_direction = nil; @@ -357,7 +357,7 @@ public func DestinationFailed() public func Destruction() { if (lib_ccar_rail) - lib_ccar_rail->OnCableCarDestruction(this); + lib_ccar_rail->~OnCableCarDestruction(this); } // Setup movement process diff --git a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Structures.ocd/Crossing.ocd/Script.c b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Structures.ocd/Crossing.ocd/Script.c index 091caf957..040907b5a 100644 --- a/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Structures.ocd/Crossing.ocd/Script.c +++ b/planet/Experimental.ocf/CableLorrys.ocs/CableCars.ocd/Structures.ocd/Crossing.ocd/Script.c @@ -21,7 +21,7 @@ local connected_building; // Array of all cable cars currently idling at this station local arrived_cars; -func Initialize() +public func Initialize() { turn_anim = PlayAnimation("Engine", 1, Anim_Const(0), Anim_Const(1000)); arrived_cars = []; @@ -147,7 +147,7 @@ public func CombineWith(object stick_to) } } -/* Interaction */ +/*-- Interaction --*/ // Provides an own interaction menu. public func HasInteractionMenu() { return true; } @@ -167,7 +167,6 @@ public func GetInteractionMenus(object clonk) Priority = 20 }; PushBack(menus, crossing_menu); - return menus; } @@ -188,8 +187,7 @@ public func GetSettingsMenuEntries() var menu_entries = []; - // Clickable buttons - + // Clickable buttons. var station = new custom_entry { Priority = 1000, Tooltip = "$TooltipToggleStation$", @@ -226,7 +224,7 @@ public func OnSettingsHover(symbol, extra_data, desc_menu_target, menu_id) GuiUpdate({ Text = text }, menu_id, 1, desc_menu_target); } -/* Settings */ +/*-- Settings --*/ public func ToggleStation(bool silent) { @@ -352,5 +350,5 @@ public func SetManual() { manual_setting = true; return true; } local Name = "$Name$"; local BlastIncinerate = 50; -local LineAttach = [6,-9]; +local LineAttach = [6, -9]; local Components = {Metal = 1, Wood = 1}; 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 4fba57361..517f29b28 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 @@ -85,7 +85,9 @@ public func GetCableCarExtraMenuEntries(array menu_entries, proplist custom_entr PushBack(menu_entries, { symbol = vehicle, extra_data = "Pickup", custom = to_pickup }); i++; } - } else if (pickup && GetRailTarget()) { + } + else if (pickup && GetRailTarget()) + { // Drop the vehicle var drop = new custom_entry { Priority = 2000, @@ -142,7 +144,6 @@ local FxCableHoistPickup = new Effect { Construction = func(object hoist) { - this.hoist = hoist; this.vehicle_touchable = Target.Touchable; Target.Touchable = 0; diff --git a/planet/Tests.ocf/CableCars.ocs/Scenario.txt b/planet/Tests.ocf/CableCars.ocs/Scenario.txt index 7010a3962..c6cfafe2d 100644 --- a/planet/Tests.ocf/CableCars.ocs/Scenario.txt +++ b/planet/Tests.ocf/CableCars.ocs/Scenario.txt @@ -2,7 +2,7 @@ Title=Cable Cars [Definitions] -Definition2=Experimental.ocf/CableLorrys.ocs/CableCars.ocd +Definition2=Experimental.ocf\CableLorrys.ocs\CableCars.ocd [Landscape] NoScan=1 diff --git a/planet/Tests.ocf/CableCars.ocs/Script.c b/planet/Tests.ocf/CableCars.ocs/Script.c index a78685873..169509182 100644 --- a/planet/Tests.ocf/CableCars.ocs/Script.c +++ b/planet/Tests.ocf/CableCars.ocs/Script.c @@ -579,9 +579,13 @@ global func Test8_OnFinished() return; } - global func Test9_OnStart(int plr) { + var wdt = LandscapeWidth(); + var hgt = LandscapeHeight(); + DrawMaterialQuad("Gold", 0, 0, wdt, 0, wdt, hgt, 0, hgt, DMQ_Sky); + ClearFreeRect(0, 0, wdt, hgt); + var nr_crossings = RandomX(6, 12); var connect_chance = 20; // In percent. var start_time = GetTime(); @@ -594,18 +598,31 @@ global func Test9_OnStart(int plr) { for (var c2 in crossings) { - if (c1 != c2 && Random(100) < connect_chance) + if (c1 != c2 && Random(100) < connect_chance && !AreDirectlyConnectedStations(c1, c2)) { CreateCableCrossingsConnection(c1, c2); nr_connections++; } } } + var time_network_creation = GetTime() - start_time; + + var random_cable = FindObject(Find_ID(CableLine), Sort_Random()); + var c1 = random_cable->GetActionTarget(0); + var c2 = random_cable->GetActionTarget(1); + start_time = GetTime(); + random_cable->RemoveObject(); + var time_connection_removal = GetTime() - start_time; + + start_time = GetTime(); + CreateCableCrossingsConnection(c1, c2); + var time_connection_recreation = GetTime() - start_time; // Log what the test is about. Log("Test a random network for symmetric distance measures."); - var time = GetTime() - start_time; - Log("It took %d ms to create %d stations with %d connections.", time, nr_crossings, nr_connections); + Log("It took %d ms to create %d stations with %d connections.", time_network_creation, nr_crossings, nr_connections); + Log("It took %d ms to remove a random connection.", time_connection_removal); + Log("It took %d ms to recreate that random connection.", time_connection_recreation); return true; } @@ -713,6 +730,11 @@ global func IsSymmetricCableCarNetwork() return is_symmetric; } +global func AreDirectlyConnectedStations(object c1, object c2) +{ + return !!FindObject(Find_Func("IsConnectedTo", c1), Find_Func("IsConnectedTo", c2)); +} + /*-- Helper Functions --*/