public ObjectDetails ImportTemplate(int lot, string objectName) { var template = ObjectInterface.Import(lot, out var error); if (template == null) { Debug.LogError(error); } var zoneObject = new GameObject(objectName); var objectDetails = zoneObject.AddOrGetComponent <ObjectDetails>(); objectDetails.Lot = lot; zoneObject.transform.parent = Scene.transform; template.transform.parent = zoneObject.transform; return(objectDetails); }
public static GameObject Import(string workingFile) { const float scale = 3.125f; using var stream = File.OpenRead(workingFile); using var reader = new BitReader(stream); var zone = new LuzFile(); zone.Deserialize(reader); return(null); var zoneInstance = new GameObject($"Zone {Path.GetFileName(workingFile)}"); var zoneDetails = zoneInstance.AddOrGetComponent <ZoneDetails>(); zoneDetails.ZoneName = Path.GetFileName(workingFile); zoneDetails.ZoneId = zone.WorldId; var spawnPoint = new GameObject("Zone Spawnpoint"); spawnPoint.transform.parent = zoneInstance.transform; spawnPoint.transform.position = new Vector3(zone.SpawnPoint.X, zone.SpawnPoint.Y, zone.SpawnPoint.Z); spawnPoint.transform.rotation = new Quaternion(zone.SpawnRotation.X, zone.SpawnRotation.Y, zone.SpawnRotation.Z, zone.SpawnRotation.W); zoneDetails.SpawnPoint = spawnPoint.transform; var sourceDir = Path.GetDirectoryName(workingFile) ?? WorkspaceControl.CurrentWorkspace.AssetPath; var terrain = TerrainInterface.Import(Path.Combine( sourceDir, zone.TerrainFileName) ); terrain.transform.parent = zoneInstance.transform; foreach (var sceneInfo in zone.Scenes) { var scenePath = Path.Combine(sourceDir, sceneInfo.FileName); var sceneInstance = new GameObject($"Scene {sceneInfo.SceneName} ({sceneInfo.SceneId}, {sceneInfo.LayerId})"); var sceneDetails = sceneInstance.AddOrGetComponent <SceneDetails>(); sceneInstance.transform.parent = zoneInstance.transform; using var lvlStream = File.OpenRead(scenePath); using var lvlReader = new BitReader(lvlStream); var lvl = new LvlFile(); lvl.Deserialize(lvlReader); sceneDetails.SceneName = sceneInfo.SceneName; sceneDetails.SceneLayer = sceneInfo.LayerId; sceneDetails.SkyBox = lvl.LevelSkyConfig == null ? sceneDetails.SkyBox : lvl.LevelSkyConfig.Skybox; if (lvl.LevelObjects == null) { continue; } foreach (var template in lvl.LevelObjects.Templates) { GameObject lwoObject; try { lwoObject = ObjectInterface.Import(template.Lot, out var error); if (lwoObject == null) { Debug.LogError(error); continue; } } catch (Exception e) { Debug.LogError(e); continue; } lwoObject.transform.parent = sceneInstance.transform; lwoObject.transform.position = new Vector3(template.Position.X, template.Position.Y, template.Position.Z); lwoObject.transform.rotation = new Quaternion(template.Rotation.X, template.Rotation.Y, template.Rotation.Z, template.Rotation.W); } } return(zoneInstance); }