コード例 #1
0
ファイル: GroupForm.cs プロジェクト: southdy/RCT2Tools
 /** <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.");
             }
         }
     }
 }
コード例 #2
0
ファイル: GroupForm.cs プロジェクト: southdy/RCT2Tools
        //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();
        }
コード例 #3
0
ファイル: ObjectData.cs プロジェクト: southdy/RCT2Tools
        /** <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);
        }
コード例 #4
0
ファイル: GroupForm.cs プロジェクト: southdy/RCT2Tools
 /** <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 = "";
     }
 }
コード例 #5
0
        //=========== 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);
        }
コード例 #6
0
ファイル: ObjectData.cs プロジェクト: X123M3-256/RCT2Tools
        /** <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);
        }