/// <summary> /// Applied before OnCleanUp runs. /// </summary> internal static void Prefix(FallingWater __instance) { // Destroy the mesh renderer game object FallingWaterMeshRenderer.DestroyInstance(); // Destroy the mesh UnityEngine.Object.Destroy(__instance.mesh); __instance.mesh = null; }
/// <summary> /// Destroys the prioritizable mesh renderer. /// </summary> public static void DestroyInstance() { var inst = Instance; if (inst != null) { Util.KDestroyGameObject(inst.gameObject); } Instance = null; }
/// <summary> /// Creates a mesh renderer object for falling water. /// </summary> /// <param name="instance">The falling water object to render.</param> internal static void CreateInstance(FallingWater instance) { var game = Game.Instance; if (game == null) { throw new ArgumentNullException(nameof(Game.Instance)); } DestroyInstance(); var go = instance.mesh.CreateMeshRenderer("Falling Water", LayerMask.NameToLayer( "Water")); var t = go.transform; t.SetParent(game.transform); t.SetPositionAndRotation(Vector3.zero, Quaternion.identity); // Set up the mesh with the right material if (go.TryGetComponent(out MeshRenderer renderer)) { renderer.material = instance.material; renderer.SetPropertyBlock(instance.propertyBlock); } Instance = go.AddOrGet <FallingWaterMeshRenderer>(); }
/// <summary> /// Applied after OnSpawn runs. /// </summary> internal static void Postfix(FallingWater __instance) { FallingWaterMeshRenderer.CreateInstance(__instance); }