Пример #1
0
        private void Import()
        {
            Debug.Log("Importing...");

            if (!File.Exists(Model))
            {
                NoticeColor = Color.red;
                Notice      = "Failed to find working file";

                return;
            }

            var stream = File.OpenRead(Model);

            var reader = new BitReader(stream);

            var nif = new NiFile();

            nif.Deserialize(reader);

            try
            {
                nif.ReadBlocks(reader);
            }
            catch (Exception e)
            {
                NoticeColor = Color.red;
                Notice      = $"Import error: [{e.GetType().Name}] {e.Message}";

                return;
            }

            ConstructModel(nif);

            NoticeColor = Color.green;
            Notice      = "Successfully imported model";
        }
Пример #2
0
        public override void OnLoad()
        {
            if (_renderGameObject != null)
            {
                DestroyImmediate(_renderGameObject);
            }

            if (_renderAsset != null)
            {
                _renderAsset = _renderAsset.Replace("\\\\", "\\").Replace('\\', '/');

                var renderAsset = _renderAsset;

                FileStream stream    = null;
                string     directory = null;

                if (Path.GetExtension(renderAsset) == ".kfm")
                {
                    foreach (var file in Directory.GetFiles(
                                 WorkspaceControl.CurrentWorkspace.WorkingRoot,
                                 Path.GetFileNameWithoutExtension(renderAsset) + ".nif*",
                                 SearchOption.AllDirectories)
                             )
                    {
                        renderAsset = file;

                        directory = Path.GetDirectoryName(file);

                        Debug.Log($"Found NIF from KFM: {file}");

                        stream = File.OpenRead(renderAsset);

                        break;
                    }
                }
                else if (Path.GetExtension(renderAsset) == ".nif")
                {
                    directory = Path.GetDirectoryName(renderAsset.ToLower());

                    stream = Utilities.OpenAssetStreamRead(renderAsset.ToLower());
                }
                else
                {
                    Debug.Log($"Unknown render file {renderAsset} format");

                    return;
                }

                if (stream == null)
                {
                    throw new FileNotFoundException($"{renderAsset}");
                }

                using var reader = new BitReader(stream);

                var nif = new NiFile();
                nif.Deserialize(reader);
                nif.ReadBlocks(reader);

                var constructor = new ModelConstructor();

                constructor.NifPath      = directory;
                constructor.File         = nif;
                constructor.Name         = Path.GetFileNameWithoutExtension(renderAsset);
                constructor.CreatePrefab = true;
                constructor.PrefabPath   = Path.Combine(
                    WorkspaceControl.CurrentWorkspace.AssetModelsPath,
                    constructor.Name
                    );

                var root = constructor.Construct();

                root.transform.parent = transform;

                root.transform.localPosition = Vector3.zero;

                _renderGameObject = root;

                stream.Dispose();
            }
        }