コード例 #1
0
ファイル: ObjectPreview.cs プロジェクト: Guad/MapEditor
        public static Model LoadObject(int hash)
        {
            int counter = 0;
            var res = UIMenu.GetScreenResolutionMantainRatio();

            var m = new Model(hash);

            if (!m.IsValid || !m.IsInCdImage)
            {
                if (!ObjectDatabase.InvalidHashes.Contains(hash))
                {
                    ObjectDatabase.InvalidHashes.Add(hash);
                    ObjectDatabase.SaveInvalidHashes();
                }
                return null;
            }
            globalCounter++;
            var sc = new Scaleform(0);
            sc.Load("instructional_buttons");
            sc.CallFunction("CLEAR_ALL");
            sc.CallFunction("TOGGLE_MOUSE_BUTTONS", 0);
            sc.CallFunction("CREATE_CONTAINER");
            sc.CallFunction("SET_DATA_SLOT", 0, "b_50", Translation.Translate("Loading Model"));
            sc.CallFunction("DRAW_INSTRUCTIONAL_BUTTONS", -1);
            while (!m.IsLoaded && counter < 200)
            {
                m.Request();
                Script.Yield();
                counter++;
                sc.Render2D();
            }
            return m;
        }
コード例 #2
0
        public ResizeDialog(Model model)
        {
            this.model = model;
            InitializeComponent();
            int width = model.Width;
            int height = model.Height;
            this.originalSizeLabel.Text = "Original Size: " + width + " by " + height;
            this.newWidth.Text = width + "";
            this.newHeight.Text = height + "";

            this.horizontalAnchor.SelectedIndex = 0;
            this.verticalAnchor.SelectedIndex = 0;

            this.okButton.Click += (sender, e) => { this.ChangeSize(); };
            this.cancelButton.Click += (sender, e) => { this.Close(); };
        }
コード例 #3
0
ファイル: PropStreamer.cs プロジェクト: Guad/MapEditor
 public static Ped CreatePed(Model model, Vector3 position, float heading, bool dynamic, Quaternion q = null, int drawDistance = -1)
 {
     var veh = World.CreatePed(model, position, heading);
     Peds.Add(veh.Handle);
     if (!dynamic)
     {
         StaticProps.Add(veh.Handle);
         veh.FreezePosition = true;
     }
     if (q != null)
         Quaternion.SetEntityQuaternion(veh, q);
     if (drawDistance != -1)
         veh.LodDistance = drawDistance;
     UsedModels.Add(model.Hash);
     model.MarkAsNoLongerNeeded();
     return veh;
 }
コード例 #4
0
ファイル: PropStreamer.cs プロジェクト: Guad/MapEditor
        public static DynamicPickup CreatePickup(Model model, Vector3 position, float heading, int amount, bool dynamic, Quaternion q = null)
        {
            var v_4 = 515;
            int newPickup = -1;

            if (Game.Player.Character.IsInRangeOf(position, 30f))
            {
                newPickup = Function.Call<int>(Hash.CREATE_PICKUP_ROTATE, model.Hash, position.X, position.Y,
                    position.Z, 0, 0, heading, v_4, amount, 0, false, 0);
            }

            var pcObj = new DynamicPickup(newPickup);
            pcObj.Flag = v_4;
            pcObj.Amount = amount;
            pcObj.RealPosition = position;
            if (newPickup != -1)
            {
                var start = 0;
                while (pcObj.ObjectHandle == -1 && start < 20)
                {
                    start++;
                    Script.Yield();
                }

                pcObj.Dynamic = false;
                new Prop(pcObj.ObjectHandle).IsPersistent = true;

                if (q != null)
                    Quaternion.SetEntityQuaternion(new Prop(pcObj.ObjectHandle), q);
                pcObj.UpdatePos();
            }

            Pickups.Add(pcObj);
            pcObj.PickupHash = model.Hash;
            pcObj.Timeout = 1;
            pcObj.UID = _pickupIds++;
            return pcObj;
        }
コード例 #5
0
        public MapTypeDialog(Model model)
        {
            InitializeComponent();
            this.picker.SelectedIndex = model.IsSideScroll ? 0 : 1;

            this.okButton.Click += (sender, e) =>
            {
                bool isSidescroll = this.picker.SelectedIndex == 0;
                if (model.IsSideScroll != isSidescroll)
                {
                    model.IsSideScroll = isSidescroll;
                    model.IsDirty = true;
                    MainWindow.Instance.UpdateTitle();
                }
                this.Close();
            };

            this.cancelButton.Click += (sender, e) =>
            {
                this.DialogResult = false;
                this.Close();
            };
        }
コード例 #6
0
ファイル: MapEditor.cs プロジェクト: Guad/MapEditor
        public void ValidateDatabase()
        {
            // Validate object list.
            Dictionary<string, int> tmpDict = new Dictionary<string, int>();
            int counter = 0;
            while (counter < ObjectDatabase.MainDb.Count)
            {
                var pair = ObjectDatabase.MainDb.ElementAt(counter);
                counter++;
                UI.ShowSubtitle((counter) + "/" + ObjectDatabase.MainDb.Count + " done. (" +
                    (counter/(float) ObjectDatabase.MainDb.Count)*100 +
                    "%)\nValid objects: " + tmpDict.Count, 2000);
                Yield();

                var model = new Model(pair.Value);
                model.Request(100);
                if (!model.IsLoaded)
                {
                    model.MarkAsNoLongerNeeded();
                    continue;
                }
                model.MarkAsNoLongerNeeded();
                if (!tmpDict.ContainsKey(pair.Key))
                    tmpDict.Add(pair.Key, pair.Value);
            }
            string output = tmpDict.Aggregate("", (current, pair) => current + (pair.Key + "=" + pair.Value + "\r\n"));
            File.WriteAllText("scripts\\ObjectList.ini", output);
        }
コード例 #7
0
ファイル: PropStreamer.cs プロジェクト: Guad/MapEditor
        public static Vehicle CreateVehicle(Model model, Vector3 position, float heading, bool dynamic, Quaternion q = null, int drawDistance = -1)
        {
            Vehicle veh;
            int counter = 0;
            do
            {
                veh = World.CreateVehicle(model, position, heading);
                counter++;
            } while (veh == null && counter < 2000);

            if (veh == null)
            {
                UI.Notify("~r~~h~Map Editor~h~~w~~n~I tried very hard, but the vehicle failed to load.");
                return null;
            }

            Vehicles.Add(veh.Handle);
            if (!dynamic)
            {
                StaticProps.Add(veh.Handle);
                veh.FreezePosition = true;
            }
            if(q != null)
                Quaternion.SetEntityQuaternion(veh, q);
            if (drawDistance != -1)
                veh.LodDistance = drawDistance;
            UsedModels.Add(model.Hash);
            model.MarkAsNoLongerNeeded();
            return veh;
        }
コード例 #8
0
ファイル: PropStreamer.cs プロジェクト: Guad/MapEditor
        public static Prop CreateProp(Model model, Vector3 position, Vector3 rotation, bool dynamic, Quaternion q = null, bool force = false, int drawDistance = -1)
        {
            if (StreamedInHandles.Count >= MAX_OBJECTS)
            {
                UI.Notify("~r~~h~Map Editor~h~~w~\nYou have reached the prop limit. You cannot place any more props.");
                return null;
            }

            if (PropCount > 0 && PropCount % 249 == 0)
                Script.Wait(100);

            var prop = new Prop(Function.Call<int>(Hash.CREATE_OBJECT_NO_OFFSET, model.Hash, position.X, position.Y, position.Z, true, true, dynamic));
            prop.Rotation = rotation;
            StreamedInHandles.Add(prop.Handle);
            if (!dynamic)
            {
                StaticProps.Add(prop.Handle);
                prop.FreezePosition = true;
            }
            if (q != null)
                Quaternion.SetEntityQuaternion(prop, q);
            prop.Position = position;
            if (drawDistance != -1)
                prop.LodDistance = drawDistance;
            UsedModels.Add(model.Hash);
            model.MarkAsNoLongerNeeded();
            return prop;
        }
コード例 #9
0
        public Model Parse()
        {
            Dictionary<string, string> values = new Dictionary<string, string>();
            string[] lines = System.IO.File.ReadAllText(this.filename).Replace("\r\n", "\n").Replace('\r', '\n').Split('\n');
            foreach (string line in lines)
            {
                string[] parts = line.Split(':');
                if (parts.Length >= 2)
                {
                    string key = parts[0];
                    if (key.Length > 0 && key[0] == '#')
                    {
                        key = key.Substring(1);
                        string value = parts[1];
                        for (int i = 2; i < parts.Length; ++i)
                        {
                            value += ':' + parts[i];
                        }

                        values[key] = value;
                    }
                }
            }

            int width = int.Parse(values["width"]);
            int height = int.Parse(values["height"]); // let it crash if this is wrong.

            Model model = new Model(width, height);

            TileTemplate[] topLayer = new TileTemplate[width * height];
            TileTemplate[] bottomLayer = new TileTemplate[width * height];

            string[] tileIdsUpper = values["upper"].Split(',');
            string[] tileIdsLower = values["lower"].Split(',');

            for (int i = width * height - 1; i >= 0; --i)
            {
                string tileId = tileIdsUpper[i].Trim();
                if (tileId.Length > 0)
                {
                    topLayer[i] = this.tileLookup[tileId];
                }

                tileId = tileIdsLower[i].Trim();
                if (tileId.Length > 0)
                {
                    bottomLayer[i] = this.tileLookup[tileId];
                }
            }

            // TODO: other fields

            model.SetTiles(topLayer, true);
            model.SetTiles(bottomLayer, false);

            model.SetRawFileData(values);

            model.Path = filename;
            model.IsSideScroll = !values.ContainsKey("view") || values["view"].Trim().ToLowerInvariant() != "over";

            return model;
        }