Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }