public void AddPresetCar(AaronPresetCar presetCar) { if (_presetCars.Contains(presetCar)) { throw new DuplicateNameException("Attempted to add the same preset car twice"); } _presetCars.Add(presetCar); }
/// <summary> /// Converts a <see cref="FEPresetCar"/> to a <see cref="AaronPresetCar"/>. /// </summary> /// <param name="fePresetCar">The <see cref="FEPresetCar"/> to be converted.</param> /// <returns></returns> public static AaronPresetCar ConvertFeToAaronPresetCar(FEPresetCar fePresetCar) { AaronPresetCar aaronPresetCar = new AaronPresetCar(); aaronPresetCar.CarName = fePresetCar.CarCollectionName; aaronPresetCar.PresetName = fePresetCar.PresetName; aaronPresetCar.PhysicsProfileHash = ~(fePresetCar.VehicleKey * 0x0CF96D9C3); aaronPresetCar.Paints = new SynchronizedObservableCollection <AaronPresetCarPaint>(); aaronPresetCar.PerformanceParts = new SynchronizedObservableCollection <AaronPresetCarPerfPart>(); aaronPresetCar.SkillModParts = new SynchronizedObservableCollection <AaronPresetCarSkill>(); aaronPresetCar.Vinyls = new SynchronizedObservableCollection <AaronPresetCarVinyl>(); aaronPresetCar.VisualParts = new SynchronizedObservableCollection <AaronPresetCarVisualPart>(); aaronPresetCar.SkillModSlotCount = fePresetCar.SkillModSlotCount; for (int i = 0; i < fePresetCar.PaintsSet.Length; i++) { aaronPresetCar.Paints.Add(fePresetCar.PaintsSet[i] ? convertFePaintToAaronPaint(fePresetCar.Paints[i]) : new AaronPresetCarPaint()); } for (int i = 0; i < fePresetCar.PerformanceParts.Length && fePresetCar.PerformanceParts[i] != 0; i++) { aaronPresetCar.PerformanceParts.Add(new AaronPresetCarPerfPart { Hash = fePresetCar.PerformanceParts[i] }); } for (int i = 0; i < fePresetCar.SkillModHashes.Length && fePresetCar.SkillModHashes[i] != 0; i++) { aaronPresetCar.SkillModParts.Add(new AaronPresetCarSkill { Hash = fePresetCar.SkillModHashes[i], IsFixed = fePresetCar.SkillModsFixed[i] }); } for (var index = 0; index < fePresetCar.VisualPartHashes.Length; index++) { var visualPartHash = fePresetCar.VisualPartHashes[index]; if (visualPartHash != 0xFFFFFFFF) { aaronPresetCar.VisualParts.Add(new AaronPresetCarVisualPart { PartHash = visualPartHash, SlotHash = indexToSlotDictionary[index] }); } } foreach (var fePresetVinyl in fePresetCar.Vinyls) { if (fePresetVinyl.Hash == 0) { break; } aaronPresetCar.Vinyls.Add(convertFeVinylToAaronVinyl(fePresetVinyl)); } return(aaronPresetCar); }
public static AaronPresetCar ConvertServerXMLToAaronPreset(OwnedCarTrans ownedCarTrans) { AaronPresetCar aaronPresetCar = new AaronPresetCar(); aaronPresetCar.CarName = ownedCarTrans.CustomCar.Name; aaronPresetCar.Paints = new SynchronizedObservableCollection <AaronPresetCarPaint>(); aaronPresetCar.PerformanceParts = new SynchronizedObservableCollection <AaronPresetCarPerfPart>(); aaronPresetCar.SkillModParts = new SynchronizedObservableCollection <AaronPresetCarSkill>(); aaronPresetCar.Vinyls = new SynchronizedObservableCollection <AaronPresetCarVinyl>(); aaronPresetCar.VisualParts = new SynchronizedObservableCollection <AaronPresetCarVisualPart>(); aaronPresetCar.SkillModSlotCount = (uint)ownedCarTrans.CustomCar.SkillModSlotCount; aaronPresetCar.PhysicsProfileHash = unchecked ((uint)ownedCarTrans.CustomCar.PhysicsProfileHash); for (int i = 0; i < 8; i++) { aaronPresetCar.Paints.Add(new AaronPresetCarPaint()); } for (int i = 0; i < 31; i++) { aaronPresetCar.Vinyls.Add(new AaronPresetCarVinyl()); } foreach (var paint in ownedCarTrans.CustomCar.Paints) { aaronPresetCar.Paints[paint.Slot] = convertXMLPaintToAaron(paint); } foreach (var skillModPart in ownedCarTrans.CustomCar.SkillModParts) { aaronPresetCar.SkillModParts.Add(new AaronPresetCarSkill { Hash = unchecked ((uint)skillModPart.SkillModPartAttribHash), IsFixed = skillModPart.IsFixed }); } foreach (var performancePart in ownedCarTrans.CustomCar.PerformanceParts) { aaronPresetCar.PerformanceParts.Add(new AaronPresetCarPerfPart { Hash = unchecked ((uint)performancePart.PerformancePartAttribHash) }); } foreach (var customCarVisualPart in ownedCarTrans.CustomCar.VisualParts) { aaronPresetCar.VisualParts.Add(new AaronPresetCarVisualPart { PartHash = unchecked ((uint)customCarVisualPart.PartHash), SlotHash = unchecked ((uint)customCarVisualPart.SlotHash) }); } foreach (var customVinyl in ownedCarTrans.CustomCar.Vinyls) { aaronPresetCar.Vinyls[customVinyl.Layer] = convertXMLVinylToAaron(customVinyl); } return(aaronPresetCar); }
/// <summary> /// Converts a <see cref="AaronPresetCar"/> to a <see cref="OwnedCarTrans"/> /// </summary> /// <param name="aaronPresetCar"></param> /// <returns></returns> public static OwnedCarTrans ConvertAaronPresetToServerXML(AaronPresetCar aaronPresetCar) { OwnedCarTrans ownedCarTrans = new OwnedCarTrans(); ownedCarTrans.ExpirationDate = DateTime.FromBinary(0); ownedCarTrans.OwnershipType = "PresetCar"; ownedCarTrans.Id = 0; ownedCarTrans.Durability = 0; ownedCarTrans.CustomCar = new CustomCarTrans(); // setup customcar ownedCarTrans.CustomCar.Name = aaronPresetCar.CarName; ownedCarTrans.CustomCar.BaseCar = unchecked ((int)Hashing.BinHash(aaronPresetCar.CarName.ToUpperInvariant())); ownedCarTrans.CustomCar.IsPreset = true; ownedCarTrans.CustomCar.PhysicsProfileHash = unchecked ((int)aaronPresetCar.PhysicsProfileHash); ownedCarTrans.CustomCar.Paints = new List <CustomPaintTrans>(); ownedCarTrans.CustomCar.PerformanceParts = new List <PerformancePartTrans>(); ownedCarTrans.CustomCar.SkillModParts = new List <SkillModPartTrans>(); ownedCarTrans.CustomCar.Vinyls = new List <CustomVinylTrans>(); ownedCarTrans.CustomCar.VisualParts = new List <VisualPartTrans>(); ownedCarTrans.CustomCar.SkillModSlotCount = (int)aaronPresetCar.SkillModSlotCount; for (var index = 0; index < aaronPresetCar.Paints.Count; index++) { var aaronPresetCarPaint = aaronPresetCar.Paints[index]; if (aaronPresetCarPaint == null) { continue; } var paint = convertAaronPaintToXML(aaronPresetCarPaint, index); ownedCarTrans.CustomCar.Paints.Add(paint); } foreach (var aaronPresetCarPart in aaronPresetCar.SkillModParts) { ownedCarTrans.CustomCar.SkillModParts.Add(new SkillModPartTrans { IsFixed = false, SkillModPartAttribHash = unchecked ((int)aaronPresetCarPart.Hash) }); } foreach (var aaronPresetCarVisualPart in aaronPresetCar.VisualParts) { ownedCarTrans.CustomCar.VisualParts.Add(new VisualPartTrans { PartHash = unchecked ((int)aaronPresetCarVisualPart.PartHash), SlotHash = unchecked ((int)aaronPresetCarVisualPart.SlotHash), }); } foreach (var aaronPresetCarPerfPart in aaronPresetCar.PerformanceParts) { ownedCarTrans.CustomCar.PerformanceParts.Add(new PerformancePartTrans { PerformancePartAttribHash = unchecked ((int)aaronPresetCarPerfPart.Hash) }); } for (var index = 0; index < aaronPresetCar.Vinyls.Count; index++) { var aaronPresetCarVinyl = aaronPresetCar.Vinyls[index]; if (aaronPresetCarVinyl == null) { continue; } var convertAaronVinylToXml = convertAaronVinylToXML(aaronPresetCarVinyl); convertAaronVinylToXml.Layer = index; ownedCarTrans.CustomCar.Vinyls.Add(convertAaronVinylToXml); } return(ownedCarTrans); }
public static FEPresetCar ConvertAaronPresetToFEPreset(AaronPresetCar aaronPresetCar) { FEPresetCar presetCar = new FEPresetCar(); presetCar.InheritedFields = new byte[8]; presetCar.CarCollectionName = aaronPresetCar.CarName; presetCar.PresetName = aaronPresetCar.PresetName; presetCar.VehicleKey = ~aaronPresetCar.PhysicsProfileHash * 0x57A5DEEB; presetCar.InverseThing = 0xA85A2115; presetCar.VisualPartHashes = new uint[123]; presetCar.PaintsSet = new bool[8]; presetCar.Paints = new FEPresetPaint[8]; presetCar.Blank = new byte[0x64]; presetCar.PerformanceParts = new uint[6]; presetCar.SkillModSlotCount = aaronPresetCar.SkillModSlotCount; presetCar.SkillModHashes = new uint[6]; presetCar.SkillModsFixed = new bool[8]; presetCar.Vinyls = new FEPresetVinyl[31]; presetCar.Blank4 = new byte[8]; for (int i = 0; i < 123; i++) { presetCar.VisualPartHashes[i] = 0xFFFFFFFF; } foreach (var aaronPresetCarVisualPart in aaronPresetCar.VisualParts) { presetCar.VisualPartHashes[slotToIndexDictionary[aaronPresetCarVisualPart.SlotHash]] = aaronPresetCarVisualPart.PartHash; } for (var index = 0; index < aaronPresetCar.Paints.Count; index++) { var aaronPresetCarPaint = aaronPresetCar.Paints[index]; if (aaronPresetCarPaint == null || aaronPresetCarPaint.Group == 0) { continue; } presetCar.PaintsSet[index] = true; } for (int i = 0; i < aaronPresetCar.Paints.Count; i++) { if (!presetCar.PaintsSet[i]) { presetCar.Paints[i] = new FEPresetPaint(); } else { presetCar.Paints[i] = new FEPresetPaint { Group = aaronPresetCar.Paints[i].Group, Hue = aaronPresetCar.Paints[i].Hue, Saturation = aaronPresetCar.Paints[i].Saturation, Variance = aaronPresetCar.Paints[i].Variance, }; } } for (var index = 0; index < aaronPresetCar.PerformanceParts.Count; index++) { var aaronPresetCarPerfPart = aaronPresetCar.PerformanceParts[index]; presetCar.PerformanceParts[index] = aaronPresetCarPerfPart.Hash; } for (var index = 0; index < aaronPresetCar.SkillModParts.Count; index++) { var aaronPresetCarSkill = aaronPresetCar.SkillModParts[index]; presetCar.SkillModHashes[index] = aaronPresetCarSkill.Hash; presetCar.SkillModsFixed[index] = aaronPresetCarSkill.IsFixed; } for (var index = 0; index < aaronPresetCar.Vinyls.Count; index++) { var aaronPresetCarVinyl = aaronPresetCar.Vinyls[index]; if (aaronPresetCarVinyl.Hash == 0) { presetCar.Vinyls[index] = new FEPresetVinyl(); } else { presetCar.Vinyls[index] = convertAaronVinylToFE(aaronPresetCarVinyl); } } return(presetCar); }