From 49d03e52c6783b79255e1752ad86771443021789 Mon Sep 17 00:00:00 2001 From: Maikel de Vries Date: Fri, 26 Jan 2018 18:49:19 +0100 Subject: [PATCH] improve cable car test scenario --- planet/Tests.ocf/CableCars.ocs/MapBg.bmp | Bin 3638 -> 3638 bytes planet/Tests.ocf/CableCars.ocs/MapFg.bmp | Bin 3638 -> 3638 bytes planet/Tests.ocf/CableCars.ocs/Script.c | 248 ++++++++++++++++++++++- 3 files changed, 238 insertions(+), 10 deletions(-) diff --git a/planet/Tests.ocf/CableCars.ocs/MapBg.bmp b/planet/Tests.ocf/CableCars.ocs/MapBg.bmp index e6504b8b1a7b70561c03bbbffc0f2ab873c85b89..4a3c1e684c6a9bd44324c5ba955a0ff01454dab5 100644 GIT binary patch literal 3638 zcmeH}ziSjh6vtm2nK*ICz=0MT8%2!47(FnJ7>t#{SO|i0fk40}m5|Oxj41@M7fV4< z{3|R(K|2dOOU3G7U}0f&)X&??B^Q!_dqLA=bF(x1=6!#>H&f)w^~qtWp2__pqpU77 zbRLicym^K?Q}rI;&G`BDjXaRwvSRjCVUx4uY{Zz%Fp`-w^WkG-V#zpqVq9*_-z6uD zSSzVQ3A2^q$G>D@`mBV(LAm&BK@L9pLDb5fsqQ4;H!bH~NtWBl|s}zry zn{!K~d-ROTQhO<`q(A6e0)}-qC9@HyoVs?z7=^kYps zt9N3V+6sD8z@PEhW{%{QtP?eRnvoDs)DZCRRY-fMG58I&dib3S^o2f{2+m3a#i$(W zqpjtkq30I3vxTQlBcY6(B~_}pZO|9To}PWgCmuL2t7i_c$8AD8QBR;|EvfDC0#@5% zB6V|q7H+59;GOcb>8Qt3BQ~gk`$3-!K60S|;UC08FHZ);C1y6MXz6QBa|x zcnF+zz+2!hW$G^BiOT6B+>UsV26{pJh)zjf1d|}N;1AJ9r)Sjlc?5u0yH^Xb*|IGydRe!U5J^#Cn@BRN{)l04Z{T04j~)~G1AhQl?R%d9 literal 3638 zcmeH}y=xUg6va_@L*wKV9cn$`|@5sNCK|G*kr@(%-*^8oO932gIu~g+OPIAx06%K?;hTarMGW%U%zxWEw#g0mMKe&EGaQ3=E&dvLnnwQ9Xv9m>(jSI zh`p=>=oF(<|Kp#U89S|_w^!$$&1m1FAC{(D<0r|FB1>n+rZs&2hDI;X>gklb3CdJ$R=`(3{Q>z;p_o4CLitML1C^Z!!2{PBWFz<;e-~~+`Yym?KPx@_IoN^zlBq_2VK(50M?c=- zN3dc3PIXwtdVZJjjn(w8RA&>JwUkOeH zzjH0c7Izg*6&gdynUW7RIp}r`v~zm&RhfSc>yyojT81ydrpD#ygR>%5aA&eqKt_zS z3TT5xvRe9yXiU^4d?^_L?yTV4@Fw6fbU$Rc{ML0qz=!YJ8`gWgP2X@YZ z_MKb%sz<%Ha(P{=eq(vf`@a!jNBK9>*VF&M>(~DO(a}=Nzdx$)Hn}NsceCES3RSOe zC3^*6B~o+I1*loJn%)6e4b)vN19Ymoa{4wok*$E+HQT6fU-j+OZzb$s#k(f`C4RTO Tj>qe$x&Z5fyC1s_taacwD^Y;l diff --git a/planet/Tests.ocf/CableCars.ocs/MapFg.bmp b/planet/Tests.ocf/CableCars.ocs/MapFg.bmp index 1511a6d26169084a073f5f8cd3cb9300603c8b77..8ddbe2e1bf98ffabadcdf2dcb66dd81e3d30fa90 100644 GIT binary patch literal 3638 zcmeH|ziSjh6vtm2nK*GT3kM2nv{1wtjL`$rh{0GHjD;X57YGDwQVDi8qNWhUUMvMc z@vpED1??>CEETJRg@uLDQ9p0@F1MG97xw}-I?3+*dfy-Ky$!i=d3Id#F}qV_lGS-0 zokwIBZ^l?L|q}goB;^LyH z%>KzWnV6W6r*FT?a~^eR3H1CNiyp~~<{DHMULzTKynlS1Ig<}B?{n_S*U6VpA61GG z$gh%KZl_mE~TtJi7 zt^i&l3m?9@GvwyIy0bjgA|!f^x58Y6hk#$tKEY$AYYYc+abP1bf-kFCs0p|22Y}#E`i%|9!nj)SnG&RMqC2MLukS8p^i>_-a?d78#E3T zV^GLg@8}I}!+S%@yGEnDW4#H!wjrdv-3-64J)lzkLGZCH@am>4*SFpR-xt5};IH7x zp=d_y*n>%f|X8~-I+J<`{TXYBNwks3`#yGc8QFz zy1>+TpX}zz7${!(vyUfp{mpB+CqLy*SkJ>z6iF1AQINnp@b>)eJ$RgWkOPND<=Xr$ zA;ekKAT;8=k-nwz_UVG`dH7w^^K8M5f0N;lau1u_K&`jGts5tmxt7{kP%?TJ`B1+(u?+XJuw) z22WP@k1Wg3(2%@X`6ka+K8vFUB~b@Qcq7@P2spfSRe7_18}y zC9=vN$<>7=@G%sIb0^l3gD1<{z#GUhlHt#hj}}T+d*d_mQ>KNBe&&-nVh)U#m=rjb zkC@f^d@M2CCW9|ZnZz_NMh{G&Cx%>)fmnm+I($0vVz@k-I2Efg^n6S)nc&Nk)D%Ia2nqECow_`?VIARIkg@aQIbbK?On!_p{$;tG`L;Wf1fSyOgxrBPC zkx}b4hKtcFWuQFDsSS8JrRS~-zSa}ab_jl7W3W{HO7MX)Ufr|_Y_Tolw@B`C{5SB_ zP+UZ}XPbwv`UHPF{siBWlYeuqk2X)}wA^0{uvoSti*={59{5hUv`JLf?}?|l()pJ9 zT1|`pjpj61w#2u6zZ>|5k1qI@l;NV6E&9bTs7O%@UGRBI0c<==c#bu!6x|6*(0tQ| zFA{POwOXfvPJA<`e4+$InupciN>vb4!);{e1lo#?NX3O3P?CzU&2$AbHUm{xC48}| oMwnw7s@uWm|EhL^uUhd=^P5F(lcx#a_N6rmwyFOg_Ahkc7x^`pl>h($ diff --git a/planet/Tests.ocf/CableCars.ocs/Script.c b/planet/Tests.ocf/CableCars.ocs/Script.c index 690000ff7..cb9a03c3d 100644 --- a/planet/Tests.ocf/CableCars.ocs/Script.c +++ b/planet/Tests.ocf/CableCars.ocs/Script.c @@ -57,7 +57,7 @@ protected func InitializePlayer(int plr) // Add test control effect. var effect = AddEffect("IntTestControl", nil, 100, 2); - effect.testnr = 4; + effect.testnr = 1; effect.launched = false; effect.plr = plr; return; @@ -145,6 +145,7 @@ global func FxIntTestControlTimer(object target, proplist effect) Log("All tests have been successfully completed!"); return FX_Execute_Kill; } + PrintCableCarNetwork(); effect.launched = true; } // Check whether the current test has been finished. @@ -203,7 +204,7 @@ global func Test1_Completed() global func Test1_OnFinished() { - RemoveAll(Find_Or(Find_ID(WindGenerator), Find_ID(ToolsWorkshop), Find_ID(CableCrossing), Find_ID(CableHoist), Find_ID(CableLorry))); + RemoveTestObjects(); return; } @@ -259,7 +260,7 @@ global func Test2_Completed() global func Test2_OnFinished() { - RemoveAll(Find_Or(Find_ID(WindGenerator), Find_ID(ToolsWorkshop), Find_ID(CableCrossing), Find_ID(CableHoist), Find_ID(CableLorry))); + RemoveTestObjects(); return; } @@ -289,7 +290,7 @@ global func Test3_OnStart(int plr) crossing1->CombineWith(workshop); workshop->AddToQueue(Shovel, 2); - ScheduleCall(line_to_break, "LineBreak", 36, 0, true); + ScheduleCall(line_to_break, "OnLineBreak", 36, 0, true); ScheduleCall(line_to_break, "RemoveObject", 37, 0, true); ScheduleCall(nil, "CreateCableCrossingsConnection", 240, 0, crossing2, crossing3); @@ -307,12 +308,58 @@ global func Test3_Completed() global func Test3_OnFinished() { - RemoveAll(Find_Or(Find_ID(WindGenerator), Find_ID(ToolsWorkshop), Find_ID(CableCrossing), Find_ID(CableHoist), Find_ID(CableLorry))); + RemoveTestObjects(); + return; +} + +global func Test4_OnStart(int plr) +{ + SetWindFixed(50); + CreateObjectAbove(WindGenerator, 90, 160, plr); + + var crossing1 = CreateObjectAbove(CableCrossing, 70, 160, plr); + var crossing2 = CreateObjectAbove(CableCrossing, 216, 64, plr); + var crossing3 = CreateObjectAbove(CableCrossing, 272, 64, plr); + var crossing4 = CreateObjectAbove(CableCrossing, 450, 104, plr); + + CreateCableCrossingsConnection(crossing1, crossing2); + CreateCableCrossingsConnection(crossing2, crossing3); + CreateCableCrossingsConnection(crossing3, crossing4); + + var hoist = crossing4->CreateObject(CableHoist); + hoist->EngageRail(crossing4); + var lorry = crossing4->CreateObject(CableLorry); + hoist->PickupVehicle(lorry); + lorry->CreateContents(Metal, 2); + lorry->CreateContents(Wood, 2); + + var workshop = CreateObjectAbove(ToolsWorkshop, 40, 160, plr); + crossing1->CombineWith(workshop); + workshop->AddToQueue(Shovel, 2); + + ScheduleCall(crossing2, "RemoveObject", 36, 0, true); + ScheduleCall(nil, "CreateCableCrossingsConnection", 240, 0, crossing1, crossing3); + + // Log what the test is about. + Log("Check if a delivery is continued when a station is destroyed."); + return true; +} + +global func Test4_Completed() +{ + if (ObjectCount(Find_ID(Shovel)) >= 2) + return true; + return false; +} + +global func Test4_OnFinished() +{ + RemoveTestObjects(); return; } -global func Test4_OnStart(int plr) +global func Test5_OnStart(int plr) { SetWindFixed(50); CreateObjectAbove(WindGenerator, 90, 160, plr); @@ -349,16 +396,146 @@ global func Test4_OnStart(int plr) return true; } -global func Test4_Completed() +global func Test5_Completed() { if (ObjectCount(Find_ID(Shovel)) >= 2) return true; return false; } -global func Test4_OnFinished() +global func Test5_OnFinished() { - RemoveAll(Find_Or(Find_ID(WindGenerator), Find_ID(ToolsWorkshop), Find_ID(CableCrossing), Find_ID(CableHoist), Find_ID(CableLorry))); + RemoveTestObjects(); + return; +} + +global func Test6_OnStart(int plr) +{ + SetWindFixed(50); + CreateObjectAbove(WindGenerator, 30, 160, plr); + + var crossing1 = CreateObjectAbove(CableCrossing, 70, 160, plr); + var crossing2 = CreateObjectAbove(CableCrossing, 216, 64, plr); + var crossing3 = CreateObjectAbove(CableCrossing, 272, 64, plr); + var crossing4 = CreateObjectAbove(CableCrossing, 450, 104, plr); + var crossing5 = CreateObjectAbove(CableCrossing, 220, 160, plr); + var crossing6 = CreateObjectAbove(CableCrossing, 280, 160, plr); + var crossing7 = CreateObjectAbove(CableCrossing, 348, 104, plr); + var crossing8 = CreateObjectAbove(CableCrossing, 476, 312, plr); + + CreateCableCrossingsConnection(crossing1, crossing2); + CreateCableCrossingsConnection(crossing2, crossing3); + CreateCableCrossingsConnection(crossing3, crossing4); + CreateCableCrossingsConnection(crossing1, crossing5); + CreateCableCrossingsConnection(crossing5, crossing6); + CreateCableCrossingsConnection(crossing6, crossing7); + CreateCableCrossingsConnection(crossing7, crossing4); + CreateCableCrossingsConnection(crossing7, crossing8); + + var hoist, lorry; + hoist = crossing4->CreateObject(CableHoist); + hoist->EngageRail(crossing4); + lorry = crossing4->CreateObject(CableLorry); + hoist->PickupVehicle(lorry); + lorry->CreateContents(Rock, 4); + + hoist = crossing8->CreateObject(CableHoist); + hoist->EngageRail(crossing8); + lorry = crossing8->CreateObject(CableLorry); + hoist->PickupVehicle(lorry); + + var foundry = CreateObjectAbove(Foundry, 110, 160, plr); + foundry->AddToQueue(Concrete, nil, true); + crossing1->CombineWith(foundry); + + var pump = CreateObjectAbove(Pump, 50, 160, plr); + var source = CreateObjectAbove(Pipe, 168, 292, plr); + source->ConnectPipeTo(pump, PIPE_STATE_Source); + var drain = CreateObjectAbove(Pipe, 240, 100, plr); + drain->ConnectPipeTo(pump, PIPE_STATE_Drain); + drain->ConnectPipeTo(foundry, PIPE_STATE_Drain); + + var pump = CreateObjectAbove(Pump, 250, 160, plr); + CreateObjectAbove(Flagpole, 280, 160, plr); + pump->SetMaterialSelection([Concrete]); + var source = CreateObjectAbove(Pipe, 168, 292, plr); + source->ConnectPipeTo(pump, PIPE_STATE_Source); + source->ConnectPipeTo(foundry, PIPE_STATE_Source); + var drain = CreateObjectAbove(Pipe, 80, 300, plr); + drain->ConnectPipeTo(pump, PIPE_STATE_Drain); + + Schedule(nil, "CreateObject(Dynamite, 482, 266)->Fuse()", 180, 10**6); + + // Log what the test is about. + Log("Test automated concrete production line."); + return true; +} + +global func Test6_Completed() +{ + if (GetMaterial(80, 240) == Material("Granite")) + return true; + return false; +} + +global func Test6_OnFinished() +{ + RemoveTestObjects(); + RemoveEffect("IntSchedule"); + return; +} + +global func Test7_OnStart(int plr) +{ + SetWindFixed(50); + CreateObjectAbove(WindGenerator, 90, 160, plr); + + var crossing1 = CreateObjectAbove(CableCrossing, 70, 160, plr); + var crossing2 = CreateObjectAbove(CableCrossing, 216, 64, plr); + var crossing3 = CreateObjectAbove(CableCrossing, 272, 64, plr); + var crossing4 = CreateObjectAbove(CableCrossing, 450, 104, plr); + var crossing5 = CreateObjectAbove(CableCrossing, 220, 160, plr); + var crossing6 = CreateObjectAbove(CableCrossing, 280, 160, plr); + var crossing7 = CreateObjectAbove(CableCrossing, 348, 104, plr); + + CreateCableCrossingsConnection(crossing1, crossing2); + CreateCableCrossingsConnection(crossing2, crossing3); + CreateCableCrossingsConnection(crossing3, crossing4); + CreateCableCrossingsConnection(crossing1, crossing5); + var line_to_break = CreateCableCrossingsConnection(crossing5, crossing6); + CreateCableCrossingsConnection(crossing6, crossing7); + CreateCableCrossingsConnection(crossing7, crossing4); + + var hoist = crossing4->CreateObject(CableHoist); + hoist->EngageRail(crossing4); + var lorry = crossing4->CreateObject(CableLorry); + hoist->PickupVehicle(lorry); + lorry->CreateContents(Metal, 2); + lorry->CreateContents(Wood, 2); + + var workshop = CreateObjectAbove(ToolsWorkshop, 40, 160, plr); + crossing1->CombineWith(workshop); + workshop->AddToQueue(Shovel, 2); + + ScheduleCall(line_to_break, "OnLineBreak", 36, 0, true); + ScheduleCall(line_to_break, "RemoveObject", 37, 0); + ScheduleCall(nil, "PrintCableCarNetwork", 38, 0); + + // Log what the test is about. + Log("Test if the car finds a new path if the current is removed."); + return true; +} + +global func Test7_Completed() +{ + if (ObjectCount(Find_ID(Shovel)) >= 2) + return true; + return false; +} + +global func Test7_OnFinished() +{ + RemoveTestObjects(); return; } @@ -410,10 +587,61 @@ global func FxIntAlternatingWindTimer(object target, proplist effect, int time) return FX_OK; } +global func RemoveTestObjects() +{ + RemoveAll(Find_Or( + Find_Or( + Find_ID(WindGenerator), + Find_ID(Foundry), + Find_ID(Pump), + Find_ID(Pipe), + Find_ID(CableCrossing), + Find_ID(CableHoist), + Find_ID(CableLorry), + Find_ID(Flagpole), + Find_ID(ToolsWorkshop), + Find_ID(Rock) + ), + Find_Or( + Find_ID(Dynamite) + ) + )); + return; +} + global func CreateCableCrossingsConnection(object c1, object c2) { var cable = c1->CreateObject(CableLine); cable->SetConnectedObjects(c1, c2); return cable; } - + + +global func PrintCableCarNetwork() +{ + Log("Distances between all of the cable crossings:"); + var cable_crossings = FindObjects(Find_Func("IsCableCrossing")); + var header = "Obj# |"; + var line = "------"; + for (var crossing in cable_crossings) + { + header = Format("%s %04d", header, crossing->ObjectNumber()); + line = Format("%s-----", line); + } + Log(Format("%s tot", header)); + Log(Format("%s-----", line)); + for (var crossing1 in cable_crossings) + { + var msg = Format("%04d |", crossing1->ObjectNumber()); + var sum = 0; + for (var crossing2 in cable_crossings) + { + var len = crossing1->GetLengthToTarget(crossing2); + sum += len; + msg = Format("%s %04d", msg, len); + } + msg = Format("%s %04d", msg, sum); + Log(msg); + } + return; +}