public clsResult Load_FME(string Path) { clsResult ReturnResult = new clsResult("Loading FME from " + Convert.ToString(ControlChars.Quote) + Path + Convert.ToString(ControlChars.Quote)); BinaryReader File = default(BinaryReader); try { File = new BinaryReader(new FileStream(Path, FileMode.Open)); } catch ( Exception ex ) { ReturnResult.ProblemAdd(ex.Message); return ReturnResult; } ReturnResult.Take(Read_FME(File)); File.Close(); return ReturnResult; }
public void btnGenerateObjects_Click(Object sender, EventArgs e) { if ( Generator.Map == null || Generator.GenerateTileset == null ) { return; } if ( !Generator.Map.frmMainLink.IsConnected ) { return; } Generator.BaseOilCount = ValidateTextbox(txtBaseOil, 0.0D, 16.0D, 1.0D); Generator.ExtraOilCount = ValidateTextbox(txtOilElsewhere, 0.0D, 9999.0D, 1.0D); Generator.ExtraOilClusterSizeMax = ValidateTextbox(txtOilClusterMax, 0.0D, 99.0D, 1.0D); Generator.ExtraOilClusterSizeMin = ValidateTextbox(txtOilClusterMin, 0.0D, Generator.ExtraOilClusterSizeMax, 1.0D); Generator.OilDispersion = ValidateTextbox(txtOilDispersion, 0.0D, 9999.0D, 1.0D) / 100.0F; Generator.OilAtATime = ValidateTextbox(txtOilAtATime, 1.0D, 2.0D, 1.0D); Generator.FeatureClusterChance = ValidateTextbox(txtFClusterChance, 0.0D, 100.0D, 1.0D) / 100.0F; Generator.FeatureClusterMaxUnits = ValidateTextbox(txtFClusterMax, 0.0D, 99.0D, 1.0D); Generator.FeatureClusterMinUnits = ValidateTextbox(txtFClusterMin, 0.0D, Generator.FeatureClusterMaxUnits, 1.0D); Generator.FeatureScatterCount = ValidateTextbox(txtFScatterChance, 0.0D, 99999.0D, 1.0D); Generator.FeatureScatterGap = ValidateTextbox(txtFScatterGap, 0.0D, 99999.0D, 1.0D); Generator.BaseTruckCount = ValidateTextbox(txtTrucks, 0.0D, 15.0D, 1.0D); Generator.GenerateTilePathMap(); Generator.TerrainBlockPaths(); Generator.BlockEdgeTiles(); Generator.GenerateGateways(); lstResult_AddText("Generating objects."); clsResult Result = new clsResult(""); Result.Take(Generator.GenerateOil()); Result.Take(Generator.GenerateUnits()); lstResult_AddResult(Result); if ( Result.HasProblems ) { lstResult_AddText("Failed."); } else { lstResult_AddText("Done."); } Generator.Map.SectorGraphicsChanges.SetAllChanged(); Generator.Map.Update(); Generator.Map.UndoStepCreate("Generator objects"); }
private clsResult FinishHeights() { clsResult ReturnResult = new clsResult(""); ReturnResult.Take(Generator.GenerateLayoutTerrain()); if ( ReturnResult.HasProblems ) { return ReturnResult; } Generator.Map.RandomizeHeights(Generator.LevelCount); Generator.Map.InterfaceOptions = new clsMap.clsInterfaceOptions(); Generator.Map.InterfaceOptions.CompileMultiPlayers = IOUtil.InvariantToString(Generator.GetTotalPlayerCount); _Owner.NewMainMap(Generator.Map); return ReturnResult; }
public clsResult Load_FMap(string Path) { clsResult ReturnResult = new clsResult("Loading FMap from " + Convert.ToString(ControlChars.Quote) + Path + Convert.ToString(ControlChars.Quote)); ZipStreamEntry ZipSearchResult = default(ZipStreamEntry); string FindPath = ""; FMapInfo ResultInfo = null; FindPath = "info.ini"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.ProblemAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); return ReturnResult; } else { StreamReader Info_StreamReader = new StreamReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_Info(Info_StreamReader, ref ResultInfo)); Info_StreamReader.Close(); if ( ReturnResult.HasProblems ) { return ReturnResult; } } sXY_int NewTerrainSize = ResultInfo.TerrainSize; Tileset = ResultInfo.Tileset; if ( NewTerrainSize.X <= 0 | NewTerrainSize.X > Constants.MapMaxSize ) { ReturnResult.ProblemAdd("Map width of " + Convert.ToString(NewTerrainSize.X) + " is not valid."); } if ( NewTerrainSize.Y <= 0 | NewTerrainSize.Y > Constants.MapMaxSize ) { ReturnResult.ProblemAdd("Map height of " + Convert.ToString(NewTerrainSize.Y) + " is not valid."); } if ( ReturnResult.HasProblems ) { return ReturnResult; } SetPainterToDefaults(); //depends on tileset. must be called before loading the terrains. TerrainBlank(NewTerrainSize); TileType_Reset(); FindPath = "vertexheight.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader VertexHeight_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_VertexHeight(VertexHeight_Reader)); VertexHeight_Reader.Close(); } FindPath = "vertexterrain.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader VertexTerrain_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_VertexTerrain(VertexTerrain_Reader)); VertexTerrain_Reader.Close(); } FindPath = "tiletexture.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader TileTexture_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_TileTexture(TileTexture_Reader)); TileTexture_Reader.Close(); } FindPath = "tileorientation.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader TileOrientation_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_TileOrientation(TileOrientation_Reader)); TileOrientation_Reader.Close(); } FindPath = "tilecliff.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader TileCliff_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_TileCliff(TileCliff_Reader)); TileCliff_Reader.Close(); } FindPath = "roads.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader Roads_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_Roads(Roads_Reader)); Roads_Reader.Close(); } FindPath = "objects.ini"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { StreamReader Objects_Reader = new StreamReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_Objects(Objects_Reader)); Objects_Reader.Close(); } FindPath = "gateways.ini"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { StreamReader Gateway_Reader = new StreamReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_Gateways(Gateway_Reader)); Gateway_Reader.Close(); } FindPath = "tiletypes.dat"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { ReturnResult.WarningAdd("Unable to find file " + Convert.ToString(ControlChars.Quote) + FindPath + Convert.ToString(ControlChars.Quote) + "."); } else { BinaryReader TileTypes_Reader = new BinaryReader(ZipSearchResult.Stream); ReturnResult.Add(Read_FMap_TileTypes(TileTypes_Reader)); TileTypes_Reader.Close(); } FindPath = "scriptlabels.ini"; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, FindPath); if ( ZipSearchResult == null ) { } else { clsResult Result = new clsResult("Reading labels"); IniReader LabelsINI = new IniReader(); StreamReader LabelsINI_Reader = new StreamReader(ZipSearchResult.Stream); Result.Take(LabelsINI.ReadFile(LabelsINI_Reader)); LabelsINI_Reader.Close(); Result.Take(Read_WZ_Labels(LabelsINI, true)); ReturnResult.Add(Result); } InterfaceOptions = ResultInfo.InterfaceOptions; return ReturnResult; }
public clsResult Read_FMap_Gateways(StreamReader File) { clsResult ReturnResult = new clsResult("Reading gateways"); IniReader GatewaysINI = new IniReader(); ReturnResult.Take(GatewaysINI.ReadFile(File)); FMapIniGateways INIGateways = new FMapIniGateways(GatewaysINI.Sections.Count); ReturnResult.Take(GatewaysINI.Translate(INIGateways)); int A = 0; int InvalidGatewayCount = 0; for ( A = 0; A <= INIGateways.GatewayCount - 1; A++ ) { if ( GatewayCreate(INIGateways.Gateways[A].PosA, INIGateways.Gateways[A].PosB) == null ) { InvalidGatewayCount++; } } if ( InvalidGatewayCount > 0 ) { ReturnResult.WarningAdd(InvalidGatewayCount + " gateways were invalid."); } return ReturnResult; }
private clsResult Read_FMap_Info(StreamReader File, ref FMapInfo ResultInfo) { clsResult ReturnResult = new clsResult("Read general map info"); Section InfoINI = new Section(); ReturnResult.Take(InfoINI.ReadFile(File)); ResultInfo = new FMapInfo(); ReturnResult.Take(InfoINI.Translate(ResultInfo)); if ( ResultInfo.TerrainSize.X < 0 | ResultInfo.TerrainSize.Y < 0 ) { ReturnResult.ProblemAdd("Map size was not specified or was invalid."); } return ReturnResult; }
private clsResult Read_FMap_Objects(StreamReader File) { clsResult ReturnResult = new clsResult("Reading objects"); int A = 0; IniReader ObjectsINI = new IniReader(); ReturnResult.Take(ObjectsINI.ReadFile(File)); FMapIniObjects INIObjects = new FMapIniObjects(ObjectsINI.Sections.Count); ReturnResult.Take(ObjectsINI.Translate(INIObjects)); int DroidComponentUnknownCount = 0; int ObjectTypeMissingCount = 0; int ObjectPlayerNumInvalidCount = 0; int ObjectPosInvalidCount = 0; int DesignTypeUnspecifiedCount = 0; int UnknownUnitTypeCount = 0; int MaxUnknownUnitTypeWarningCount = 16; clsDroidDesign DroidDesign = default(clsDroidDesign); clsUnit NewObject = default(clsUnit); clsUnitAdd UnitAdd = new clsUnitAdd(); clsUnitType UnitType = default(clsUnitType); bool IsDesign = default(bool); clsUnitGroup UnitGroup = default(clsUnitGroup); sXY_int ZeroPos = new sXY_int(0, 0); UInt32 AvailableID = 0; UnitAdd.Map = this; AvailableID = 1U; for ( A = 0; A <= INIObjects.ObjectCount - 1; A++ ) { if ( INIObjects.Objects[A].ID >= AvailableID ) { AvailableID = INIObjects.Objects[A].ID + 1U; } } for ( A = 0; A <= INIObjects.ObjectCount - 1; A++ ) { if ( INIObjects.Objects[A].Pos == null ) { ObjectPosInvalidCount++; } else if ( !App.PosIsWithinTileArea(INIObjects.Objects[A].Pos.XY, ZeroPos, Terrain.TileSize) ) { ObjectPosInvalidCount++; } else { UnitType = null; if ( INIObjects.Objects[A].Type != clsUnitType.enumType.Unspecified ) { IsDesign = false; if ( INIObjects.Objects[A].Type == clsUnitType.enumType.PlayerDroid ) { if ( !INIObjects.Objects[A].IsTemplate ) { IsDesign = true; } } if ( IsDesign ) { DroidDesign = new clsDroidDesign(); DroidDesign.TemplateDroidType = INIObjects.Objects[A].TemplateDroidType; if ( DroidDesign.TemplateDroidType == null ) { DroidDesign.TemplateDroidType = App.TemplateDroidType_Droid; DesignTypeUnspecifiedCount++; } if ( INIObjects.Objects[A].BodyCode != "" ) { DroidDesign.Body = App.ObjectData.FindOrCreateBody(Convert.ToString(INIObjects.Objects[A].BodyCode)); if ( DroidDesign.Body.IsUnknown ) { DroidComponentUnknownCount++; } } if ( INIObjects.Objects[A].PropulsionCode != "" ) { DroidDesign.Propulsion = App.ObjectData.FindOrCreatePropulsion(INIObjects.Objects[A].PropulsionCode); if ( DroidDesign.Propulsion.IsUnknown ) { DroidComponentUnknownCount++; } } DroidDesign.TurretCount = (byte)(INIObjects.Objects[A].TurretCount); if ( INIObjects.Objects[A].TurretCodes[0] != "" ) { DroidDesign.Turret1 = App.ObjectData.FindOrCreateTurret(INIObjects.Objects[A].TurretTypes[0], Convert.ToString(INIObjects.Objects[A].TurretCodes[0])); if ( DroidDesign.Turret1.IsUnknown ) { DroidComponentUnknownCount++; } } if ( INIObjects.Objects[A].TurretCodes[1] != "" ) { DroidDesign.Turret2 = App.ObjectData.FindOrCreateTurret(INIObjects.Objects[A].TurretTypes[1], Convert.ToString(INIObjects.Objects[A].TurretCodes[1])); if ( DroidDesign.Turret2.IsUnknown ) { DroidComponentUnknownCount++; } } if ( INIObjects.Objects[A].TurretCodes[2] != "" ) { DroidDesign.Turret3 = App.ObjectData.FindOrCreateTurret(INIObjects.Objects[A].TurretTypes[2], Convert.ToString(INIObjects.Objects[A].TurretCodes[2])); if ( DroidDesign.Turret3.IsUnknown ) { DroidComponentUnknownCount++; } } DroidDesign.UpdateAttachments(); UnitType = DroidDesign; } else { UnitType = App.ObjectData.FindOrCreateUnitType(INIObjects.Objects[A].Code, INIObjects.Objects[A].Type, INIObjects.Objects[A].WallType); if ( UnitType.IsUnknown ) { if ( UnknownUnitTypeCount < MaxUnknownUnitTypeWarningCount ) { ReturnResult.WarningAdd(ControlChars.Quote + INIObjects.Objects[A].Code + Convert.ToString(ControlChars.Quote) + " is not a loaded object."); } UnknownUnitTypeCount++; } } } if ( UnitType == null ) { ObjectTypeMissingCount++; } else { NewObject = new clsUnit(); NewObject.Type = UnitType; NewObject.Pos.Horizontal.X = INIObjects.Objects[A].Pos.X; NewObject.Pos.Horizontal.Y = INIObjects.Objects[A].Pos.Y; NewObject.Health = INIObjects.Objects[A].Health; NewObject.SavePriority = INIObjects.Objects[A].Priority; NewObject.Rotation = (int)(INIObjects.Objects[A].Heading); if ( NewObject.Rotation >= 360 ) { NewObject.Rotation -= 360; } if ( INIObjects.Objects[A].UnitGroup == null || INIObjects.Objects[A].UnitGroup == "" ) { if ( INIObjects.Objects[A].Type != clsUnitType.enumType.Feature ) { ObjectPlayerNumInvalidCount++; } NewObject.UnitGroup = ScavengerUnitGroup; } else { if ( INIObjects.Objects[A].UnitGroup.ToLower() == "scavenger" ) { NewObject.UnitGroup = ScavengerUnitGroup; } else { UInt32 PlayerNum = 0; try { if ( !IOUtil.InvariantParse(INIObjects.Objects[A].UnitGroup, PlayerNum) ) { throw (new Exception()); } if ( PlayerNum < Constants.PlayerCountMax ) { UnitGroup = UnitGroups[Convert.ToInt32(PlayerNum)]; } else { UnitGroup = ScavengerUnitGroup; ObjectPlayerNumInvalidCount++; } } catch ( Exception ) { ObjectPlayerNumInvalidCount++; UnitGroup = ScavengerUnitGroup; } NewObject.UnitGroup = UnitGroup; } } if ( INIObjects.Objects[A].ID == 0U ) { INIObjects.Objects[A].ID = AvailableID; App.ZeroIDWarning(NewObject, INIObjects.Objects[A].ID, ReturnResult); } UnitAdd.NewUnit = NewObject; UnitAdd.ID = INIObjects.Objects[A].ID; UnitAdd.Label = INIObjects.Objects[A].Label; UnitAdd.Perform(); App.ErrorIDChange(INIObjects.Objects[A].ID, NewObject, "Read_FMap_Objects"); if ( AvailableID == INIObjects.Objects[A].ID ) { AvailableID = NewObject.ID + 1U; } } } } if ( UnknownUnitTypeCount > MaxUnknownUnitTypeWarningCount ) { ReturnResult.WarningAdd(UnknownUnitTypeCount + " objects were not in the loaded object data."); } if ( ObjectTypeMissingCount > 0 ) { ReturnResult.WarningAdd(ObjectTypeMissingCount + " objects did not specify a type and were ignored."); } if ( DroidComponentUnknownCount > 0 ) { ReturnResult.WarningAdd(DroidComponentUnknownCount + " components used by droids were loaded as unknowns."); } if ( ObjectPlayerNumInvalidCount > 0 ) { ReturnResult.WarningAdd(ObjectPlayerNumInvalidCount + " objects had an invalid player number and were set to player 0."); } if ( ObjectPosInvalidCount > 0 ) { ReturnResult.WarningAdd(ObjectPosInvalidCount + " objects had a position that was off-map and were ignored."); } if ( DesignTypeUnspecifiedCount > 0 ) { ReturnResult.WarningAdd(DesignTypeUnspecifiedCount + " designed droids did not specify a template droid type and were set to droid."); } return ReturnResult; }
public clsResult Load_WZ(string Path) { clsResult ReturnResult = new clsResult("Loading WZ from " + Convert.ToString(ControlChars.Quote) + Path + Convert.ToString(ControlChars.Quote)); App.sResult SubResult = new App.sResult(); string Quote = ControlChars.Quote.ToString(); ZipEntry ZipEntry = default(ZipEntry); bool GameFound = default(bool); bool DatasetFound = default(bool); SimpleList<clsWZMapEntry> Maps = new SimpleList<clsWZMapEntry>(); clsTileset GameTileset = null; string GameName = ""; string strTemp = ""; ZipSplitPath SplitPath; int A = 0; int B = 0; int C = 0; int D = 0; FileStream File = default(FileStream); try { File = System.IO.File.OpenRead(Path); } catch ( Exception ex ) { ReturnResult.ProblemAdd(ex.Message); return ReturnResult; } ZipInputStream ZipStream = new ZipInputStream(File); //get all usable lev entries do { ZipEntry = ZipStream.GetNextEntry(); if ( ZipEntry == null ) { break; } SplitPath = new ZipSplitPath(ZipEntry.Name); if ( SplitPath.FileExtension == "lev" && SplitPath.PartCount == 1 ) { if ( ZipEntry.Size > 10 * 1024 * 1024 ) { ReturnResult.ProblemAdd("lev file is too large."); ZipStream.Close(); return ReturnResult; } BinaryReader Reader = new BinaryReader(ZipStream); SimpleList<string> LineData = IOUtil.BytesToLinesRemoveComments(Reader); //find each level block for ( A = 0; A <= LineData.Count - 1; A++ ) { if ( Strings.LCase(Strings.Left(LineData[A], 5)) == "level" ) { //find each levels game file GameFound = false; B = 1; while ( A + B < LineData.Count ) { if ( Strings.LCase(Strings.Left(Convert.ToString(LineData[A + B]), 4)) == "game" ) { C = Strings.InStr(Convert.ToString(LineData[A + B]), Quote, (CompareMethod)0); D = Strings.InStrRev(Convert.ToString(LineData[A + B]), Quote, -1, (CompareMethod)0); if ( C > 0 & D > 0 & D - C > 1 ) { GameName = Strings.LCase(Strings.Mid(Convert.ToString(LineData[A + B]), C + 1, D - C - 1)); //see if map is already counted for ( C = 0; C <= Maps.Count - 1; C++ ) { if ( GameName == Maps[C].Name ) { break; } } if ( C == Maps.Count ) { GameFound = true; } } break; } else if ( Strings.LCase(Strings.Left(Convert.ToString(LineData[A + B]), 5)) == "level" ) { break; } B++; } if ( GameFound ) { //find the dataset (determines tileset) DatasetFound = false; B = 1; while ( A + B < LineData.Count ) { if ( Strings.LCase(Strings.Left(Convert.ToString(LineData[A + B]), 7)) == "dataset" ) { strTemp = Strings.LCase(Strings.Right(Convert.ToString(LineData[A + B]), 1)); if ( strTemp == "1" ) { GameTileset = App.Tileset_Arizona; DatasetFound = true; } else if ( strTemp == "2" ) { GameTileset = App.Tileset_Urban; DatasetFound = true; } else if ( strTemp == "3" ) { GameTileset = App.Tileset_Rockies; DatasetFound = true; } break; } else if ( Strings.LCase(Strings.Left(Convert.ToString(LineData[A + B]), 5)) == "level" ) { break; } B++; } if ( DatasetFound ) { clsWZMapEntry NewMap = new clsWZMapEntry(); NewMap.Name = GameName; NewMap.Tileset = GameTileset; Maps.Add(NewMap); } } } } } } while ( true ); ZipStream.Close(); string MapLoadName = ""; //prompt user for which of the entries to load if ( Maps.Count < 1 ) { ReturnResult.ProblemAdd("No maps found in file."); return ReturnResult; } else if ( Maps.Count == 1 ) { MapLoadName = Convert.ToString(Maps[0].Name); Tileset = Maps[0].Tileset; } else { frmWZLoad.clsOutput SelectToLoadResult = new frmWZLoad.clsOutput(); string[] Names = new string[Maps.Count]; for ( A = 0; A <= Maps.Count - 1; A++ ) { Names[A] = Convert.ToString(Maps[A].Name); } frmWZLoad SelectToLoadForm = new frmWZLoad(Names, SelectToLoadResult, "Select a map from " + Convert.ToString(new App.sSplitPath(Path).FileTitle)); SelectToLoadForm.ShowDialog(); if ( SelectToLoadResult.Result < 0 ) { ReturnResult.ProblemAdd("No map selected."); return ReturnResult; } MapLoadName = Convert.ToString(Maps[SelectToLoadResult.Result].Name); Tileset = Maps[SelectToLoadResult.Result].Tileset; } TileType_Reset(); SetPainterToDefaults(); ZipSplitPath GameSplitPath = new ZipSplitPath(MapLoadName); string GameFilesPath = GameSplitPath.FilePath + GameSplitPath.FileTitleWithoutExtension + "/"; ZipStreamEntry ZipSearchResult = default(ZipStreamEntry); ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, MapLoadName); if ( ZipSearchResult == null ) { ReturnResult.ProblemAdd("Game file not found."); return ReturnResult; } else { BinaryReader Map_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_gam(Map_Reader); Map_Reader.Close(); if ( !SubResult.Success ) { ReturnResult.ProblemAdd(SubResult.Problem); return ReturnResult; } } ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "game.map"); if ( ZipSearchResult == null ) { ReturnResult.ProblemAdd("game.map file not found"); return ReturnResult; } else { BinaryReader Map_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_map(Map_Reader); Map_Reader.Close(); if ( !SubResult.Success ) { ReturnResult.ProblemAdd(SubResult.Problem); return ReturnResult; } } SimpleClassList<clsWZBJOUnit> BJOUnits = new SimpleClassList<clsWZBJOUnit>(); IniFeatures INIFeatures = null; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "feature.ini"); if ( ZipSearchResult == null ) { } else { clsResult Result = new clsResult("feature.ini"); IniReader FeaturesINI = new IniReader(); StreamReader FeaturesINI_Reader = new StreamReader(ZipSearchResult.Stream); Result.Take(FeaturesINI.ReadFile(FeaturesINI_Reader)); FeaturesINI_Reader.Close(); INIFeatures = new IniFeatures(FeaturesINI.Sections.Count); Result.Take(FeaturesINI.Translate(INIFeatures)); ReturnResult.Add(Result); } if ( INIFeatures == null ) { clsResult Result = new clsResult("feat.bjo"); ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "feat.bjo"); if ( ZipSearchResult == null ) { Result.WarningAdd("file not found"); } else { BinaryReader Features_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_Features(Features_Reader, BJOUnits); Features_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } if ( true ) { clsResult Result = new clsResult("ttypes.ttp"); ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "ttypes.ttp"); if ( ZipSearchResult == null ) { Result.WarningAdd("file not found"); } else { BinaryReader TileTypes_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_TileTypes(TileTypes_Reader); TileTypes_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } IniStructures INIStructures = null; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "struct.ini"); if ( ZipSearchResult == null ) { } else { clsResult Result = new clsResult("struct.ini"); IniReader StructuresINI = new IniReader(); StreamReader StructuresINI_Reader = new StreamReader(ZipSearchResult.Stream); Result.Take(StructuresINI.ReadFile(StructuresINI_Reader)); StructuresINI_Reader.Close(); INIStructures = new IniStructures(StructuresINI.Sections.Count, this); Result.Take(StructuresINI.Translate(INIStructures)); ReturnResult.Add(Result); } if ( INIStructures == null ) { clsResult Result = new clsResult("struct.bjo"); ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "struct.bjo"); if ( ZipSearchResult == null ) { Result.WarningAdd("file not found"); } else { BinaryReader Structures_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_Structures(Structures_Reader, BJOUnits); Structures_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } IniDroids INIDroids = null; ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "droid.ini"); if ( ZipSearchResult == null ) { } else { clsResult Result = new clsResult("droid.ini"); IniReader DroidsINI = new IniReader(); StreamReader DroidsINI_Reader = new StreamReader(ZipSearchResult.Stream); Result.Take(DroidsINI.ReadFile(DroidsINI_Reader)); DroidsINI_Reader.Close(); INIDroids = new IniDroids(DroidsINI.Sections.Count, this); Result.Take(DroidsINI.Translate(INIDroids)); ReturnResult.Add(Result); } if ( INIDroids == null ) { clsResult Result = new clsResult("dinit.bjo"); ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "dinit.bjo"); if ( ZipSearchResult == null ) { Result.WarningAdd("file not found"); } else { BinaryReader Droids_Reader = new BinaryReader(ZipSearchResult.Stream); SubResult = Read_WZ_Droids(Droids_Reader, BJOUnits); Droids_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } sCreateWZObjectsArgs CreateObjectsArgs = new sCreateWZObjectsArgs(); CreateObjectsArgs.BJOUnits = BJOUnits; CreateObjectsArgs.INIStructures = INIStructures; CreateObjectsArgs.INIDroids = INIDroids; CreateObjectsArgs.INIFeatures = INIFeatures; ReturnResult.Add(CreateWZObjects(CreateObjectsArgs)); //objects are modified by this and must already exist ZipSearchResult = IOUtil.FindZipEntryFromPath(Path, GameFilesPath + "labels.ini"); if ( ZipSearchResult == null ) { } else { clsResult Result = new clsResult("labels.ini"); IniReader LabelsINI = new IniReader(); StreamReader LabelsINI_Reader = new StreamReader(ZipSearchResult.Stream); Result.Take(LabelsINI.ReadFile(LabelsINI_Reader)); LabelsINI_Reader.Close(); Result.Take(Read_WZ_Labels(LabelsINI, false)); ReturnResult.Add(Result); } return ReturnResult; }
public clsResult Load_Game(string Path) { clsResult ReturnResult = new clsResult("Loading game file from " + Convert.ToString(ControlChars.Quote) + Path + Convert.ToString(ControlChars.Quote)); App.sResult SubResult = new App.sResult(); string Quote = ControlChars.Quote.ToString(); Tileset = null; TileType_Reset(); SetPainterToDefaults(); App.sSplitPath GameSplitPath = new App.sSplitPath(Path); string GameFilesPath = GameSplitPath.FilePath + GameSplitPath.FileTitleWithoutExtension + Convert.ToString(App.PlatformPathSeparator); string MapDirectory = ""; FileStream File = null; SubResult = IOUtil.TryOpenFileStream(Path, ref File); if ( !SubResult.Success ) { ReturnResult.ProblemAdd("Game file not found: " + SubResult.Problem); return ReturnResult; } else { BinaryReader Map_Reader = new BinaryReader(File); SubResult = Read_WZ_gam(Map_Reader); Map_Reader.Close(); if ( !SubResult.Success ) { ReturnResult.ProblemAdd(SubResult.Problem); return ReturnResult; } } SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "game.map", ref File); if ( !SubResult.Success ) { MsgBoxResult PromptResult = Interaction.MsgBox( "game.map file not found at " + GameFilesPath + ControlChars.NewLine + "Do you want to select another directory to load the underlying map from?", (MsgBoxStyle)(MsgBoxStyle.OkCancel | MsgBoxStyle.Question), null); if ( PromptResult != MsgBoxResult.Ok ) { ReturnResult.ProblemAdd("Aborted."); return ReturnResult; } FolderBrowserDialog DirectorySelect = new FolderBrowserDialog(); DirectorySelect.SelectedPath = GameFilesPath; if ( DirectorySelect.ShowDialog() != DialogResult.OK ) { ReturnResult.ProblemAdd("Aborted."); return ReturnResult; } MapDirectory = DirectorySelect.SelectedPath + Convert.ToString(App.PlatformPathSeparator); SubResult = IOUtil.TryOpenFileStream(MapDirectory + "game.map", ref File); if ( !SubResult.Success ) { ReturnResult.ProblemAdd("game.map file not found: " + SubResult.Problem); return ReturnResult; } } else { MapDirectory = GameFilesPath; } BinaryReader Map_ReaderB = new BinaryReader(File); SubResult = Read_WZ_map(Map_ReaderB); Map_ReaderB.Close(); if ( !SubResult.Success ) { ReturnResult.ProblemAdd(SubResult.Problem); return ReturnResult; } SimpleClassList<clsWZBJOUnit> BJOUnits = new SimpleClassList<clsWZBJOUnit>(); IniFeatures INIFeatures = null; SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "feature.ini", ref File); if ( !SubResult.Success ) { } else { clsResult Result = new clsResult("feature.ini"); IniReader FeaturesINI = new IniReader(); StreamReader FeaturesINI_Reader = new StreamReader(File); Result.Take(FeaturesINI.ReadFile(FeaturesINI_Reader)); FeaturesINI_Reader.Close(); INIFeatures = new IniFeatures(FeaturesINI.Sections.Count); Result.Take(FeaturesINI.Translate(INIFeatures)); ReturnResult.Add(Result); } if ( INIFeatures == null ) { clsResult Result = new clsResult("feat.bjo"); SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "feat.bjo", ref File); if ( !SubResult.Success ) { Result.WarningAdd("file not found"); } else { BinaryReader Features_Reader = new BinaryReader(File); SubResult = Read_WZ_Features(Features_Reader, BJOUnits); Features_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } if ( true ) { clsResult Result = new clsResult("ttypes.ttp"); SubResult = IOUtil.TryOpenFileStream(MapDirectory + "ttypes.ttp", ref File); if ( !SubResult.Success ) { Result.WarningAdd("file not found"); } else { BinaryReader TileTypes_Reader = new BinaryReader(File); SubResult = Read_WZ_TileTypes(TileTypes_Reader); TileTypes_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } IniStructures INIStructures = null; SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "struct.ini", ref File); if ( !SubResult.Success ) { } else { clsResult Result = new clsResult("struct.ini"); IniReader StructuresINI = new IniReader(); StreamReader StructuresINI_Reader = new StreamReader(File); Result.Take(StructuresINI.ReadFile(StructuresINI_Reader)); StructuresINI_Reader.Close(); INIStructures = new IniStructures(StructuresINI.Sections.Count, this); Result.Take(StructuresINI.Translate(INIStructures)); ReturnResult.Add(Result); } if ( INIStructures == null ) { clsResult Result = new clsResult("struct.bjo"); SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "struct.bjo", ref File); if ( !SubResult.Success ) { Result.WarningAdd("struct.bjo file not found."); } else { BinaryReader Structures_Reader = new BinaryReader(File); SubResult = Read_WZ_Structures(Structures_Reader, BJOUnits); Structures_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } IniDroids INIDroids = null; SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "droid.ini", ref File); if ( !SubResult.Success ) { } else { clsResult Result = new clsResult("droid.ini"); IniReader DroidsINI = new IniReader(); StreamReader DroidsINI_Reader = new StreamReader(File); Result.Take(DroidsINI.ReadFile(DroidsINI_Reader)); DroidsINI_Reader.Close(); INIDroids = new IniDroids(DroidsINI.Sections.Count, this); Result.Take(DroidsINI.Translate(INIDroids)); ReturnResult.Add(Result); } if ( INIStructures == null ) { clsResult Result = new clsResult("dinit.bjo"); SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "dinit.bjo", ref File); if ( !SubResult.Success ) { Result.WarningAdd("dinit.bjo file not found."); } else { BinaryReader Droids_Reader = new BinaryReader(File); SubResult = Read_WZ_Droids(Droids_Reader, BJOUnits); Droids_Reader.Close(); if ( !SubResult.Success ) { Result.WarningAdd(SubResult.Problem); } } ReturnResult.Add(Result); } sCreateWZObjectsArgs CreateObjectsArgs = new sCreateWZObjectsArgs(); CreateObjectsArgs.BJOUnits = BJOUnits; CreateObjectsArgs.INIStructures = INIStructures; CreateObjectsArgs.INIDroids = INIDroids; CreateObjectsArgs.INIFeatures = INIFeatures; ReturnResult.Add(CreateWZObjects(CreateObjectsArgs)); //map objects are modified by this and must already exist SubResult = IOUtil.TryOpenFileStream(GameFilesPath + "labels.ini", ref File); if ( !SubResult.Success ) { } else { clsResult Result = new clsResult("labels.ini"); IniReader LabelsINI = new IniReader(); StreamReader LabelsINI_Reader = new StreamReader(File); Result.Take(LabelsINI.ReadFile(LabelsINI_Reader)); LabelsINI_Reader.Close(); Result.Take(Read_WZ_Labels(LabelsINI, false)); ReturnResult.Add(Result); } return ReturnResult; }
// compress is ignored. public clsResult Save(string path, bool overwrite, bool compress = false) { var returnResult = new clsResult(string.Format("Writing .ttp to \"{0}\"", path), false); logger.Info(string.Format("Writing .ttp to \"{0}\"", path)); try { if (File.Exists(path)) { if (overwrite) { File.Delete(path); } else { returnResult.ProblemAdd("File already exists."); return returnResult; } } using (var file = new FileStream(path, FileMode.CreateNew)) { returnResult.Take(Save (file)); } } catch (Exception ex) { Debugger.Break (); returnResult.ProblemAdd (string.Format ("Failed to create .ttp, failure was: {0}", ex.Message)); logger.ErrorException ("Failed to create .ttp", ex); return returnResult; } return returnResult; }
public clsResult LoadDirectory(string Path) { var ReturnResult = new clsResult(string.Format("Loading object data from \"{0}\"", Path)); Path = PathUtil.EndWithPathSeperator(Path); var SubDirNames = ""; var SubDirStructures = ""; var SubDirBrain = ""; var SubDirBody = ""; var SubDirPropulsion = ""; var SubDirBodyPropulsion = ""; var SubDirConstruction = ""; var SubDirSensor = ""; var SubDirRepair = ""; var SubDirTemplates = ""; var SubDirWeapons = ""; var SubDirECM = ""; var SubDirFeatures = ""; var SubDirTexpages = ""; var SubDirAssignWeapons = ""; var SubDirStructureWeapons = ""; var SubDirPIEs = ""; SubDirNames = "messages" + Convert.ToString(App.PlatformPathSeparator) + "strings" + Convert.ToString(App.PlatformPathSeparator) + "names.txt"; SubDirStructures = "stats" + Convert.ToString(App.PlatformPathSeparator) + "structures.txt"; SubDirBrain = "stats" + Convert.ToString(App.PlatformPathSeparator) + "brain.txt"; SubDirBody = "stats" + Convert.ToString(App.PlatformPathSeparator) + "body.txt"; SubDirPropulsion = "stats" + Convert.ToString(App.PlatformPathSeparator) + "propulsion.txt"; SubDirBodyPropulsion = "stats" + Convert.ToString(App.PlatformPathSeparator) + "bodypropulsionimd.txt"; SubDirConstruction = "stats" + Convert.ToString(App.PlatformPathSeparator) + "construction.txt"; SubDirSensor = "stats" + Convert.ToString(App.PlatformPathSeparator) + "sensor.txt"; SubDirRepair = "stats" + Convert.ToString(App.PlatformPathSeparator) + "repair.txt"; SubDirTemplates = "stats" + Convert.ToString(App.PlatformPathSeparator) + "templates.txt"; SubDirWeapons = "stats" + Convert.ToString(App.PlatformPathSeparator) + "weapons.txt"; SubDirECM = "stats" + Convert.ToString(App.PlatformPathSeparator) + "ecm.txt"; SubDirFeatures = "stats" + Convert.ToString(App.PlatformPathSeparator) + "features.txt"; SubDirPIEs = "pies" + Convert.ToString(App.PlatformPathSeparator); //SubDirStructurePIE = "structs" & ospathseperator //SubDirBodiesPIE = "components" & ospathseperator & "bodies" & ospathseperator //SubDirPropPIE = "components" & ospathseperator & "prop" & ospathseperator //SubDirWeaponsPIE = "components" & ospathseperator & "weapons" & ospathseperator SubDirTexpages = "texpages" + Convert.ToString(App.PlatformPathSeparator); SubDirAssignWeapons = "stats" + Convert.ToString(App.PlatformPathSeparator) + "assignweapons.txt"; //SubDirFeaturePIE = "features" & ospathseperator SubDirStructureWeapons = "stats" + Convert.ToString(App.PlatformPathSeparator) + "structureweapons.txt"; var CommaFiles = new SimpleList<clsTextFile>(); var DataNames = new clsTextFile(); DataNames.SubDirectory = SubDirNames; DataNames.UniqueField = 0; ReturnResult.Add(DataNames.LoadNamesFile(Path)); if ( !DataNames.CalcUniqueField() ) { ReturnResult.ProblemAdd("There are two entries for the same code in " + SubDirNames + "."); } var DataStructures = new clsTextFile(); DataStructures.SubDirectory = SubDirStructures; DataStructures.FieldCount = 25; CommaFiles.Add(DataStructures); var DataBrain = new clsTextFile(); DataBrain.SubDirectory = SubDirBrain; DataBrain.FieldCount = 9; CommaFiles.Add(DataBrain); var DataBody = new clsTextFile(); DataBody.SubDirectory = SubDirBody; DataBody.FieldCount = 25; CommaFiles.Add(DataBody); var DataPropulsion = new clsTextFile(); DataPropulsion.SubDirectory = SubDirPropulsion; DataPropulsion.FieldCount = 12; CommaFiles.Add(DataPropulsion); var DataBodyPropulsion = new clsTextFile(); DataBodyPropulsion.SubDirectory = SubDirBodyPropulsion; DataBodyPropulsion.FieldCount = 5; DataBodyPropulsion.UniqueField = -1; //no unique requirement CommaFiles.Add(DataBodyPropulsion); var DataConstruction = new clsTextFile(); DataConstruction.SubDirectory = SubDirConstruction; DataConstruction.FieldCount = 12; CommaFiles.Add(DataConstruction); var DataSensor = new clsTextFile(); DataSensor.SubDirectory = SubDirSensor; DataSensor.FieldCount = 16; CommaFiles.Add(DataSensor); var DataRepair = new clsTextFile(); DataRepair.SubDirectory = SubDirRepair; DataRepair.FieldCount = 14; CommaFiles.Add(DataRepair); var DataTemplates = new clsTextFile(); DataTemplates.SubDirectory = SubDirTemplates; DataTemplates.FieldCount = 12; CommaFiles.Add(DataTemplates); var DataECM = new clsTextFile(); DataECM.SubDirectory = SubDirECM; DataECM.FieldCount = 14; CommaFiles.Add(DataECM); var DataFeatures = new clsTextFile(); DataFeatures.SubDirectory = SubDirFeatures; DataFeatures.FieldCount = 11; CommaFiles.Add(DataFeatures); var DataAssignWeapons = new clsTextFile(); DataAssignWeapons.SubDirectory = SubDirAssignWeapons; DataAssignWeapons.FieldCount = 5; CommaFiles.Add(DataAssignWeapons); var DataWeapons = new clsTextFile(); DataWeapons.SubDirectory = SubDirWeapons; DataWeapons.FieldCount = 53; CommaFiles.Add(DataWeapons); var DataStructureWeapons = new clsTextFile(); DataStructureWeapons.SubDirectory = SubDirStructureWeapons; DataStructureWeapons.FieldCount = 6; CommaFiles.Add(DataStructureWeapons); var TextFile = default(clsTextFile); foreach ( var tempLoopVar_TextFile in CommaFiles ) { TextFile = tempLoopVar_TextFile; var Result = TextFile.LoadCommaFile(Path); ReturnResult.Add(Result); if ( !Result.HasProblems ) { if ( TextFile.CalcIsFieldCountValid() ) { if ( !TextFile.CalcUniqueField() ) { ReturnResult.ProblemAdd("An entry in field " + Convert.ToString(TextFile.UniqueField) + " was not unique for file " + TextFile.SubDirectory + "."); } } else { ReturnResult.ProblemAdd("There were entries with the wrong number of fields for file " + TextFile.SubDirectory + "."); } } } if ( ReturnResult.HasProblems ) { return ReturnResult; } //load texpages string[] TexFiles = null; try { TexFiles = Directory.GetFiles(Path + SubDirTexpages); } catch ( Exception ) { ReturnResult.WarningAdd("Unable to access texture pages."); TexFiles = new string[0]; } var Text = ""; Bitmap Bitmap = null; var InstrPos2 = 0; var BitmapTextureArgs = new BitmapGLTexture(); var BitmapResult = new sResult(); foreach ( var tempLoopVar_Text in TexFiles ) { Text = tempLoopVar_Text; if ( Text.Substring(Text.Length - 4, 4).ToLower() == ".png" ) { var Result = new clsResult(string.Format("Loading texture page \"{0}\"", Text)); if ( File.Exists(Text) ) { BitmapResult = BitmapUtil.LoadBitmap(Text, ref Bitmap); var NewPage = new clsTexturePage(); if ( BitmapResult.Success ) { Result.Take(BitmapUtil.BitmapIsGLCompatible(Bitmap)); BitmapTextureArgs.MagFilter = TextureMagFilter.Nearest; BitmapTextureArgs.MinFilter = TextureMinFilter.Nearest; BitmapTextureArgs.TextureNum = 0; BitmapTextureArgs.MipMapLevel = 0; BitmapTextureArgs.Texture = Bitmap; BitmapTextureArgs.Perform(); NewPage.GLTexture_Num = BitmapTextureArgs.TextureNum; } else { Result.WarningAdd(BitmapResult.Problem); } InstrPos2 = Text.LastIndexOf(System.IO.Path.DirectorySeparatorChar); NewPage.FileTitle = Text.Substring(InstrPos2 + 1, Text.Length - 5 - InstrPos2); TexturePages.Add(NewPage); } else { Result.WarningAdd("Texture page missing (" + Text + ")."); } ReturnResult.Add(Result); } } //load PIEs string[] PIE_Files = null; var PIE_List = new SimpleList<clsPIE>(); var NewPIE = default(clsPIE); try { PIE_Files = Directory.GetFiles(Path + SubDirPIEs); } catch ( Exception ) { ReturnResult.WarningAdd("Unable to access PIE files."); PIE_Files = new string[0]; } var SplitPath = new sSplitPath(); foreach ( var tempLoopVar_Text in PIE_Files ) { Text = tempLoopVar_Text; SplitPath = new sSplitPath(Text); if ( SplitPath.FileExtension.ToLower() == "pie" ) { NewPIE = new clsPIE(); NewPIE.Path = Text; NewPIE.LCaseFileTitle = SplitPath.FileTitle.ToLower(); PIE_List.Add(NewPIE); } } //interpret stats var Attachment = default(clsAttachment); var BaseAttachment = default(clsAttachment); var Connector = new XYZDouble(); var structureTypeBase = default(StructureTypeBase); var featureTypeBase = default(FeatureTypeBase); var Template = default(DroidTemplate); var Body = default(Body); var Propulsion = default(Propulsion); var Construct = default(Construct); var Weapon = default(Weapon); var Repair = default(Repair); var Sensor = default(Sensor); var Brain = default(Brain); var ECM = default(Ecm); string[] Fields = null; //interpret body foreach ( var tempLoopVar_Fields in DataBody.ResultData ) { Fields = tempLoopVar_Fields; Body = new Body(); Body.ObjectDataLink.Connect(Bodies); Body.Code = Fields[0]; SetComponentName(DataNames.ResultData, Body, ReturnResult); IOUtil.InvariantParse(Fields[6], ref Body.Hitpoints); Body.Designable = Fields[24] != "0"; Body.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[7].ToLower(), ReturnResult)); } //interpret propulsion foreach ( var tempLoopVar_Fields in DataPropulsion.ResultData ) { Fields = tempLoopVar_Fields; Propulsion = new Propulsion(Bodies.Count); Propulsion.ObjectDataLink.Connect(Propulsions); Propulsion.Code = Fields[0]; SetComponentName(DataNames.ResultData, Propulsion, ReturnResult); IOUtil.InvariantParse(Fields[7], ref Propulsion.HitPoints); //.Propulsions(Propulsion_Num).PIE = LCase(DataPropulsion.Entries(Propulsion_Num).FieldValues(8)) Propulsion.Designable = Fields[11] != "0"; } //interpret body-propulsions var BodyPropulsionPIEs = new BodyProp[Bodies.Count, Propulsions.Count]; for ( var A = 0; A <= Bodies.Count - 1; A++ ) { for ( var B = 0; B <= Propulsions.Count - 1; B++ ) { BodyPropulsionPIEs[A, B] = new BodyProp(); BodyPropulsionPIEs[A, B].LeftPIE = "0"; BodyPropulsionPIEs[A, B].RightPIE = "0"; } } foreach ( var tempLoopVar_Fields in DataBodyPropulsion.ResultData ) { Fields = tempLoopVar_Fields; Body = FindBodyCode(Fields[0]); Propulsion = FindPropulsionCode(Fields[1]); if ( Body != null && Propulsion != null ) { if ( Fields[2] != "0" ) { BodyPropulsionPIEs[Body.ObjectDataLink.ArrayPosition, Propulsion.ObjectDataLink.ArrayPosition].LeftPIE = Fields[2].ToLower(); } if ( Fields[3] != "0" ) { BodyPropulsionPIEs[Body.ObjectDataLink.ArrayPosition, Propulsion.ObjectDataLink.ArrayPosition].RightPIE = Fields[3].ToLower(); } } } //set propulsion-body PIEs for ( var A = 0; A <= Propulsions.Count - 1; A++ ) { Propulsion = Propulsions[A]; for ( var B = 0; B <= Bodies.Count - 1; B++ ) { Body = Bodies[B]; Propulsion.Bodies[B].LeftAttachment = new clsAttachment(); Propulsion.Bodies[B].LeftAttachment.Models.Add(GetModelForPIE(PIE_List, BodyPropulsionPIEs[B, A].LeftPIE, ReturnResult)); Propulsion.Bodies[B].RightAttachment = new clsAttachment(); Propulsion.Bodies[B].RightAttachment.Models.Add(GetModelForPIE(PIE_List, BodyPropulsionPIEs[B, A].RightPIE, ReturnResult)); } } //interpret construction foreach ( var tempLoopVar_Fields in DataConstruction.ResultData ) { Fields = tempLoopVar_Fields; Construct = new Construct(); Construct.ObjectDataLink.Connect(Constructors); Construct.TurretObjectDataLink.Connect(Turrets); Construct.Code = Fields[0]; SetComponentName(DataNames.ResultData, Construct, ReturnResult); Construct.Designable = Fields[11] != "0"; Construct.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[8].ToLower(), ReturnResult)); } //interpret weapons foreach ( var tempLoopVar_Fields in DataWeapons.ResultData ) { Fields = tempLoopVar_Fields; Weapon = new Weapon(); Weapon.ObjectDataLink.Connect(Weapons); Weapon.TurretObjectDataLink.Connect(Turrets); Weapon.Code = Fields[0]; SetComponentName(DataNames.ResultData, Weapon, ReturnResult); IOUtil.InvariantParse(Fields[7], ref Weapon.HitPoints); Weapon.Designable = Fields[51] != "0"; Weapon.Attachment.Models.Add(GetModelForPIE(PIE_List, Convert.ToString(Fields[8].ToLower()), ReturnResult)); Weapon.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[9].ToLower(), ReturnResult)); } //interpret sensor foreach ( var tempLoopVar_Fields in DataSensor.ResultData ) { Fields = tempLoopVar_Fields; Sensor = new Sensor(); Sensor.ObjectDataLink.Connect(Sensors); Sensor.TurretObjectDataLink.Connect(Turrets); Sensor.Code = Fields[0]; SetComponentName(DataNames.ResultData, Sensor, ReturnResult); IOUtil.InvariantParse(Fields[7], ref Sensor.HitPoints); Sensor.Designable = Fields[15] != "0"; switch ( Fields[11].ToLower() ) { case "turret": Sensor.Location = Sensor.enumLocation.Turret; break; case "default": Sensor.Location = Sensor.enumLocation.Invisible; break; default: Sensor.Location = Sensor.enumLocation.Invisible; break; } Sensor.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[8].ToLower(), ReturnResult)); Sensor.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[9].ToLower(), ReturnResult)); } //interpret repair foreach ( var tempLoopVar_Fields in DataRepair.ResultData ) { Fields = tempLoopVar_Fields; Repair = new Repair(); Repair.ObjectDataLink.Connect(Repairs); Repair.TurretObjectDataLink.Connect(Turrets); Repair.Code = Fields[0]; SetComponentName(DataNames.ResultData, Repair, ReturnResult); Repair.Designable = Fields[13] != "0"; Repair.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[9].ToLower(), ReturnResult)); Repair.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[10].ToLower(), ReturnResult)); } //interpret brain foreach ( var tempLoopVar_Fields in DataBrain.ResultData ) { Fields = tempLoopVar_Fields; Brain = new Brain(); Brain.ObjectDataLink.Connect(Brains); Brain.TurretObjectDataLink.Connect(Turrets); Brain.Code = Fields[0]; SetComponentName(DataNames.ResultData, Brain, ReturnResult); Brain.Designable = true; Weapon = FindWeaponCode(Fields[7]); if ( Weapon != null ) { Brain.Weapon = Weapon; Brain.Attachment = Weapon.Attachment; } } //interpret ecm foreach ( var tempLoopVar_Fields in DataECM.ResultData ) { Fields = tempLoopVar_Fields; ECM = new Ecm(); ECM.ObjectDataLink.Connect(ECMs); ECM.TurretObjectDataLink.Connect(Turrets); ECM.Code = Fields[0]; SetComponentName(DataNames.ResultData, ECM, ReturnResult); IOUtil.InvariantParse(Fields[7], ref ECM.HitPoints); ECM.Designable = false; ECM.Attachment.Models.Add(GetModelForPIE(PIE_List, Fields[8].ToLower(), ReturnResult)); } //interpret feature foreach ( var tempLoopVar_Fields in DataFeatures.ResultData ) { Fields = tempLoopVar_Fields; featureTypeBase = new FeatureTypeBase(); featureTypeBase.UnitType_ObjectDataLink.Connect(UnitTypes); featureTypeBase.FeatureType_ObjectDataLink.Connect(FeatureTypes); featureTypeBase.Code = Fields[0]; if ( Fields[7] == "OIL RESOURCE" ) //type { featureTypeBase.FeatureType = FeatureTypeBase.enumFeatureType.OilResource; } SetFeatureName(DataNames.ResultData, featureTypeBase, ReturnResult); if ( !IOUtil.InvariantParse(Fields[1], ref featureTypeBase.Footprint.X) ) { ReturnResult.WarningAdd("Feature footprint-x was not an integer for " + featureTypeBase.Code + "."); } if ( !IOUtil.InvariantParse(Fields[2], ref featureTypeBase.Footprint.Y) ) { ReturnResult.WarningAdd("Feature footprint-y was not an integer for " + featureTypeBase.Code + "."); } featureTypeBase.BaseAttachment = new clsAttachment(); BaseAttachment = featureTypeBase.BaseAttachment; Text = Fields[6].ToLower(); Attachment = BaseAttachment.CreateAttachment(); Attachment.Models.Add(GetModelForPIE(PIE_List, Text, ReturnResult)); } //interpret structure foreach ( var tempLoopVar_Fields in DataStructures.ResultData ) { Fields = tempLoopVar_Fields; var StructureCode = Fields[0]; var StructureTypeText = Fields[1]; var StructurePIEs = Fields[21].ToLower().Split('@'); var StructureFootprint = new XYInt(); var StructureBasePIE = Fields[22].ToLower(); if ( !IOUtil.InvariantParse(Fields[5], ref StructureFootprint.X) ) { ReturnResult.WarningAdd("Structure footprint-x was not an integer for " + StructureCode + "."); } if ( !IOUtil.InvariantParse(Fields[6], ref StructureFootprint.Y) ) { ReturnResult.WarningAdd("Structure footprint-y was not an integer for " + StructureCode + "."); } if ( StructureTypeText != "WALL" || StructurePIEs.GetLength(0) != 4 ) { //this is NOT a generic wall structureTypeBase = new StructureTypeBase(); structureTypeBase.UnitType_ObjectDataLink.Connect(UnitTypes); structureTypeBase.StructureType_ObjectDataLink.Connect(StructureTypes); structureTypeBase.Code = StructureCode; SetStructureName(DataNames.ResultData, structureTypeBase, ReturnResult); structureTypeBase.Footprint = StructureFootprint; switch ( StructureTypeText ) { case "DEMOLISH": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Demolish; break; case "WALL": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Wall; break; case "CORNER WALL": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.CornerWall; break; case "FACTORY": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Factory; break; case "CYBORG FACTORY": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.CyborgFactory; break; case "VTOL FACTORY": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.VTOLFactory; break; case "COMMAND": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Command; break; case "HQ": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.HQ; break; case "DEFENSE": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Defense; break; case "POWER GENERATOR": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.PowerGenerator; break; case "POWER MODULE": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.PowerModule; break; case "RESEARCH": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Research; break; case "RESEARCH MODULE": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.ResearchModule; break; case "FACTORY MODULE": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.FactoryModule; break; case "DOOR": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.DOOR; break; case "REPAIR FACILITY": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.RepairFacility; break; case "SAT UPLINK": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.DOOR; break; case "REARM PAD": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.RearmPad; break; case "MISSILE SILO": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.MissileSilo; break; case "RESOURCE EXTRACTOR": structureTypeBase.StructureType = StructureTypeBase.enumStructureType.ResourceExtractor; break; default: structureTypeBase.StructureType = StructureTypeBase.enumStructureType.Unknown; break; } BaseAttachment = structureTypeBase.BaseAttachment; if ( StructurePIEs.GetLength(0) > 0 ) { BaseAttachment.Models.Add(GetModelForPIE(PIE_List, StructurePIEs[0], ReturnResult)); } structureTypeBase.StructureBasePlate = GetModelForPIE(PIE_List, StructureBasePIE, ReturnResult); if ( BaseAttachment.Models.Count == 1 ) { if ( BaseAttachment.Models[0].ConnectorCount >= 1 ) { Connector = BaseAttachment.Models[0].Connectors[0]; var StructureWeapons = default(SimpleList<string[]>); StructureWeapons = GetRowsWithValue(DataStructureWeapons.ResultData, structureTypeBase.Code); if ( StructureWeapons.Count > 0 ) { Weapon = FindWeaponCode(Convert.ToString(StructureWeapons[0][1])); } else { Weapon = null; } ECM = FindECMCode(Fields[18]); Sensor = FindSensorCode(Fields[19]); if ( Weapon != null ) { if ( Weapon.Code != "ZNULLWEAPON" ) { Attachment = BaseAttachment.CopyAttachment(Weapon.Attachment); Attachment.Pos_Offset = Connector; } } if ( ECM != null ) { if ( ECM.Code != "ZNULLECM" ) { Attachment = BaseAttachment.CopyAttachment(ECM.Attachment); Attachment.Pos_Offset = Connector; } } if ( Sensor != null ) { if ( Sensor.Code != "ZNULLSENSOR" ) { Attachment = BaseAttachment.CopyAttachment(Sensor.Attachment); Attachment.Pos_Offset = Connector; } } } } } else { //this is a generic wall var NewWall = new clsWallType(); NewWall.WallType_ObjectDataLink.Connect(WallTypes); NewWall.Code = StructureCode; SetWallName(DataNames.ResultData, NewWall, ReturnResult); var WallBasePlate = GetModelForPIE(PIE_List, StructureBasePIE, ReturnResult); var WallNum = 0; var wallStructureTypeBase = default(StructureTypeBase); for ( WallNum = 0; WallNum <= 3; WallNum++ ) { wallStructureTypeBase = new StructureTypeBase(); wallStructureTypeBase.UnitType_ObjectDataLink.Connect(UnitTypes); wallStructureTypeBase.StructureType_ObjectDataLink.Connect(StructureTypes); wallStructureTypeBase.WallLink.Connect(NewWall.Segments); wallStructureTypeBase.Code = StructureCode; Text = NewWall.Name; switch ( WallNum ) { case 0: Text += " - "; break; case 1: Text += " + "; break; case 2: Text += " T "; break; case 3: Text += " L "; break; } wallStructureTypeBase.Name = Text; wallStructureTypeBase.Footprint = StructureFootprint; wallStructureTypeBase.StructureType = StructureTypeBase.enumStructureType.Wall; BaseAttachment = wallStructureTypeBase.BaseAttachment; Text = StructurePIEs[WallNum]; BaseAttachment.Models.Add(GetModelForPIE(PIE_List, Text, ReturnResult)); wallStructureTypeBase.StructureBasePlate = WallBasePlate; } } } //interpret templates var TurretConflictCount = 0; foreach ( var tempLoopVar_Fields in DataTemplates.ResultData ) { Fields = tempLoopVar_Fields; Template = new DroidTemplate(); Template.UnitType_ObjectDataLink.Connect(UnitTypes); Template.DroidTemplate_ObjectDataLink.Connect(DroidTemplates); Template.Code = Fields[0]; SetTemplateName(DataNames.ResultData, Template, ReturnResult); switch ( Fields[9] ) //type { case "ZNULLDROID": Template.TemplateDroidType = App.TemplateDroidType_Null; break; case "DROID": Template.TemplateDroidType = App.TemplateDroidType_Droid; break; case "CYBORG": Template.TemplateDroidType = App.TemplateDroidType_Cyborg; break; case "CYBORG_CONSTRUCT": Template.TemplateDroidType = App.TemplateDroidType_CyborgConstruct; break; case "CYBORG_REPAIR": Template.TemplateDroidType = App.TemplateDroidType_CyborgRepair; break; case "CYBORG_SUPER": Template.TemplateDroidType = App.TemplateDroidType_CyborgSuper; break; case "TRANSPORTER": Template.TemplateDroidType = App.TemplateDroidType_Transporter; break; case "PERSON": Template.TemplateDroidType = App.TemplateDroidType_Person; break; default: Template.TemplateDroidType = null; ReturnResult.WarningAdd("Template " + Template.GetDisplayTextCode() + " had an unrecognised type."); break; } var LoadPartsArgs = new DroidDesign.sLoadPartsArgs(); LoadPartsArgs.Body = FindBodyCode(Fields[2]); LoadPartsArgs.Brain = FindBrainCode(Fields[3]); LoadPartsArgs.Construct = FindConstructorCode(Fields[4]); LoadPartsArgs.ECM = FindECMCode(Fields[5]); LoadPartsArgs.Propulsion = FindPropulsionCode(Fields[7]); LoadPartsArgs.Repair = FindRepairCode(Fields[8]); LoadPartsArgs.Sensor = FindSensorCode(Fields[10]); var TemplateWeapons = GetRowsWithValue(DataAssignWeapons.ResultData, Template.Code); if ( TemplateWeapons.Count > 0 ) { Text = Convert.ToString(TemplateWeapons[0][1]); if ( Text != "NULL" ) { LoadPartsArgs.Weapon1 = FindWeaponCode(Text); } Text = Convert.ToString(TemplateWeapons[0][2]); if ( Text != "NULL" ) { LoadPartsArgs.Weapon2 = FindWeaponCode(Text); } Text = Convert.ToString(TemplateWeapons[0][3]); if ( Text != "NULL" ) { LoadPartsArgs.Weapon3 = FindWeaponCode(Text); } } if ( !Template.LoadParts(LoadPartsArgs) ) { if ( TurretConflictCount < 16 ) { ReturnResult.WarningAdd("Template " + Template.GetDisplayTextCode() + " had multiple conflicting turrets."); } TurretConflictCount++; } } if ( TurretConflictCount > 0 ) { ReturnResult.WarningAdd(TurretConflictCount + " templates had multiple conflicting turrets."); } return ReturnResult; }
public clsModel GetModelForPIE(SimpleList<clsPIE> PIE_List, string PIE_LCaseFileTitle, clsResult ResultOutput) { if ( PIE_LCaseFileTitle == "0" ) { return null; } var A = 0; var PIEFile = default(StreamReader); var PIE = default(clsPIE); var Result = new clsResult("Loading PIE file " + PIE_LCaseFileTitle); for ( A = 0; A <= PIE_List.Count - 1; A++ ) { PIE = PIE_List[A]; if ( PIE.LCaseFileTitle == PIE_LCaseFileTitle ) { if ( PIE.Model == null ) { PIE.Model = new clsModel(); try { PIEFile = new StreamReader(PIE.Path); try { Result.Take(PIE.Model.ReadPIE(PIEFile, this)); } catch ( Exception ex ) { PIEFile.Close(); Result.WarningAdd(ex.Message); ResultOutput.Add(Result); return PIE.Model; } } catch ( Exception ex ) { Result.WarningAdd(ex.Message); } } ResultOutput.Add(Result); return PIE.Model; } } if ( !Result.HasWarnings ) { Result.WarningAdd("file is missing"); } ResultOutput.Add(Result); return null; }