public Preferences(string fileName) { m_fileName = fileName; if (File.Exists(m_fileName)) { // Если файл с настройками существует - прочитаем его в m_data XmlSerializer serializer = new XmlSerializer(typeof(SerializableData)); using (Stream fileStream = new FileStream(m_fileName, FileMode.Open)) { m_data = serializer.Deserialize(fileStream) as SerializableData; } // Убираем с прочитанных данных косяки, которые мог внести туда пользователь вручную // В случае если были косяки, пересохраняем исправленные данные обратно в файл if (m_data.Validate()) { Save(false); } } else { // Если файла с настройками не существует, создадим его и запишем в него найстройки по умолчанию (которые задаются в конструкторе SerializableData) m_data = SerializableData.CreateDefault(); Save(false); } }
public static void SendSaveEvent(SerializableData data) { if (OnSave != null) { OnSave(data); } }
static SerializableData Deserialize() { SerializableData data; string json; if (!File.Exists(Path)) { // not exists - write new data = SerializableData.Empty(); json = JsonUtility.ToJson(data); File.WriteAllText(Path, json); } else { // exists json = File.ReadAllText(Path); if (string.IsNullOrEmpty(json)) { // but corrupted - overwrite with new data = SerializableData.Empty(); json = JsonUtility.ToJson(data); File.WriteAllText(Path, json); } data = JsonUtility.FromJson <SerializableData>(json); // todo assert valid } return(data); }
public void Serialize() { var data = SerializableData.OnSerialize(_dict); var json = JsonUtility.ToJson(data); File.WriteAllText(Path, json); }
public void WriteXML(SerializableData data, string xmlNodeName) { Debug.Assert(!String.IsNullOrEmpty(data.Type)); this.ObjectBegin(xmlNodeName); this.ObjectDescription(ValueKey, data.Value); // 写入TK TypeInfo info = new TypeInfo(data.Type, data.AssemblyQualifiedName); this.ObjectDescription(TypeDictionaryKey, typeDict.GetTypeKey(info)); this.ObjectDescription(NameKey, data.FieldName); int count = data.SerializableDataCollection.Count; this.ArrayBegin(SerializableDataCollectionKey, out count); for (int index = 0; index < count; ++index) { this.WriteXML(data.SerializableDataCollection[index], ArrayItemKey); this.ArrayNext(); } this.ArrayEnd(); this.ObjectEnd(); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var oldTypeNameHandling = serializer.TypeNameHandling; var oldAssemblyFormat = serializer.TypeNameAssemblyFormat; try { var serializable = (ISerializable)value; var context = serializer.Context; var info = new SerializationInfo(value.GetType(), new FormatterConverter()); serializable.GetObjectData(info, context); var data = SerializableData.CreateData(info, value.GetType()); if (serializer.TypeNameHandling == TypeNameHandling.None) { serializer.TypeNameHandling = TypeNameHandling.Auto; } else if (serializer.TypeNameHandling == TypeNameHandling.Arrays) { serializer.TypeNameHandling = TypeNameHandling.All; } // The following seems to be required by https://github.com/JamesNK/Newtonsoft.Json/issues/787 serializer.TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full; serializer.Serialize(writer, data, typeof(SerializableData)); } finally { serializer.TypeNameHandling = oldTypeNameHandling; serializer.TypeNameAssemblyFormat = oldAssemblyFormat; } }
private void ReadXML(ref SerializableData data, string xmlNodeName) { this.ObjectBegin(xmlNodeName); data.Value = this.ObjectDescription(ValueKey); string TK = this.ObjectDescription(TypeDictionaryKey); Debug.Assert(typeDict.ContainsKey(TK)); TypeInfo info = typeDict.KeyToType[TK]; data.Type = info.TypeName; data.AssemblyQualifiedName = info.AssemblyQualifiedName; //data.Type = this.ObjectDescription("type"); //data.AssemblyQualifiedName = this.ObjectDescription("assembly"); data.FieldName = this.ObjectDescription(NameKey); int count = 0; this.ArrayBegin(SerializableDataCollectionKey, out count); for (int index = 0; index < count; ++index) { SerializableData new_data = new SerializableData(); this.ReadXML(ref new_data, ArrayItemKey); data.SerializableDataCollection.Add(new_data); this.ArrayNext(); } this.ArrayEnd(); this.ObjectEnd(); }
public void CheckSubProperty(Type mainType) { for (int index = SubPropertyMeta.Count - 1; index >= 0; index--) { SearchMetaSubProperty sub = SubPropertyMeta[index]; bool keep = false; //PropertyInfo pi = mainType.GetProperty(sub.PropertyName); PropertyInfo pi = SerializableData.GetObjPro(sub.PropertyName, mainType); if (pi != null && pi.PropertyType.IsGenericType) { sub.SubProperty = pi; sub.PropertyType = pi.PropertyType; foreach (Type tParam in pi.PropertyType.GetGenericArguments()) { if (tParam.IsSubclassOf(typeof(SerializableData))) { sub.PropertyGenericType = tParam; keep = true; break; } } } if (!keep) { SubPropertyMeta.RemoveAt(index); } } }
public void ResetData() { PlayerPrefs.DeleteAll(); cachedData = new SerializableData(); Save(); }
public static void QueueItemToSave(GameObject saveObject, string serializedGuid) { SerializableData serializableData = new SerializableData(); #region Serilaize Object #region Serialize Unity classes and types serializableData.ID = DataSerialization.Serialize(serializedGuid); serializableData.activeInHierarchy = DataSerialization.Serialize(saveObject.activeInHierarchy); serializableData.unitySerializableData.sTransform = DataSerialization.Serialize(saveObject.transform.Serialize()); serializableData.unitySerializableData.sCamera = (saveObject.GetComponent <Camera>() is var cam && cam != null) ? DataSerialization.Serialize(cam.Serialize()) : null; #region Audio serializableData.unitySerializableData.sAudioChorusFilter = (saveObject.GetComponent <AudioChorusFilter>() is var audioChorusFilter && audioChorusFilter != null) ? DataSerialization.Serialize(audioChorusFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioDistortionFilter = (saveObject.GetComponent <AudioDistortionFilter>() is var audioDistortionFilter && audioDistortionFilter != null) ? DataSerialization.Serialize(audioDistortionFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioEchoFilter = (saveObject.GetComponent <AudioEchoFilter>() is var audioEchoFilter && audioEchoFilter != null) ? DataSerialization.Serialize(audioEchoFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioHighPassFilter = (saveObject.GetComponent <AudioHighPassFilter>() is var audioHighPassFilter && audioHighPassFilter != null) ? DataSerialization.Serialize(audioHighPassFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioListener = (saveObject.GetComponent <AudioListener>() is var audioListener && audioListener != null) ? DataSerialization.Serialize(audioListener.Serialize()) : null; serializableData.unitySerializableData.sAudioLowPassFilter = (saveObject.GetComponent <AudioLowPassFilter>() is var audioLowPassFilter && audioLowPassFilter != null) ? DataSerialization.Serialize(audioLowPassFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioReverbFilter = (saveObject.GetComponent <AudioReverbFilter>() is var audioReverbFilter && audioReverbFilter != null) ? DataSerialization.Serialize(audioReverbFilter.Serialize()) : null; serializableData.unitySerializableData.sAudioReverbZone = (saveObject.GetComponent <AudioReverbZone>() is var audioReverbZone && audioReverbZone != null) ? DataSerialization.Serialize(audioReverbZone.Serialize()) : null; serializableData.unitySerializableData.sAudioSource = (saveObject.GetComponent <AudioSource>() is var audioSource && audioSource != null) ? DataSerialization.Serialize(audioSource.Serialize()) : null; #endregion #region Effects serializableData.unitySerializableData.sLensFlare = (saveObject.GetComponent <LensFlare>() is var lensFlare && lensFlare != null) ? DataSerialization.Serialize(lensFlare.Serialize()) : null; serializableData.unitySerializableData.sLineRenderer = (saveObject.GetComponent <LineRenderer>() is var lineRenderer && lineRenderer != null) ? DataSerialization.Serialize(lineRenderer.Serialize()) : null; serializableData.unitySerializableData.sParticleSystem = (saveObject.GetComponent <ParticleSystem>() is var particleSystem && particleSystem != null) ? DataSerialization.Serialize(particleSystem.Serialize()) : null; serializableData.unitySerializableData.sProjector = (saveObject.GetComponent <Projector>() is var projector && projector != null) ? DataSerialization.Serialize(projector.Serialize()) : null; serializableData.unitySerializableData.sTrailRenderer = (saveObject.GetComponent <TrailRenderer>() is var trailRenderer && trailRenderer != null) ? DataSerialization.Serialize(trailRenderer.Serialize()) : null; #endregion #endregion #region Serialize User Defined Classes MonoBehaviour[] saveableScripts = saveObject.GetComponents <MonoBehaviour>(); foreach (var monoItem in saveableScripts) { if (monoItem is IUniversalSerializedPersistenceSystem == false) { continue; } System.Type thisType = monoItem.GetType(); MethodInfo theMethod = thisType.GetMethod("Serialize"); object[] parameters = new object[1] { saveObject }; serializableData.serializedScripts = (List <UserDefinedData>)theMethod.Invoke(monoItem, parameters); break; } #endregion #endregion #region Serilaize Objects Children QueueAllChildren(serializedGuid, saveObject.transform, saveObject.transform, ref serializableData); #endregion UniversalSerializedPersistenceSystem.serializableDataSet.data.Add(serializableData); saveObject.BroadcastMessage("SaveMessage", SendMessageOptions.DontRequireReceiver); }
public SerializableData Load() { if (HasSaveFile()) { try { BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream file = File.Open(filePath, FileMode.Open); SerializableData data = (SerializableData)binaryFormatter.Deserialize(file); file.Close(); this.saveBuffer = data; return(data); } catch { this.saveBuffer = getDefaultFile(); return(this.saveBuffer); } } else { this.saveBuffer = getDefaultFile(); return(this.saveBuffer); } }
public void BuildFor(SerializableData.SerializableObject obj) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, obj.SpawnAfter); item.OnListChanged += (sender, index) => { obj.SpawnAfter = index; }; AddItem(item); } #endregion #region RemoveAfter { var item = new MenuListItem("Remove After Objective", StaticData.StaticLists.RemoveAfterList, obj.RemoveAfter); item.OnListChanged += (sender, index) => { obj.RemoveAfter = index; }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission RefreshIndex(); }
public void LoadData() { if (PlayerPrefs.HasKey("SaveKey")) { string json = PlayerPrefs.GetString("SaveKey"); data = JsonUtility.FromJson <SerializableData>(json); } }
public int DoInsert(SerializableData data, string tableName, bool needKey) { if (_tranDal != null) { return(_tranDal.DoInsert(data, tableName, needKey, null)); } return(0); }
public int DoDelete(SerializableData data, string tableName, string keyField) { if (_tranDal != null) { return(_tranDal.DoDelete(data, tableName, keyField)); } return(0); }
public int DoUpdate(SerializableData data, string tableName, string keyField, List <string> ExcludeFields) { if (_tranDal != null) { return(_tranDal.DoUpdate(data, tableName, keyField, ExcludeFields)); } return(0); }
// Восстанавливает бэкап настроек, заблаговременно сделанный через MakeBackup() public void RestoreBackup() { if (m_dataBackup != null) { m_data = m_dataBackup; m_dataBackup = null; } }
public int DoInsert(SerializableData data, string tableName, bool needKey, List <string> ExcludeFields) { if (_tranDal != null) { return(_tranDal.DoInsert(data, tableName, needKey, ExcludeFields)); } return(0); }
/// <summary> /// Loads JSON files from a given path /// </summary> /// <param name="path"></param> /// <returns></returns> private static SerializableData LoadByJSON(string path) { string json = File.ReadAllText(path); SerializableData toReturn = JsonUtility.FromJson <SerializableData>(json); Debug.Log(toReturn); return(toReturn); }
public void /*ISerializationManager.*/ Serialize(IData target) { var serializable = new SerializableData(target); using (Stream fileStream = this.GetFileStream(FileMode.Create)) { this._serializer.Serialize(fileStream, serializable); } }
public EntityStatus GetChildrenStatus() { var result = EntityStatus.Original; foreach (IEntity s in this) { result = SerializableData.MergerStatus(result, s.GetChildrenStatus()); } return(result); }
// Saves the text data as a serializable object to a binary file // All data being saved must either be a basic type (int, string, float, enum...) // or a built in type from Unity such as Vector2/3/4 Quaternion or Matrix4x4 // or a class inheriting from Object or another class marked with "[System.Serializable]" // whose internal members meet these requirements. public void SaveBinary() { SerializableData serData = new SerializableData(); serData.Data = text.text; BinaryFormatter formatter = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + localPath); formatter.Serialize(file, serData); file.Close(); }
// Создает экземпляр с значениями по умолчанию. Такие значения будут при первом запуске приложения public static SerializableData CreateDefault() { SerializableData data = new SerializableData(); // Ставим в null, для того, чтобы при валидации произошло авто-определение на основе текущей культуры data.uiLanguage = null; data.Validate(); return(data); }
public SerializableData LoadSerializableData(string strSQL, params SqlParameter[] paramters) { var result = new SerializableData(); var table = LoadTable(strSQL, paramters); if (table.Rows.Count > 0) { result = LoadSerializableData(table.Rows[0]); } return(result); }
// Создает экземпляр с значениями по умолчанию. Такие значения будут при первом запуске приложения public static SerializableData CreateDefault() { SerializableData data = new SerializableData(); // Ставим в null, для того, чтобы при валидации произошло авто-определение на основе текущей культуры data.uiLanguage = null; data.Validate(); return data; }
private void BuildTypeDictionary(SerializableData data) { TypeInfo type = new TypeInfo(data.Type, data.AssemblyQualifiedName); string key = typeDict.GetTypeKey(type); typeDict.Add(key, type); foreach (var item in data.SerializableDataCollection) { BuildTypeDictionary(item); } }
private Stream CreateLoadStream(string storageKey) { byte[] bytes = SerializableData.LoadData(storageKey); Stream stream = null; if (bytes != null) { stream = new MemoryStream(bytes); } return(stream); }
public void SerializeArray <T>(string storageKey, T[] array) where T : IDataContainer { LogHelper.LogFormat("arraysize {0}", array.Length); LogHelper.LogFormat("SerializeArray"); MemoryStream memoryStream = new MemoryStream(); LogHelper.LogFormat("memoryStream"); DataSerializer.SerializeArray <T>(memoryStream, DataSerializer.Mode.Memory, SaveDataVersion, array); LogHelper.LogFormat("SerializeArray"); SerializableData.SaveData(storageKey, memoryStream.ToArray()); LogHelper.LogFormat("SerializableData.SaveData"); }
public static void Load() { allowSave = true; if (File.Exists(dataPath)) { FileStream stream = new FileStream(dataPath, FileMode.Open); StreamReader reader = new StreamReader(stream); string json = reader.ReadToEnd(); LoadedData = JsonUtility.FromJson <SerializableData>(json); reader.Close(); } }
/// <summary> /// This will call the normal Render method by passing the converted XmlTree to an XmlDocument. /// TODO: need to update this render method to do everything that the obsolete render method does and remove the obsolete method /// </summary> /// <param name="tree"></param> public override void Render(ref XmlTree tree) { XmlDocument xDoc = new XmlDocument(); xDoc.LoadXml(tree.ToString(SerializedTreeType.XmlTree)); Render(ref xDoc); tree = SerializableData.Deserialize(xDoc.OuterXml, typeof(XmlTree)) as XmlTree; //ensure that the tree type is set! this wouldn't need to be done if BaseTree was implemented properly foreach (XmlTreeNode node in tree) { node.TreeType = this.TreeAlias; } }
public void LoadBinary() { if (File.Exists(Application.persistentDataPath + localPath)) { SerializableData serData = new SerializableData(); BinaryFormatter formatter = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + localPath, FileMode.Open); serData = (SerializableData)formatter.Deserialize(file); file.Close(); text.text = serData.Data; } }
public void SetValue(string key, object value) { PropertyInfo _p = SerializableData.GetObjPro(key, this.GetType()); if (_p != null) { TypeCode tc = Type.GetTypeCode(_p.PropertyType); SetValue(key, value, tc); } else { SetValue(key, value, TypeCode.Empty);//默认 不处理 } }
public void BuildFor(SerializableData.SerializablePickup actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn Before Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region Weapons { var listIndex = actor.Ammo == 0 ? StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) 9999) : StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) actor.Ammo); var item = new MenuListItem("Ammo Count", StaticData.StaticLists.AmmoChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem) sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Ammo = newAmmo; }; AddItem(item); } #endregion #region Respawn { var item = new MenuCheckboxItem("Respawn", actor.Respawn); item.CheckboxEvent += (sender, @checked) => { actor.Respawn = @checked; }; AddItem(item); } #endregion RefreshIndex(); }
public void BuildFor(SerializableData.SerializablePed actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region RemoveAfter { var item = new MenuListItem("Remove After Objective", StaticData.StaticLists.RemoveAfterList, actor.RemoveAfter); item.OnListChanged += (sender, index) => { actor.RemoveAfter = index; }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Weapons { var item = new NativeMenuItem("Weapon"); var dict = StaticData.WeaponsData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray()); var menu = new CategorySelectionMenu(dict, "Weapon", true, "SELECT WEAPON"); menu.Build("Melee"); Children.Add(menu); AddItem(item); BindMenuToItem(menu, item); menu.SelectionChanged += (sender, eventargs) => { GameFiber.StartNew(delegate { var hash = StaticData.WeaponsData.Database[menu.CurrentSelectedCategory].First( tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetEntity().Handle.Value, true); ((Ped) actor.GetEntity()).GiveNewWeapon(hash, actor.WeaponAmmo == 0 ? 9999 : actor.WeaponAmmo, true); actor.WeaponHash = hash; }); }; } { var listIndex = actor.WeaponAmmo == 0 ? StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) 9999) : StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) actor.WeaponAmmo); var item = new MenuListItem("Ammo Count", StaticData.StaticLists.AmmoChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem) sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.WeaponAmmo = newAmmo; if(actor.WeaponHash == 0) return; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetEntity().Handle.Value, true); ((Ped)actor.GetEntity()).GiveNewWeapon(actor.WeaponHash, newAmmo, true); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)200) : StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new MenuListItem("Health", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Armor { var listIndex = StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Armor); var item = new MenuListItem("Armor", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Armor = newAmmo; }; AddItem(item); } #endregion #region Accuracy { var listIndex = StaticData.StaticLists.AccuracyList.FindIndex(n => n == (dynamic)actor.Accuracy); var item = new MenuListItem("Accuracy", StaticData.StaticLists.AccuracyList, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Accuracy = newAmmo; }; AddItem(item); } #endregion #region Relationship { var item = new MenuListItem("Relationship", StaticData.StaticLists.RelationshipGroups, actor.RelationshipGroup); item.OnListChanged += (sender, index) => { actor.RelationshipGroup = index; }; AddItem(item); } #endregion #region Behaviour { var wpyItem = new NativeMenuItem("Waypoints"); { var waypMenu = new WaypointEditor(actor); BindMenuToItem(waypMenu.CreateWaypointMenu, wpyItem); Vector3 camPos = new Vector3(); Rotator camRot = new Rotator(); wpyItem.Activated += (sender, selectedItem) => { camPos = Editor.MainCamera.Position; camRot = Editor.MainCamera.Rotation; waypMenu.Enter(); Editor.WaypointEditor = waypMenu; }; waypMenu.OnEditorExit += (sender, args) => { Editor.WaypointEditor = null; Editor.DisableControlEnabling = true; if (camPos != new Vector3()) { Editor.MainCamera.Position = camPos; Editor.MainCamera.Rotation = camRot; } }; } if (actor.Behaviour != 4) // Follow Waypoints wpyItem.Enabled = false; var item = new MenuListItem("Behaviour", StaticData.StaticLists.Behaviour, actor.Behaviour); item.OnListChanged += (sender, index) => { actor.Behaviour = index; wpyItem.Enabled = index == 4; }; AddItem(item); AddItem(wpyItem); } #endregion #region FailOnDeath { var item = new MenuCheckboxItem("Mission Fail On Death", actor.FailMissionOnDeath); item.CheckboxEvent += (sender, @checked) => { actor.FailMissionOnDeath = @checked; }; AddItem(item); } #endregion RefreshIndex(); }
// Делает бэкап настроек // После этого действия можно менять настройки и в случае необходимости восстановить их через RestoreBackup() public void MakeBackup() { m_dataBackup = m_data.Clone() as SerializableData; }
public void BuildFor(SerializableData.Objectives.SerializableVehicleObjective actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new MenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.Alert); MenuItems[2].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[2].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Objective Name { var item = new NativeMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(NativeMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new MenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Passengers { var item = new NativeMenuItem("Occupants"); AddItem(item); if (((Vehicle)actor.GetVehicle()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)actor.GetVehicle()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new NativeMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType<SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new NativeMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion #region Show Health Bar { var item = new MenuCheckboxItem("Show Healthbar", actor.ShowHealthBar); AddItem(item); item.CheckboxEvent += (sender, @checked) => { actor.ShowHealthBar = @checked; MenuItems[6].Enabled = @checked; }; } #endregion #region Bar Name { var item = new NativeMenuItem("Healthbar Label"); AddItem(item); if (!actor.ShowHealthBar) item.Enabled = false; if (string.IsNullOrEmpty(actor.Name) && actor.ShowHealthBar) actor.Name = "HEALTH"; if (actor.ShowHealthBar) item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { actor.Name = "HEALTH"; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } title = Regex.Replace(title, "-=", "~"); actor.Name = title; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; } #endregion #region Objective Type { var item = new MenuListItem("Objective Type", StaticData.StaticLists.ObjectiveTypeList, actor.ObjectiveType); item.OnListChanged += (sender, index) => { actor.ObjectiveType = index; }; AddItem(item); } #endregion RefreshIndex(); }
public Preferences(string fileName) { m_fileName = fileName; if (File.Exists(m_fileName)) { // Если файл с настройками существует - прочитаем его в m_data XmlSerializer serializer = new XmlSerializer(typeof(SerializableData)); using (Stream fileStream = new FileStream(m_fileName, FileMode.Open)) { m_data = serializer.Deserialize(fileStream) as SerializableData; } // Убираем с прочитанных данных косяки, которые мог внести туда пользователь вручную // В случае если были косяки, пересохраняем исправленные данные обратно в файл if (m_data.Validate()) Save(false); } else { // Если файла с настройками не существует, создадим его и запишем в него найстройки по умолчанию (которые задаются в конструкторе SerializableData) m_data = SerializableData.CreateDefault(); Save(false); } }
public void BuildFor(SerializableData.Objectives.SerializableMarker actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new MenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.Alert); MenuItems[2].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[2].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Objective Name { var item = new NativeMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(NativeMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Color { var col = Color.FromArgb(actor.Alpha, (int) actor.Color.X, (int) actor.Color.Y, (int) actor.Color.Z).ToKnownColor(); var idx = StaticData.StaticLists.KnownColors.IndexOf(col); var item = new MenuListItem("Color", StaticData.StaticLists.KnownColors, idx == -1 ? 0 : idx); item.OnListChanged += (sender, index) => { var newCol = (Color)Color.FromKnownColor(StaticData.StaticLists.KnownColors[index]); actor.Alpha = newCol.A; actor.Color = new Vector3(newCol.R, newCol.G, newCol.B); }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission RefreshIndex(); }
public void BuildFor(SerializableData.Objectives.SerializablePickupObjective actor) { Clear(); #region SpawnAfter { var item = new UIMenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new UIMenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[2].SetRightBadge(UIMenuItem.BadgeStyle.Alert); MenuItems[2].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[2].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[2].SetRightBadge(UIMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Objective Name { var item = new UIMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) item.SetRightBadge(UIMenuItem.BadgeStyle.Alert); else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(this); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(UIMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(UIMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Weapons { var listIndex = actor.Ammo == 0 ? StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) 9999) : StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) actor.Ammo); var item = new UIMenuListItem("Ammo Count", StaticData.StaticLists.AmmoChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem) sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Ammo = newAmmo; }; AddItem(item); } #endregion #region Respawn { var item = new UIMenuCheckboxItem("Respawn", actor.Respawn); item.CheckboxEvent += (sender, @checked) => { actor.Respawn = @checked; }; AddItem(item); } #endregion RefreshIndex(); }
private void Save(string filename, SerializableData.Level level) { var serializer = new XmlSerializer(typeof(SerializableData.Level)); var encoding = Encoding.GetEncoding("UTF-8"); using (var stream = new StreamWriter(filename, false, encoding)) { serializer.Serialize(stream, level); } }
public void BuildFor(SerializableData.SerializableVehicle veh) { Clear(); #region SpawnAfter { var item = new UIMenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, veh.SpawnAfter); item.OnListChanged += (sender, index) => { veh.SpawnAfter = index; }; AddItem(item); } #endregion #region RemoveAfter { var item = new UIMenuListItem("Remove After Objective", StaticData.StaticLists.RemoveAfterList, veh.RemoveAfter); item.OnListChanged += (sender, index) => { veh.RemoveAfter = index; }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission #region Health { var listIndex = veh.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)veh.Health); var item = new UIMenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); veh.Health = newAmmo; }; AddItem(item); } #endregion #region FailOnDeath { var item = new UIMenuCheckboxItem("Mission Fail On Death", veh.FailMissionOnDeath); item.CheckboxEvent += (sender, @checked) => { veh.FailMissionOnDeath = @checked; }; AddItem(item); } #endregion #region Passengers { var item = new UIMenuItem("Occupants"); AddItem(item); if (((Vehicle)veh.GetEntity()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)veh.GetEntity()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new UIMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType<SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new UIMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion RefreshIndex(); }
public void BuildFor(SerializableData.Objectives.SerializableActorObjective actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new MenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[4].SetRightBadge(NativeMenuItem.BadgeStyle.Alert); MenuItems[4].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[4].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[4].SetRightBadge(NativeMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Weapons { var item = new NativeMenuItem("Weapon"); var dict = StaticData.WeaponsData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray()); var menu = new CategorySelectionMenu(dict, "Weapon", true, "SELECT WEAPON"); menu.Build("Melee"); Children.Add(menu); AddItem(item); BindMenuToItem(menu, item); menu.SelectionChanged += (sender, eventargs) => { GameFiber.StartNew(delegate { var hash = StaticData.WeaponsData.Database[menu.CurrentSelectedCategory].First( tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetPed().Handle.Value, true); actor.GetPed().GiveNewWeapon(hash, actor.WeaponAmmo == 0 ? 9999 : actor.WeaponAmmo, true); actor.WeaponHash = hash; }); }; } { var listIndex = actor.WeaponAmmo == 0 ? StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) 9999) : StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) actor.WeaponAmmo); var item = new MenuListItem("Ammo Count", StaticData.StaticLists.AmmoChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem) sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.WeaponAmmo = newAmmo; if(actor.WeaponHash == 0) return; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetPed().Handle.Value, true); ((Ped)actor.GetPed()).GiveNewWeapon(actor.WeaponHash, newAmmo, true); }; AddItem(item); } #endregion #region Objective Name { var item = new NativeMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(NativeMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)200) : StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new MenuListItem("Health", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Armor { var listIndex = StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Armor); var item = new MenuListItem("Armor", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Armor = newAmmo; }; AddItem(item); } #endregion #region Accuracy { var listIndex = StaticData.StaticLists.AccuracyList.FindIndex(n => n == (dynamic)actor.Accuracy); var item = new MenuListItem("Accuracy", StaticData.StaticLists.AccuracyList, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Accuracy = newAmmo; }; AddItem(item); } #endregion #region Relationship { var item = new MenuListItem("Relationship", StaticData.StaticLists.RelationshipGroups, actor.RelationshipGroup); item.OnListChanged += (sender, index) => { actor.RelationshipGroup = index; }; AddItem(item); } #endregion #region Behaviour { var wpyItem = new NativeMenuItem("Waypoints"); { var waypMenu = new WaypointEditor(actor); BindMenuToItem(waypMenu.CreateWaypointMenu, wpyItem); Vector3 camPos = new Vector3(); Rotator camRot = new Rotator(); wpyItem.Activated += (sender, selectedItem) => { camPos = Editor.MainCamera.Position; camRot = Editor.MainCamera.Rotation; waypMenu.Enter(); Editor.WaypointEditor = waypMenu; }; waypMenu.OnEditorExit += (sender, args) => { Editor.WaypointEditor = null; Editor.DisableControlEnabling = true; if (camPos != new Vector3()) { Editor.MainCamera.Position = camPos; Editor.MainCamera.Rotation = camRot; } }; } if (actor.Behaviour != 4) // Follow Waypoints wpyItem.Enabled = false; var item = new MenuListItem("Behaviour", StaticData.StaticLists.Behaviour, actor.Behaviour); item.OnListChanged += (sender, index) => { actor.Behaviour = index; wpyItem.Enabled = index == 4; }; AddItem(item); AddItem(wpyItem); } #endregion #region Show Health Bar { var item = new MenuCheckboxItem("Show Healthbar", actor.ShowHealthBar); AddItem(item); item.CheckboxEvent += (sender, @checked) => { actor.ShowHealthBar = @checked; MenuItems[12].Enabled = @checked; }; } #endregion #region Bar Name { var item = new NativeMenuItem("Healthbar Label"); AddItem(item); if (!actor.ShowHealthBar) item.Enabled = false; if (string.IsNullOrEmpty(actor.Name) && actor.ShowHealthBar) actor.Name = "HEALTH"; if(actor.ShowHealthBar) item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { actor.Name = "HEALTH"; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } title = Regex.Replace(title, "-=", "~"); actor.Name = title; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; } #endregion RefreshIndex(); }
public void BuildFor(SerializableData.SerializableSpawnpoint actor) { Clear(); #region SpawnAfter { var item = new UIMenuListItem("Spawn Before Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region Weapons { var item = new UIMenuItem("Weapon"); var dict = StaticData.WeaponsData.Database.ToDictionary(k => k.Key, k => k.Value.Select(x => x.Item1).ToArray()); var menu = new CategorySelectionMenu(dict, "Weapon", true, "SELECT WEAPON"); menu.Build("Melee"); Children.Add(menu); AddItem(item); BindMenuToItem(menu, item); menu.SelectionChanged += (sender, eventargs) => { GameFiber.StartNew(delegate { var hash = StaticData.WeaponsData.Database[menu.CurrentSelectedCategory].First( tuple => tuple.Item1 == menu.CurrentSelectedItem).Item2; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetEntity().Handle.Value, true); ((Ped) actor.GetEntity()).Inventory.GiveNewWeapon(hash, (short)(actor.WeaponAmmo == 0 ? 9999 : actor.WeaponAmmo), true); actor.WeaponHash = hash; }); }; } { var listIndex = actor.WeaponAmmo == 0 ? StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) 9999) : StaticData.StaticLists.AmmoChoses.FindIndex(n => n == (dynamic) actor.WeaponAmmo); var item = new UIMenuListItem("Ammo Count", StaticData.StaticLists.AmmoChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem) sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.WeaponAmmo = newAmmo; if(actor.WeaponHash == 0) return; NativeFunction.CallByName<uint>("REMOVE_ALL_PED_WEAPONS", actor.GetEntity().Handle.Value, true); ((Ped)actor.GetEntity()).Inventory.GiveNewWeapon(actor.WeaponHash, (short)newAmmo, true); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)200) : StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new UIMenuListItem("Health", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Armor { var listIndex = StaticData.StaticLists.HealthArmorChoses.FindIndex(n => n == (dynamic)actor.Armor); var item = new UIMenuListItem("Armor", StaticData.StaticLists.HealthArmorChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Armor = newAmmo; }; AddItem(item); } #endregion RefreshIndex(); }