// // CPT operator / SondeerGame // This source file is (c) by Deltares. // - October 2014 // // ************************************************************************************************ // Menu showing nulmeting (calibration) before and after sondering // // ------------------------------------------------------------ // // © 2008, Deltares // // 2008-11-27 wsl Created // ************************************************************************************************ class MenuNulMeting extends GeoGUIPage; var automated GeoFrame DialogBackground; var automated GeoTitle TitleLabel; var automated GeoLabel NulpuntLabel; var automated GeoLabel AfterCalibrationLabel; var automated GeoLabel BeforeLabel; var automated GeoLabel AfterLabel; var automated GeoLabel DiepteLabel; var automated GeoLabel PuntweerstandLabel; var automated GeoLabel KleefLabel; var automated GeoLabel WaterspanningLabel; var automated GeoLabel HellingLabel; //var automated GeoLabel Diepte1; var automated GeoLabel Puntweerstand1; var automated GeoLabel Kleef1; var automated GeoLabel Waterspanning1; var automated GeoLabel Helling1; var automated GeoLabel Diepte2; var automated GeoLabel Puntweerstand2; var automated GeoLabel Kleef2; var automated GeoLabel Waterspanning2; var automated GeoLabel Helling2; //var automated GeoLabel Diepte3; var automated GeoLabel Puntweerstand3; var automated GeoLabel Kleef3; var automated GeoLabel Waterspanning3; var automated GeoLabel Helling3; var automated GeoLabel Diepte4; var automated GeoLabel Puntweerstand4; var automated GeoLabel Kleef4; var automated GeoLabel Waterspanning4; var automated GeoLabel Helling4; //var automated GeoLabel Diepte5; var automated GeoLabel Puntweerstand5; var automated GeoLabel Kleef5; var automated GeoLabel Waterspanning5; var automated GeoLabel Helling5; var automated GeoLabel Diepte6; var automated GeoLabel Puntweerstand6; var automated GeoLabel Kleef6; var automated GeoLabel Waterspanning6; var automated GeoLabel Helling6; var automated GeoButton CorrectButton; var automated GeoButton InCorrectButton; var automated GeoLabel Pullingconus; var automated GeoImage Pullinganimation; var int framenum; var float Column1Left, Column2Left, Column3Left, Column4Left, Column5Left, Column6Left, Column7Left, Row1Top, Row2Top, Row3Top, Row4Top, Row5Top, TableTop, TableGap, RowGap, ColumnGapSmall, ColumnGapLarge, ColumnWidth, RowHeight; //var float Diepte1val; var float Diepte2val; //var float Diepte3val; var float Diepte4val; //var float Diepte5val; var float Diepte6val; var float Puntweerstand1val; var float Puntweerstand2val; var float Puntweerstand3val; var float Puntweerstand4val; var float Puntweerstand5val; var float Puntweerstand6val; var float Kleef1val; var float Kleef2val; var float Kleef3val; var float Kleef4val; var float Kleef5val; var float Kleef6val; var float Waterspanning1val; var float Waterspanning2val; var float Waterspanning3val; var float Waterspanning4val; var float Waterspanning5val; var float Waterspanning6val; var float Helling1val; var float Helling2val; var float Helling3val; var float Helling4val; var float Helling5val; var float Helling6val; var float FSO; var float DiepteFSO; var float HellingFSO; var int CountDownTimer; function InitComponent(GUIController MyController, GUIComponent MyOwner) { Super.InitComponent(MyController, MyOwner); Column1Left = (DialogBackground.WinWidth - 7*ColumnWidth - 4*ColumnGapLarge - 3*ColumnGapSmall) / 2.0 + DialogBackground.WinLeft; Column2Left = Column1Left + ColumnWidth + 2*ColumnGapLarge; Column3Left = Column2Left + ColumnWidth + ColumnGapSmall; Column4Left = Column3Left + ColumnWidth + ColumnGapLarge; Column5Left = Column4Left + ColumnWidth + ColumnGapSmall; Column6Left = Column5Left + ColumnWidth + ColumnGapLarge; Column7Left = Column6Left + ColumnWidth + ColumnGapSmall; // position table 1st column (quantities) NulpuntLabel.WinLeft = Column1Left; DiepteLabel.WinLeft = Column1Left; PuntweerstandLabel.WinLeft = Column1Left; KleefLabel.WinLeft = Column1Left; WaterspanningLabel.WinLeft = Column1Left; HellingLabel.WinLeft = Column1Left; NulpuntLabel.WinTop = TableTop; DiepteLabel.WinTop = NulpuntLabel.WinTop + NulpuntLabel.WinHeight + TableGap; PuntweerstandLabel.WinTop = DiepteLabel.WinTop + RowHeight + RowGap; KleefLabel.WinTop = PuntweerstandLabel.WinTop + RowHeight + RowGap; WaterspanningLabel.WinTop = KleefLabel.WinTop + RowHeight + RowGap; HellingLabel.WinTop = WaterspanningLabel.WinTop + RowHeight + RowGap; Row1Top = DiepteLabel.WinTop; Row2Top = PuntweerstandLabel.WinTop; Row3Top = KleefLabel.WinTop; Row4Top = WaterspanningLabel.WinTop; Row5Top = HellingLabel.WinTop; // position table 2nd & 3rd column (after calibration) AfterCalibrationLabel.WinLeft = Column2Left; AfterCalibrationLabel.WinTop = TableTop; AfterCalibrationLabel.WinWidth = 2 * ColumnWidth + ColumnGapSmall; AfterCalibrationLabel.TextAlign = TXTA_Center; //Diepte1.WinLeft = Column2Left; Puntweerstand1.WinLeft = Column2Left; Kleef1.WinLeft = Column2Left; Waterspanning1.WinLeft = Column2Left; Helling1.WinLeft = Column2Left; Diepte2.WinLeft = Column3Left; Puntweerstand2.WinLeft = Column3Left; Kleef2.WinLeft = Column3Left; Waterspanning2.WinLeft = Column3Left; Helling2.WinLeft = Column3Left; //Diepte1.WinTop = Row1Top; Puntweerstand1.WinTop = Row2Top; Kleef1.WinTop = Row3Top; Waterspanning1.WinTop = Row4Top; Helling1.WinTop = Row5Top; Diepte2.WinTop = Row1Top; Puntweerstand2.WinTop = Row2Top; Kleef2.WinTop = Row3Top; Waterspanning2.WinTop = Row4Top; Helling2.WinTop = Row5Top; // position table 4th & 5th column (before sondering) BeforeLabel.WinLeft = Column4Left; BeforeLabel.WinTop = TableTop; BeforeLabel.WinWidth = 2 * ColumnWidth + ColumnGapSmall; BeforeLabel.TextAlign = TXTA_Center; //Diepte3.WinLeft = Column4Left; Puntweerstand3.WinLeft = Column4Left; Kleef3.WinLeft = Column4Left; Waterspanning3.WinLeft = Column4Left; Helling3.WinLeft = Column4Left; Diepte4.WinLeft = Column5Left; Puntweerstand4.WinLeft = Column5Left; Kleef4.WinLeft = Column5Left; Waterspanning4.WinLeft = Column5Left; Helling4.WinLeft = Column5Left; //Diepte3.WinTop = Row1Top; Puntweerstand3.WinTop = Row2Top; Kleef3.WinTop = Row3Top; Waterspanning3.WinTop = Row4Top; Helling3.WinTop = Row5Top; Diepte4.WinTop = Row1Top; Puntweerstand4.WinTop = Row2Top; Kleef4.WinTop = Row3Top; Waterspanning4.WinTop = Row4Top; Helling4.WinTop = Row5Top; // position table 6th & 7th column (after sondering) AfterLabel.WinLeft = Column6Left; AfterLabel.WinTop = TableTop; AfterLabel.WinWidth = 2 * ColumnWidth + ColumnGapSmall; AfterLabel.TextAlign = TXTA_Center; //Diepte5.WinLeft = Column6Left; Puntweerstand5.WinLeft = Column6Left; Kleef5.WinLeft = Column6Left; Waterspanning5.WinLeft = Column6Left; Helling5.WinLeft = Column6Left; Diepte6.WinLeft = Column7Left; Puntweerstand6.WinLeft = Column7Left; Kleef6.WinLeft = Column7Left; Waterspanning6.WinLeft = Column7Left; Helling6.WinLeft = Column7Left; //Diepte5.WinTop = Row1Top; Puntweerstand5.WinTop = Row2Top; Kleef5.WinTop = Row3Top; Waterspanning5.WinTop = Row4Top; Helling5.WinTop = Row5Top; Diepte6.WinTop = Row1Top; Puntweerstand6.WinTop = Row2Top; Kleef6.WinTop = Row3Top; Waterspanning6.WinTop = Row4Top; Helling6.WinTop = Row5Top; /// Set label: Pullingconus.Caption = IL8N("TPullingConus"); } // called when reopened later (persistent menu) event Opened(GUIComponent Sender) { Super.Opened(Sender); /// Set label: Pullingconus.Caption = IL8N("TPullingConus"); /// start at 1 framenum = 1; } function Timer() { if (GeoPC.PlayerActions.ConusBroken == false) { if (framenum >= 8) { SetTimer(0, false); ShowProgress(false); return; } Pullinganimation.Image = Material(DynamicLoadObject("sondeermeester.animatie.frame" $ framenum, class'Material')); } else { if (framenum >= 8) { SetTimer(0, false); ShowProgress(false); return; } } framenum++; if (framenum > 5 && CountDownTimer > 0) { CountDownTimer--; if (CountDownTimer > 0) { /// Back to 1: framenum = 1; } } Pullingconus.Caption = Pullingconus.Caption $ "."; } /// Show progress indicator: function ShowProgress(bool show) { local int i; for (i = 1; i < Controls.length; i++) { Controls[i].bVisible = !show; } Pullingconus.bVisible = show; Pullinganimation.bvisible = show; } /// Parameter 1 is "before" or "after" event HandleParameters(string Param1, string Param2) { local GeoPlayerController GeoPC; GeoPC = GeoPlayerController(PlayerOwner()); if(Left(Param1, 1) == "a" || Right(Param1, 1) == "r") { //after: values from before have been set in GeoPC // show dots to indicate retrieving from ground CountDownTimer = 4; if (GeoPC.PlayerActions.conusbroken == true) { CountDownTimer = 1; Pullinganimation.Image = Material(DynamicLoadObject("sondeermeester.sondercomputer.Broken", class'Material')); } SetTimer(0.5, true); ShowProgress(true); /// Get values (the mV ones) from geopc: Diepte2val = GeoPC.NulmetingAfterCalibration.Diepte; PuntWeerstand1val = GeoPC.NulmetingAfterCalibration.PuntWeerstand; Kleef1val = GeoPC.NulmetingAfterCalibration.Kleef; Waterspanning1val = GeoPC.NulmetingAfterCalibration.Waterspanning; Helling1val = GeoPC.NulmetingAfterCalibration.Helling; Diepte4val = GeoPC.NulmetingBefore.Diepte; PuntWeerstand3val = GeoPC.NulmetingBefore.PuntWeerstand; Kleef3val = GeoPC.NulmetingBefore.Kleef; Waterspanning3val = GeoPC.NulmetingBefore.Waterspanning; Helling3val = GeoPC.NulmetingBefore.Helling; dialogSondeerComp(Controller.FindMenu(GeoPC.GetSondeercomputerclass())).bPerformedFinalNulmeting = true; // diepte 0.0m if(Rand(8) == 100) { // relevant difference from before Diepte6val = Diepte4val + abs(Randomize(0.0, 0.1 * DiepteFSO)); GeoPC.NulMetingErrorAfter = true; } else { // irrelevantly small difference from before Diepte6val = Diepte4val + abs(Randomize(0.0, 0.01 * DiepteFSO)); } // Puntweerstand 0.0m if(Rand(5) == 100) { // relevant difference from before Puntweerstand5val = Puntweerstand3val + abs(Randomize(0.0, 0.05 * FSO, 0.005 * FSO)); GeoPC.NulMetingErrorAfter = true; } else { // irrelevantly small difference from before Puntweerstand5val = Puntweerstand3val + abs(Randomize(0.0, 0.005 * FSO)); } // Kleef 0.0m if(Rand(4) == 100) { // relevant difference from before Kleef5val = Kleef3val + abs(Randomize(0.0, 0.1 * FSO, 0.01 * FSO)); GeoPC.NulMetingErrorAfter = true; } else { // irrelevantly small difference from before Kleef5val = Kleef3val + abs(Randomize(0.0, 0.01 * FSO)); } // Waterspanning 0.0m if(Rand(3) == 100) { // relevant difference from before Waterspanning5val = Waterspanning3val + abs(Randomize(0.0, 0.1 * FSO, 0.01 * FSO)); GeoPC.NulMetingErrorAfter = true; } else { // irrelevantly small difference from before Waterspanning5val = Waterspanning3val + abs(Randomize(0.0, 0.01 * FSO)); } // Helling 0.0m if(Rand(4) == 100) { // relevant difference from before Helling5val = Helling3val + abs(Randomize(0.0, 0.1 * HellingFSO, 0.01 * HellingFSO)); GeoPC.NulMetingErrorAfter = true; } else { // irrelevantly small difference from before Helling5val = Helling3val + abs(Randomize(0.0, 0.01 * HellingFSO)); } /// jln - 15-12-2008 /// IS cable broken and not replaced? /// Or is the conus damaged? /// AFTER CPT if ( (GeoPC.bCableBroken == true && GeoPC.PlayerActions.ReplacedCable == false) || GeoPC.PlayerActions.HasCorrectCone == false) { /// Water spanning @ 0 Waterspanning5val = 0; Waterspanning6val = 0; } /// Or is the conus completely broken? if ( GeoPC.PlayerActions.ConusBroken == true) { Puntweerstand5val = 0; Puntweerstand6val = 0; Kleef5val = 0; Kleef6val = 0; Helling5val = 0; Helling6val = 0; Waterspanning5val = 0; Waterspanning6val = 0; Diepte6val = abs(Randomize(5.0, 10.01)); } ShowValues(true); } else { // before sondering Diepte2val = abs(Randomize(0.0, 0.02 * DiepteFSO)); PuntWeerstand1val = abs(Randomize(0.0, 0.02 * FSO)); Kleef1val = abs(Randomize(0.0, 0.02 * FSO)); Waterspanning1val = abs(Randomize(0.0, 0.02 * FSO)); Helling1val = abs(Randomize(0.0, 0.02 * HellingFSO)); Diepte4val = abs(Randomize(0.0, 0.05 * DiepteFSO)); PuntWeerstand3val = PuntWeerstand1val + abs(Randomize(0.0, 0.05 * FSO - PuntWeerstand1val)); Kleef3val = Kleef1val + abs(Randomize(0.0, 0.05 * FSO - Kleef1val)); Waterspanning3val = Waterspanning1val + abs(Randomize(0.0, 0.05 * FSO - Waterspanning1val)); Helling3val = Helling1val + abs(Randomize(0.0, 0.05 * HellingFSO - Helling1val)); /// jln - 15-12-2008 /// IS cable broken and not replaced? /// Or is the conus broken? if ( (GeoPC.bCableBroken == true && GeoPC.PlayerActions.ReplacedCable == false) || GeoPC.PlayerActions.HasCorrectCone == false) { /// Water spanning @ 0 Waterspanning3val = 0; Waterspanning4val = 0; GeoPC.NulMetingErrorBefore = true; } /// Store in geopc: GeoPC.NulmetingAfterCalibration.Diepte = Diepte2val; GeoPC.NulmetingAfterCalibration.PuntWeerstand = PuntWeerstand1val; GeoPC.NulmetingAfterCalibration.Kleef = Kleef1val; GeoPC.NulmetingAfterCalibration.Waterspanning = Waterspanning1val; GeoPC.NulmetingAfterCalibration.Helling = Helling1val; GeoPC.NulmetingBefore.Diepte = Diepte4val; GeoPC.NulmetingBefore.PuntWeerstand = PuntWeerstand3val; GeoPC.NulmetingBefore.Kleef = Kleef3val; GeoPC.NulmetingBefore.Waterspanning = Waterspanning3val; GeoPC.NulmetingBefore.Helling = Helling3val; //dialogSondeerComputer(Controller.FindMenu("dialogSondeerComputer")).AllowSelect = false; ShowValues(false); } } function InitLanguages(string lang) { Super.InitLanguages(lang); TitleLabel.Caption = IL8N("TTitleLabel"); CorrectButton.Caption = IL8N("TCorrectButton"); InCorrectButton.Caption = IL8N("TInCorrectButton"); NulpuntLabel.Caption = IL8N("NulpuntLabel"); AfterCalibrationLabel.Caption = IL8N("AfterCalibrationLabel"); BeforeLabel.Caption = IL8N("BeforeLabel"); AfterLabel.Caption = IL8N("AfterLabel"); DiepteLabel.Caption = IL8N("DiepteLabel"); PuntweerstandLabel.Caption = IL8N("PuntweerstandLabel"); KleefLabel.Caption = IL8N("KleefLabel"); WaterspanningLabel.Caption = IL8N("WaterspanningLabel"); HellingLabel.Caption = IL8N("HellingLabel"); } function ShowValues(bool after) { Puntweerstand1.Caption = ""$Puntweerstand1val @ "mV"; Kleef1.Caption = ""$Kleef1val @ "mV"; Waterspanning1.Caption = ""$Waterspanning1val @ "mV"; Helling1.Caption = ""$Helling1val @ "mV"; Diepte2.Caption = ""$Diepte2val @ "m"; Puntweerstand2.Caption = ""$ConvertToMPa(Puntweerstand1val, "Puntweerstand") @ "MPa"; Kleef2.Caption = ""$ConvertToMPa(Kleef1val, "Kleef") @ "MPa"; Waterspanning2.Caption = ""$ConvertToMPa(Waterspanning1val, "Waterspanning") @ "MPa"; Helling2.Caption = ""$ConvertToDegrees(Helling1val) @ "°"; Puntweerstand3.Caption = ""$Puntweerstand3val @ "mV"; Kleef3.Caption = ""$Kleef3val @ "mV"; Waterspanning3.Caption = ""$Waterspanning3val @ "mV"; Helling3.Caption = ""$Helling3val @ "mV"; Diepte4.Caption = ""$Diepte4val @ "m"; Puntweerstand4.Caption = ""$ConvertToMPa(Puntweerstand3val, "Puntweerstand") @ "MPa"; Kleef4.Caption = ""$ConvertToMPa(Kleef3val, "Kleef") @ "MPa"; Waterspanning4.Caption = ""$ConvertToMPa(Waterspanning3val, "Waterspanning") @ "MPa"; Helling4.Caption = ""$ConvertToDegrees(Helling3val) @ "°"; if(after) { Puntweerstand5.Caption = ""$Puntweerstand5val @ "mV"; Kleef5.Caption = ""$Kleef5val @ "mV"; Waterspanning5.Caption = ""$Waterspanning5val @ "mV"; Helling5.Caption = ""$Helling5val @ "mV"; Diepte6.Caption = ""$Diepte6val @ "m"; Puntweerstand6.Caption = ""$ConvertToMPa(Puntweerstand5val, "Puntweerstand") @ "MPa"; Kleef6.Caption = ""$ConvertToMPa(Kleef5val, "Kleef") @ "MPa"; Waterspanning6.Caption = ""$ConvertToMPa(Waterspanning5val, "Waterspanning") @ "MPa"; Helling6.Caption = ""$ConvertToDegrees(Helling5val) @ "°"; } else { Puntweerstand5.Caption = "."; Kleef5.Caption = "."; Waterspanning5.Caption = "."; Helling5.Caption = "."; Diepte6.Caption = "."; Puntweerstand6.Caption = "."; Kleef6.Caption = "."; Waterspanning6.Caption = "."; Helling6.Caption = "."; } } function float ConvertToMPa(float millivolts, string quantity) { if(Right(quantity, 8) == "eerstand") { return millivolts / 231.0331; } else if(Right(quantity, 4) == "leef") { return millivolts / 20572.9927; } else if(Right(quantity, 7) == "panning") { return millivolts / 10215.0307; } } function float ConvertToDegrees(float millivolts) { return millivolts / 30.769; } function float Randomize(float CenterVal, float MaxDeviation, optional float MinDeviation) { local float f, dev_positive; f = Rand(12345) / 12345.0; dev_positive = MinDeviation + f * (MaxDeviation - MinDeviation); if(Rand(2) == 0) { return CenterVal - dev_positive; } else { return CenterVal + dev_positive; } } function InternalOnClose(optional Bool bCanceled) { Super.OnClose(bCanceled); } function bool ButtonClick(GUIComponent Sender) { local dialogSondeerComp DSC; DSC = dialogSondeerComp(Controller.FindMenu(GeoPC.GetSondeercomputerclass())); if(Sender == CorrectButton) { DSC.AllowSelect = true; Controller.CloseMenu(); } else if(Sender == InCorrectButton) { if(DSC.bPerformedFinalNulmeting) { GeoPC.playeractions.ZeroValuesErrorAfter = true; } else { /// Close all windows, return to sondeer computer (only at first screen!) GeoPC.playeractions.ZeroValuesErrorBefore = true; Controller.CloseAll(false); return true; } DSC.AllowSelect = true; Controller.CloseMenu(); } return true; } defaultproperties { bPersistent=false OnClose=InternalOnClose bAllowedAsLast=true bDisconnectOnOpen=false Begin Object Class=GeoFrame name=TDialogBackground WinWidth=0.88 WinHeight=0.74 WinTop=0.13 WinLeft=0.06 End Object Begin Object class=GeoTitle name=TTitleLabel IniOption="TTitleLabel" WinWidth=1 WinLeft=0 WinTop=0.2 WinHeight=0.1 TextAlign=TXTA_Center End Object Begin Object class=GeoLabel Name=TPullingconus IniOption="TPullingConus" WinTop=0.73 WinLeft=0.28 WinWidth=0.5 //TextAlign=TXTA_Center TextFont="GeoNormalFont" bVisible=false End Object Begin Object class=GeoImage Name=TPullinganimation Image=Material'sondeermeester.animatie.frame1' ImageStyle=ISTY_Scaled WinHeight=0.4 WinWidth=0.32 WinTop=0.26 WinLeft=0.34 bVisible=false End Object Begin Object class=GeoLabel Name=TColumnLabels TextFont="GeoNormalFont" End Object Begin Object class=GeoLabel Name=TNulpuntenLabels End Object Begin Object class=GeoLabel Name=TValueLabels TextAlign=TXTA_Center WinWidth=0.08 End Object Begin Object Class=GeoButton Name=TCorrectButton OnClick=ButtonClick INIOption="TCorrectButton" WinWidth=0.18 WinLeft=0.28 WinTop=0.74 End Object Begin Object Class=GeoButton Name=TInCorrectButton OnClick=ButtonClick INIOption="TInCorrectButton" WinWidth=0.22 WinLeft=0.53 WinTop=0.74 End Object DialogBackground=TDialogBackground TitleLabel=TTitleLabel NulpuntLabel=TColumnLabels AfterCalibrationLabel=TColumnLabels BeforeLabel=TColumnLabels AfterLabel=TColumnLabels DiepteLabel=TNulpuntenLabels PuntweerstandLabel=TNulpuntenLabels KleefLabel=TNulpuntenLabels WaterspanningLabel=TNulpuntenLabels HellingLabel=TNulpuntenLabels //Diepte1=TValueLabels Diepte2=TValueLabels //Diepte3=TValueLabels Diepte4=TValueLabels //Diepte5=TValueLabels Diepte6=TValueLabels Puntweerstand1=TValueLabels Puntweerstand2=TValueLabels Puntweerstand3=TValueLabels Puntweerstand4=TValueLabels Puntweerstand5=TValueLabels Puntweerstand6=TValueLabels Kleef1=TValueLabels Kleef2=TValueLabels Kleef3=TValueLabels Kleef4=TValueLabels Kleef5=TValueLabels Kleef6=TValueLabels Waterspanning1=TValueLabels Waterspanning2=TValueLabels Waterspanning3=TValueLabels Waterspanning4=TValueLabels Waterspanning5=TValueLabels Waterspanning6=TValueLabels Helling1=TValueLabels Helling2=TValueLabels Helling3=TValueLabels Helling4=TValueLabels Helling5=TValueLabels Helling6=TValueLabels CorrectButton=TCorrectButton InCorrectButton=TInCorrectButton Pullinganimation = TPullinganimation Pullingconus=TPullingconus TableTop=0.35 TableGap=0.06 RowGap=0.02 ColumnGapSmall=0.01 ColumnGapLarge=0.04 ColumnWidth=0.08 RowHeight=0.03 FSO=8000.0 DiepteFSO=50.0 HellingFSO=150.0 }