private void Display3dModelSelection(int selectedIdx) { if (goModel) { Object.Destroy(goModel); goModel = null; } // Position camera and set model id uint modelId = 0; if (housesForSale == null) { camera.transform.position = new Vector3(0, 12, DaggerfallBankManager.GetShipCameraDist((ShipType)selectedIdx)); modelId = DaggerfallBankManager.GetShipModelId((ShipType)selectedIdx); } else { camera.transform.position = new Vector3(0, 3, -20); BuildingSummary house = housesForSale[selectedIdx]; modelId = house.ModelID; } // Inject custom GameObject if available else create standard mesh game object for the model goModel = MeshReplacement.ImportCustomGameobject(modelId, goBankPurchase.transform, new Matrix4x4()); if (goModel == null) { goModel = GameObjectHelper.CreateDaggerfallMeshGameObject(modelId, goBankPurchase.transform); } goModel.layer = layer; // Apply current climate ClimateBases climateBase = ClimateSwaps.FromAPIClimateBase(GameManager.Instance.PlayerGPS.ClimateSettings.ClimateType); ClimateSeason season = (DaggerfallUnity.WorldTime.Now.SeasonValue == DaggerfallDateTime.Seasons.Winter) ? ClimateSeason.Winter : ClimateSeason.Summer; DaggerfallMesh dfMesh = goModel.GetComponent <DaggerfallMesh>(); dfMesh.SetClimate(climateBase, season, WindowStyle.Day); }
// TEMP: Changes a Daggerfall mesh to another ID // This will eventually be integrated with a future self-assembling mesh prefab public static void ChangeDaggerfallMeshGameObject(DaggerfallMesh dfMesh, uint newModelID) { DaggerfallUnity dfUnity = DaggerfallUnity.Instance; // Get new mesh CachedMaterial[] cachedMaterials; int[] textureKeys; bool hasAnimations; Mesh mesh = dfUnity.MeshReader.GetMesh( dfUnity, newModelID, out cachedMaterials, out textureKeys, out hasAnimations, dfUnity.MeshReader.AddMeshTangents, dfUnity.MeshReader.AddMeshLightmapUVs); // Get mesh filter and renderer components MeshFilter meshFilter = dfMesh.GetComponent <MeshFilter>(); MeshRenderer meshRenderer = dfMesh.GetComponent <MeshRenderer>(); // Update mesh if (mesh && meshFilter && meshRenderer) { meshFilter.sharedMesh = mesh; meshRenderer.sharedMaterials = GetMaterialArray(cachedMaterials); } // Update collider MeshCollider collider = dfMesh.GetComponent <MeshCollider>(); { collider.sharedMesh = mesh; } // Update name dfMesh.name = string.Format("DaggerfallMesh [ID={0}]", newModelID); }
public static GameObject CreateDaggerfallMeshGameObject( uint modelID, Transform parent, bool makeStatic = false) { DaggerfallUnity dfUnity = DaggerfallUnity.Instance; // Create gameobject GameObject go = new GameObject(string.Format("DaggerfallMesh [ID={0}]", modelID)); if (parent) { go.transform.parent = parent; } // Assign components DaggerfallMesh dfMesh = go.AddComponent <DaggerfallMesh>(); MeshFilter meshFilter = go.GetComponent <MeshFilter>(); MeshRenderer meshRenderer = go.GetComponent <MeshRenderer>(); // Assign mesh and materials CachedMaterial[] cachedMaterials; int[] textureKeys; bool hasAnimations; Mesh mesh = dfUnity.MeshReader.GetMesh( dfUnity, modelID, out cachedMaterials, out textureKeys, out hasAnimations, dfUnity.MeshReader.AddMeshTangents, dfUnity.MeshReader.AddMeshLightmapUVs); // Assign animated materials component if required if (hasAnimations) { AssignAnimateTextureComponent(cachedMaterials, go); } // Assign mesh and materials if (mesh) { meshFilter.sharedMesh = mesh; meshRenderer.sharedMaterials = GetMaterialArray(cachedMaterials); dfMesh.SetDefaultTextures(textureKeys); } // Assign collider if (dfUnity.Option_AddMeshColliders) { MeshCollider collider = go.AddComponent <MeshCollider>(); collider.sharedMesh = mesh; } // Assign static if (makeStatic) { go.isStatic = true; } return(go); }
// TEMP: Changes a Daggerfall mesh to another ID // This will eventually be integrated with a future self-assembling mesh prefab public static void ChangeDaggerfallMeshGameObject(DaggerfallMesh dfMesh, uint newModelID) { DaggerfallUnity dfUnity = DaggerfallUnity.Instance; // Get new mesh CachedMaterial[] cachedMaterials; int[] textureKeys; bool hasAnimations; Mesh mesh = dfUnity.MeshReader.GetMesh( dfUnity, newModelID, out cachedMaterials, out textureKeys, out hasAnimations, dfUnity.MeshReader.AddMeshTangents, dfUnity.MeshReader.AddMeshLightmapUVs); // Get mesh filter and renderer components MeshFilter meshFilter = dfMesh.GetComponent<MeshFilter>(); MeshRenderer meshRenderer = dfMesh.GetComponent<MeshRenderer>(); // Update mesh if (mesh && meshFilter && meshRenderer) { meshFilter.sharedMesh = mesh; meshRenderer.sharedMaterials = GetMaterialArray(cachedMaterials); } // Update collider MeshCollider collider = dfMesh.GetComponent<MeshCollider>(); { collider.sharedMesh = mesh; } // Update name dfMesh.name = string.Format("DaggerfallMesh [ID={0}]", newModelID); }
/// <summary> /// Adds a single DaggerfallMesh game object to scene. /// </summary> /// <param name="modelID">ModelID of mesh to add.</param> /// <param name="parent">Optional parent of this object.</param> /// <param name="makeStatic">Flag to set object static flag.</param> /// <param name="useExistingObject">Add mesh to existing object rather than create new.</param> /// <param name="ignoreCollider">Force disable collider.</param> /// <returns>GameObject.</returns> public static GameObject CreateDaggerfallMeshGameObject( uint modelID, Transform parent, bool makeStatic = false, GameObject useExistingObject = null, bool ignoreCollider = false) { DaggerfallUnity dfUnity = DaggerfallUnity.Instance; // Create gameobject string name = string.Format("DaggerfallMesh [ID={0}]", modelID); GameObject go = (useExistingObject != null) ? useExistingObject : new GameObject(); if (parent != null) { go.transform.parent = parent; } go.name = name; // Add DaggerfallMesh component DaggerfallMesh dfMesh = go.GetComponent <DaggerfallMesh>(); if (dfMesh == null) { dfMesh = go.AddComponent <DaggerfallMesh>(); } // Get mesh filter and renderer components MeshFilter meshFilter = go.GetComponent <MeshFilter>(); MeshRenderer meshRenderer = go.GetComponent <MeshRenderer>(); // Assign mesh and materials CachedMaterial[] cachedMaterials; int[] textureKeys; bool hasAnimations; Mesh mesh = dfUnity.MeshReader.GetMesh( dfUnity, modelID, out cachedMaterials, out textureKeys, out hasAnimations, dfUnity.MeshReader.AddMeshTangents, dfUnity.MeshReader.AddMeshLightmapUVs); // Assign animated materials component if required if (hasAnimations) { AssignAnimatedMaterialComponent(cachedMaterials, go); } // Assign mesh and materials if (mesh) { meshFilter.sharedMesh = mesh; meshRenderer.sharedMaterials = GetMaterialArray(cachedMaterials); dfMesh.SetDefaultTextures(textureKeys); } // Assign mesh to collider if (dfUnity.Option_AddMeshColliders && !ignoreCollider) { MeshCollider collider = go.GetComponent <MeshCollider>(); if (collider == null) { collider = go.AddComponent <MeshCollider>(); } collider.sharedMesh = mesh; } // Assign static if (makeStatic) { go.isStatic = true; } return(go); }