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"; }
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(); } }