public override GameObject LoadObject(string path, Mission mission) { GameObject rootObject = LoadCachedObject(path); if (rootObject == null) { rootObject = new GameObject(path); } else { return(rootObject); } Stream fs; try { fs = GameAPI.instance.fileSystem.GetStreamFromPath(path); } catch { return(null); } using (var reader = new BinaryReader(fs)) { var cacheBINLoader = new MafiaFormats.CacheBINLoader(); cacheBINLoader.ReadCache(reader); fs.Close(); foreach (var obj in cacheBINLoader.objects) { var parentObject = new GameObject(obj.objectName); parentObject.transform.parent = rootObject.transform; foreach (var instance in obj.instances) { var model = GameAPI.instance.modelGenerator.LoadObject(Path.Combine("models", instance.modelName), null); if (model == null) { continue; } model.name = obj.objectName; model.transform.parent = parentObject.transform; model.transform.localPosition = instance.pos; model.transform.localRotation = instance.rot; model.transform.localScale = instance.scale; } } } StoreChachedObject(path, rootObject); return(rootObject); }
void UpdateObjectList(CityDefinition def, MafiaFormats.CacheBINLoader data) { def.data.objects.Clear(); foreach (Transform child in def.transform) { var newObject = new MafiaFormats.CacheBINLoader.Object(); newObject.objectName = child.name; newObject.bounds = new byte[0x4C]; newObject.header = new MafiaFormats.CacheBINLoader.Header(); var instances = new List <MafiaFormats.CacheBINLoader.Instance>(); foreach (Transform inst in child) { var newInstance = new MafiaFormats.CacheBINLoader.Instance(); newInstance.header = new MafiaFormats.CacheBINLoader.Header(); var modelDef = inst.GetComponentInChildren <ModelDefinition>(); if (modelDef != null) { newInstance.modelName = modelDef.modelName; } newInstance.pos = inst.position; newInstance.rot = inst.rotation; newInstance.scale = inst.localScale; newInstance.scale2 = inst.localScale; newInstance.unk0 = 0; newInstance.header.size = (uint)(6 /* header */ + 24 /* scale+scale2 */ + 16 /* rot */ + 12 /* pos */ + 4 /* unk0 */ + 4 /* modelName.Length */ + newInstance.modelName.Length); instances.Add(newInstance); } newObject.header.size = (uint)(sizeof(ushort) + sizeof(uint) * 2 + newObject.objectName.Length + 0x4C + instances.Sum(x => x.header.size)); newObject.instances = instances; data.objects.Add(newObject); } }