// September 2015 // Levee Patroller / Dijk Patrouille // This source file is (c) by Deltares. This source file is open source but only available to select users. Do not redistribute without written permission of Stichting Deltares, Delft, The Netherlands. // This header has been automatically generated. //============================================================================= // GeoCompleteExercise // // Contains data on current state of Complete Exercise // // ------------------------------------------------------------ // Created by Rui Guimaraes // © 2006, Geodelft // // Date Id Modification // 2007-02-04 gui Bug one the code corrected and problem fixed // 2007-06-19 gui Bugs for maps corrected // 2007-06-22 gui Winner Map added // 2007-10-16 jln Replace LevelFailureList with other struct to support new Levee failures. //============================================================================= class GeoCompleteExercise extends Object config(GeoUser); #exec OBJ LOAD FILE=GeoDelft.utx var String WinnerMapString; /// Used for a hack: var name nTempName; // ****************** // Game Variables // ****************** var globalconfig bool IsCompleteExercise; var globalconfig bool bIsCompleteExerciseWinner; var globalconfig int CurrentLevel; var globalconfig int CurrentScore; // ****************** // Levels Constants // ****************** var Enum FailingTypes { FAI_Rep, FAI_Rel, FAI_Cri } FailingType; var struct LevelFailures { var FailingTypes Type; var int NumberOfActiveFailures; var array FailureNames; } LF; var struct LevelDetails { var string MapString; var int MapNumber; // ADDED TO USE MAPS IN COMPLETE EXERCISE var bool bRain; var bool bMakeDiag; var bool bTakeMeas; var material Screenshot; var string EN_ShortDescription; var string NL_ShortDescription; // var array LevelFailureList; var array LevelFailureList; } LD; //const NUMBER_LEVELS = 4; var int NUMBER_LEVELS; var array LevelDetailsList; /// Kind of a hack to be able to create dynamic names for the various triggers. function name GetName(string NameString) { SetPropertyText("nTempName", NameString); return nTempName; } //============================================================================= // Date Id Modification // 2006-12-12 gui Created //============================================================================= function int TotalLevels() { NUMBER_LEVELS = int(Localize ("Exercise", "NumberLevels", "GeoSimulator")); return NUMBER_LEVELS; } //============================================================================= // Date Id Modification // 2006-12-12 gui Created //============================================================================= function int CurrentLevelInfo() { return CurrentLevel+1; } //============================================================================= // // This function is used to return the current level loadscreen // // Date Id Modification // 2006-12-12 gui Created // 2007-02-04 gui Bug one the code corrected and problem fixed // //============================================================================= function material GetCurrentLevelScreenshot() { local material TempImage; LevelValues(); TempImage=LevelDetailsList[CurrentLevel].Screenshot; return TempImage; } function GeoEnums.FailingMechanisms GetFailureFromString(string str) { str = Caps(str); if (str == "FM_PIPING") return FM_Piping; if (str == "FM_MACRO") return FM_Macro; if (str == "FM_MICRO") return FM_Micro; if (str == "FM_EROSIONINNER") return FM_ErosionInner; if (str == "FM_EROSIONINNERMICRO") return FM_ErosionInnerMicro; if (str == "FM_EROSIONOUTERFLOATINGWASTE") return FM_ErosionOuterFloatingWaste; if (str == "FM_EROSIONOUTERRIPRAP") return FM_ErosionOuterRipRap; if (str == "FM_MICROTUTORIAL") return FM_MicroTutorial; if (str == "FM_WATERQUALITY") return FM_WaterQuality; return FM_NONE; } //============================================================================= // Date Id Modification // 2006-09-29 gui Created this header // 2007-06-19 gui Bugs for maps corrected //============================================================================= function LevelValues() { local int LN, mechanisms, j,k; local string temp; //GLOBAL SETTINGS LevelDetailsList.Insert(0,TotalLevels()); // ******************* // LEVEL 0 // ******************* LN=0; /* LevelDetailsList[LN].MapString="Scenario1DG"; // GLOBAL SETTINGS OF LEVEL LevelDetailsList[LN].MapNumber=1; // ADDED - 2007-06-19 - gui - THE SAME NUMBER AS IN MAPSTRING LevelDetailsList[LN].bRain=false; LevelDetailsList[LN].bMakeDiag=false; LevelDetailsList[LN].bTakeMeas=false; LevelDetailsList[LN].Screenshot=Material'GeoDelft.MapPreview.Level1screenshot'; LevelDetailsList[LN].EN_ShortDescription="After the storm"; LevelDetailsList[LN].NL_ShortDescription="Na de storm"; */ /// Loop through all levels: //for (LN = 0; LN < NUMBER_LEVELS ; LN++ ) LN = CurrentLevel; // { mechanisms = int(Localize ("Exercise"$LN, "Mechanisms", "GeoSimulator")); Log("Mechanisms detected: " @ mechanisms); LevelDetailsList[LN].LevelFailureList.Remove(0, LevelDetailsList[LN].LevelFailureList.Length); LevelDetailsList[LN].MapString = Localize("Exercise"$LN, "MapString", "GeoSimulator"); LevelDetailsList[LN].MapNumber = int(Localize ("Exercise"$LN, "MapNumber", "GeoSimulator")); LevelDetailsList[LN].bRain = bool(Localize ("Exercise"$LN, "bRain", "GeoSimulator")); LevelDetailsList[LN].bMakeDiag = bool(Localize ("Exercise"$LN, "bMakeDiag", "GeoSimulator")); LevelDetailsList[LN].bTakeMeas = bool(Localize ("Exercise"$LN, "bTakeMeas", "GeoSimulator")); LevelDetailsList[LN].Screenshot = Texture(DynamicLoadObject(Localize ("Exercise"$LN, "Screenshot", "GeoSimulator"),class'Texture')); LevelDetailsList[LN].EN_ShortDescription = (Localize ("Exercise"$LN, "EN_ShortDescription", "GeoSimulator")); LevelDetailsList[LN].NL_ShortDescription = (Localize ("Exercise"$LN, "NL_ShortDescription", "GeoSimulator")); for (j = 0; j < mechanisms ; j++ ) { LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = GetFailureFromString (Localize ("E"$LN$"Mechanism"$j, "Mechanism", "GeoSimulator") ); LevelDetailsList[LN].LevelFailureList[0].MaxCount = int(Localize ("E"$LN$"Mechanism"$j, "MaxCount", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].VerySerious = int(Localize ("E"$LN$"Mechanism"$j, "VerySerious", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].Serious = int(Localize ("E"$LN$"Mechanism"$j, "Serious", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].NotSerious = int(Localize ("E"$LN$"Mechanism"$j, "NotSerious", "GeoSimulator")); /// Try to make an array of failurenames, to make sure we always have the same levels: for (k = 0; k < LevelDetailsList[LN].LevelFailureList[0].MaxCount ; k++ ) { //temp = Localize ("E"$LN$"Mechanism"$j, "FailureName"$k, "GeoSimulator"); /// We have a string, add it to the failure list: if (Len(temp) > 0) { //LevelDetailsList[LN].LevelFailureList[0].FailureNames.Insert(0,1); //LevelDetailsList[LN].LevelFailureList[0].FailureNames[0] = GetName(temp); } else { break; } } } //} /* LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = GetFailureFromString (Localize ("E0Mechanism1", "Mechanism", "GeoSimulator") ); LevelDetailsList[LN].LevelFailureList[0].MaxCount = int(Localize ("E0Mechanism1", "MaxCount", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].VerySerious = int(Localize ("E0Mechanism1", "VerySerious", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].Serious = int(Localize ("E0Mechanism1", "Serious", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList[0].NotSerious = int(Localize ("E0Mechanism1", "NotSerious", "GeoSimulator")); LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_ErosionOuterRipRap; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 2; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 0; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 2; //Reportable LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Piping; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 0; LevelDetailsList[LN].LevelFailureList[0].Serious = 1; // Relevant LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; */ // ******************* // LEVEL 1 // ******************* /* LN=1; LevelDetailsList[LN].MapString="Scenario2DG"; LevelDetailsList[LN].MapNumber=2; // ADDED - 2007-06-19 - gui LevelDetailsList[LN].bRain=true; LevelDetailsList[LN].bMakeDiag=false; LevelDetailsList[LN].bTakeMeas=false; LevelDetailsList[LN].Screenshot=Material'GeoDelft.MapPreview.Level2screenshot'; LevelDetailsList[LN].EN_ShortDescription=""; LevelDetailsList[LN].NL_ShortDescription=""; LevelDetailsList[LN].LevelFailureList.Remove(0, LevelDetailsList[LN].LevelFailureList.Length); LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Micro; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 2; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; // Critical LevelDetailsList[LN].LevelFailureList[0].Serious = 1; // Relevant LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Macro; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 0; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 1; // Reportable // ******************* // LEVEL 2 // ******************* LN=2; LevelDetailsList[LN].MapString="Scenario4DG"; LevelDetailsList[LN].MapNumber=4; // ADDED - 2007-06-19 - gui LevelDetailsList[LN].bRain=true; LevelDetailsList[LN].bMakeDiag=true; LevelDetailsList[LN].bTakeMeas=false; LevelDetailsList[LN].Screenshot=Material'GeoDelft.MapPreview.Level4screenshot'; LevelDetailsList[LN].EN_ShortDescription=""; LevelDetailsList[LN].NL_ShortDescription="Je Krijgt nu extra verantwoordelijkheden"; LevelDetailsList[LN].LevelFailureList.Remove(0, LevelDetailsList[LN].LevelFailureList.Length); LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Macro; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; // Critical LevelDetailsList[LN].LevelFailureList[0].Serious = 0; // Relevant LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Piping; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; // Reportable LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_ErosionOuterRipRap; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 0; LevelDetailsList[LN].LevelFailureList[0].Serious = 1; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; // Reportable LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_ErosionInner; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 0; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 1; // Reportable // ***************************** // LEVEL 3 // ***************************** LN=3; LevelDetailsList[LN].MapString="Scenario1DG"; LevelDetailsList[LN].MapNumber=1; // ADDED - 2007-06-19 - gui LevelDetailsList[LN].bRain=true; LevelDetailsList[LN].bMakeDiag=true; LevelDetailsList[LN].bTakeMeas=true; LevelDetailsList[LN].Screenshot=Material'GeoDelft.MapPreview.Level1screenshot'; LevelDetailsList[LN].EN_ShortDescription=""; LevelDetailsList[LN].NL_ShortDescription="Je Krijgt nu extra verantwoordelijkheden"; LevelDetailsList[LN].LevelFailureList.Remove(0, LevelDetailsList[LN].LevelFailureList.Length); LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Macro; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; // Critical LevelDetailsList[LN].LevelFailureList[0].Serious = 0; // Relevant LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_Piping; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; // Reportable LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_ErosionOuterRipRap; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 0; // Reportable LevelDetailsList[LN].LevelFailureList.Insert(0,1); LevelDetailsList[LN].LevelFailureList[0].Mechanism = FM_ErosionInner; LevelDetailsList[LN].LevelFailureList[0].MaxCount = 1; LevelDetailsList[LN].LevelFailureList[0].VerySerious = 1; LevelDetailsList[LN].LevelFailureList[0].Serious = 0; LevelDetailsList[LN].LevelFailureList[0].NotSerious = 1; // Reportable */ SaveConfig(); } //============================================================================= // Date Id Modification // 2006-09-29 gui Created this header // 2007-06-19 gui Bugs for maps corrected // 2007-10-16 Jln Modified to use new failure system. //============================================================================= function SetDetails() { local GeoLevelDetails GLD; local LevelDetails CurrentLevelDetails; local int i; // local array TempFailureNames; // GET LEVELS INFO LevelValues(); // Current Level Set CurrentLevelDetails = LevelDetailsList[CurrentLevel]; // Reset Current GeoLevelDetails GLD = new class'GeoLevelDetails'; GLD.ResetLevelDetails(); // Set Basic GLD.CurrentLevelScenarioNumber = CurrentLevelDetails.MapNumber; // ADDED - 2007-06-19 - gui GLD.IsRaining = CurrentLevelDetails.bRain; GLD.TakeMeasures = CurrentLevelDetails.bTakeMeas; GLD.MakeDiagnoses = CurrentLevelDetails.bMakeDiag; GLD.IsCompleteExercise = true; /* Store configured data now */ /// Store array in GLD variable which will be stored to a file. /// Somehow we are getting a type mismatch when setting the variable directly...? /// I might be overlooking something there, but this works flawless as well. for (i = 0; i < CurrentLevelDetails.LevelFailureList.length ; i++ ) { GLD.LeveeTilesToActivate.Insert(0,1); GLD.LeveeTilesToActivate[0].Mechanism = CurrentLevelDetails.LevelFailureList[i].Mechanism; GLD.LeveeTilesToActivate[0].FailureNames = CurrentLevelDetails.LevelFailureList[i].FailureNames; GLD.LeveeTilesToActivate[0].VerySerious = CurrentLevelDetails.LevelFailureList[i].VerySerious; GLD.LeveeTilesToActivate[0].Serious = CurrentLevelDetails.LevelFailureList[i].Serious; GLD.LeveeTilesToActivate[0].NotSerious = CurrentLevelDetails.LevelFailureList[i].NotSerious; GLD.LeveeTilesToActivate[0].Mechanism = CurrentLevelDetails.LevelFailureList[i].Mechanism; GLD.LeveeTilesToActivate[0].MaxCount = CurrentLevelDetails.LevelFailureList[i].MaxCount; } log("[CompleteExcercise] FailuresToActivate count:" @ GLD.LeveeTilesToActivate.Length); log("[CompleteExcercise] " @ GLD.LeveeTilesToActivate[0].VerySerious @ " / " @ GLD.LeveeTilesToActivate[0].Serious @ " / " @ GLD.LeveeTilesToActivate[0].NotSerious); /// Store new configuration: GLD.SaveConfig(); } //************************************************************************ // Join Two List of Name // // // 2007-10-16 Jln Function now rendered obsolete. //************************************************************************ /* function array JoinNameLists(array List1, array List2) { local array TempList; TempList=List1; while(List2.Length != 0) { TempList[TempList.Length]=List2[0]; List2.Remove(0,1); } return TempList; } */ //============================================================================= // Date Id Modification // 2006-09-29 gui Function to get number of names out of a list // 2007-10-16 Jln Function now rendered obsolete. //============================================================================= /* function array SelectNames(array ListNames, int Number) { local array TempList; local int TempRand, i; local name TempName; for(i=0; i