/** <summary> Opens the water object. </summary> */ private void Open(object sender, EventArgs e) { if (fileName == "") { openFileDialog.InitialDirectory = ""; openFileDialog.FileName = ""; } else { openFileDialog.InitialDirectory = Path.GetDirectoryName(fileName); openFileDialog.FileName = Path.GetFileNameWithoutExtension(fileName); } if (!changed || WarningMessageBox.Show(this, "Scenery group has been changed.", "Are you sure you want to continue?") == DialogResult.Yes) { if (openFileDialog.ShowDialog(this) == DialogResult.OK) { fileName = openFileDialog.FileName; ObjectData obj = ObjectData.FromFile(fileName); bool invalid = false; if (obj is SceneryGroup && (obj as SceneryGroup).GraphicsData.NumImages == 2) { this.sceneryGroup = (SceneryGroup)obj; LoadSceneryGroup(); } else { invalid = true; } if (invalid) { ErrorMessageBox.Show(this, "Failed to load scenery group.", "Object may be invalid."); } } } }
//AboutBox aboutForm = new AboutBox(); #endregion //-------------------------------- #endregion //========= CONSTRUCTORS ========= #region Constructors /** <summary> Constructs the form. </summary> */ public GroupForm(string[] args) { InitializeComponent(); Pathing.SetPathSprites(); Water.LoadResources(); ColorRemapping.LoadResources(); Terrain.LoadResources(); this.fontBold = new SpriteFont(Resources.BoldFont, ' ', 'z', 10); this.drawSettings.Remap1 = RemapColors.IndianRed; this.drawSettings.Remap2 = RemapColors.Gold; this.drawSettings.Remap3 = RemapColors.Bark; this.drawSettings.Slope = -1; this.labelCurrentObject.Text = ""; this.objectImage = new Bitmap(190, 254); this.LoadSettings(null, null); //this.directory = this.defaultDirectory; this.sceneryGroup = new SceneryGroup(); this.sceneryGroup = (SceneryGroup)ObjectData.FromBuffer(Resources.SCGCUST); this.sceneryGroup.ObjectHeader.Flags = 0x7; LoadSceneryGroup(); }
/** <summary> Returns an object loaded from the specified stream. </summary> */ public static ObjectData FromStream(Stream stream, bool quickLoad = false) { ObjectData obj = null; ObjectDataHeader objectHeader = new ObjectDataHeader(); ChunkHeader chunkHeader = new ChunkHeader(); try { BinaryReader reader = new BinaryReader(stream, Encoding.Unicode); objectHeader.Read(reader); byte[] data = null; if ((ObjectTypes)(objectHeader.Flags & 0xF) != ObjectTypes.ScenarioText) { data = ObjectData.ReadChunk(reader, chunkHeader); reader.Close(); reader = new BinaryReader(new MemoryStream(data)); } switch ((ObjectTypes)(objectHeader.Flags & 0xF)) { case ObjectTypes.Attraction: obj = new Attraction(objectHeader, chunkHeader); break; case ObjectTypes.SmallScenery: obj = new SmallScenery(objectHeader, chunkHeader); break; case ObjectTypes.LargeScenery: obj = new LargeScenery(objectHeader, chunkHeader); break; case ObjectTypes.Wall: obj = new Wall(objectHeader, chunkHeader); break; case ObjectTypes.PathBanner: obj = new PathBanner(objectHeader, chunkHeader); break; case ObjectTypes.Path: obj = new Pathing(objectHeader, chunkHeader); break; case ObjectTypes.PathAddition: obj = new PathAddition(objectHeader, chunkHeader); break; case ObjectTypes.SceneryGroup: obj = new SceneryGroup(objectHeader, chunkHeader); break; case ObjectTypes.ParkEntrance: obj = new ParkEntrance(objectHeader, chunkHeader); break; case ObjectTypes.Water: obj = new Water(objectHeader, chunkHeader); break; case ObjectTypes.ScenarioText: /*obj = new ScenarioText(objectHeader, chunkHeader);*/ break; default: objectHeader.Flags = (uint)ObjectTypes.None; break; // Set as invalid } if (obj != null) { obj.Read(reader, quickLoad); } reader.Close(); } catch (System.Exception) { objectHeader.Flags = (uint)ObjectTypes.None; obj = new ObjectData(objectHeader, chunkHeader); } return(obj); }
/** <summary> Creates a new water object. </summary> */ private void New(object sender, EventArgs e) { if (!changed || WarningMessageBox.Show(this, "Scenery group has been changed.", "Are you sure you want to continue?") == DialogResult.Yes) { sceneryGroup = (SceneryGroup)ObjectData.FromBuffer(Resources.SCGCUST); sceneryGroup.ObjectHeader.Flags = 0x7; LoadSceneryGroup(); fileName = ""; } }
//=========== LOADING ============ #region Loading /**<summary>Returns an object loaded from the specified stream.</summary>*/ public static ObjectData FromStream(Stream stream, bool quickLoad = false) { ObjectData obj = null; ObjectDataHeader objectHeader = new ObjectDataHeader(); ChunkHeader chunkHeader = new ChunkHeader(); byte[] decodedChunkData; BinaryReader reader = new BinaryReader(stream); objectHeader.Read(reader); chunkHeader.Read(reader); decodedChunkData = Chunk.Read(reader, chunkHeader); using (MemoryStream chunkStream = new MemoryStream(decodedChunkData)) { reader = new BinaryReader(chunkStream); switch ((ObjectTypes)(objectHeader.Flags & 0xF)) { case ObjectTypes.Attraction: obj = new Attraction(objectHeader, chunkHeader); break; case ObjectTypes.SmallScenery: obj = new SmallScenery(objectHeader, chunkHeader); break; case ObjectTypes.LargeScenery: obj = new LargeScenery(objectHeader, chunkHeader); break; case ObjectTypes.Wall: obj = new Wall(objectHeader, chunkHeader); break; case ObjectTypes.PathBanner: obj = new PathBanner(objectHeader, chunkHeader); break; case ObjectTypes.Footpath: obj = new Footpath(objectHeader, chunkHeader); break; case ObjectTypes.PathAddition: obj = new PathAddition(objectHeader, chunkHeader); break; case ObjectTypes.SceneryGroup: obj = new SceneryGroup(objectHeader, chunkHeader); break; case ObjectTypes.ParkEntrance: obj = new ParkEntrance(objectHeader, chunkHeader); break; case ObjectTypes.Water: obj = new Water(objectHeader, chunkHeader); break; case ObjectTypes.ScenarioText: obj = new ScenarioText(objectHeader, chunkHeader); break; default: objectHeader.Flags = (uint)ObjectTypes.None; break; // Set as invalid } if (obj != null) { obj.Read(reader, quickLoad); } } return(obj); }
/** <summary> Reads and returns object data from a path. </summary> */ public static ObjectData ReadObject(string path) { ObjectData obj = null; ObjectDataHeader objectHeader = new ObjectDataHeader(); ChunkHeader chunkHeader = new ChunkHeader(); try { objectHeader.FileName = path.Substring(path.Replace('/', '\\').LastIndexOf('\\') + 1); objectHeader.FileName = objectHeader.FileName.Substring(0, objectHeader.FileName.Length - 4); BinaryReader reader = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read), Encoding.Unicode); objectHeader.Read(reader); byte[] data = null; if ((ObjectTypes)(objectHeader.Flags & 0xF) != ObjectTypes.ScenarioText) { data = ObjectData.ReadChunk(reader, chunkHeader); reader.Close(); reader = new BinaryReader(new MemoryStream(data)); } switch ((ObjectTypes)(objectHeader.Flags & 0xF)) { case ObjectTypes.Attraction: obj = new Attraction(objectHeader, chunkHeader); break; case ObjectTypes.SmallScenery: obj = new SmallScenery(objectHeader, chunkHeader); break; case ObjectTypes.LargeScenery: obj = new LargeScenery(objectHeader, chunkHeader); break; case ObjectTypes.Wall: obj = new Wall(objectHeader, chunkHeader); break; case ObjectTypes.PathBanner: obj = new PathBanner(objectHeader, chunkHeader); break; case ObjectTypes.Path: obj = new Pathing(objectHeader, chunkHeader); break; case ObjectTypes.PathAddition: obj = new PathAddition(objectHeader, chunkHeader); break; case ObjectTypes.SceneryGroup: obj = new SceneryGroup(objectHeader, chunkHeader); break; case ObjectTypes.ParkEntrance: obj = new ParkEntrance(objectHeader, chunkHeader); break; case ObjectTypes.Water: obj = new Water(objectHeader, chunkHeader); break; case ObjectTypes.ScenarioText: /*obj = new ScenarioText(objectHeader, chunkHeader);*/ break; default: objectHeader.Flags = (uint)ObjectTypes.None; break; } if (obj != null) { obj.Read(reader); } reader.Close(); } catch (System.Exception) { objectHeader.Flags = (uint)ObjectTypes.None; obj = new ObjectData(objectHeader, chunkHeader); } return(obj); }