// 27 Slicer
// Copyright 2021 Deftly Games
// https://slicer.deftly.games/
using Slicer.Core;
using System;
using UnityEngine;
namespace Slicer
{
///
/// MeshSlicerManagedMeshColliderDetails is used to keep track of information about a single MeshCollider that uses a mesh that is already being sliced by a .
///
[Serializable]
public class MeshSlicerManagedMeshColliderDetails : ColliderDetails
{
///
/// The MeshCollider on the GameObject being tracked by this details object.
///
[SerializeReference]
public MeshCollider MeshCollider;
///
/// The MeshDetails of the mesh that is already being sliced by a .
///
[SerializeReference]
public MeshDetails MeshSlicerDetails;
///
/// The previous hash of the Verts after slicing.
///
///
/// This is used to determine if the has just updated the verts of the tracked Mesh.
///
[NonSerialized]
public Hash128 LastVertHash;
public void ResetHashes()
{
LastVertHash = HashUtility.CalculateHash(Time.frameCount * 7);
}
///
public override void DisableSlicing()
{
if (MeshCollider != null && MeshSlicerDetails != null && MeshCollider.sharedMesh == MeshSlicerDetails.SlicedMesh)
{
MeshCollider.sharedMesh = MeshSlicerDetails.OriginalSharedMesh;
}
}
///
public override void EnableSlicing()
{
if (MeshCollider != null && MeshSlicerDetails != null && MeshSlicerDetails.SlicedMesh != null)
{
MeshCollider.sharedMesh = MeshSlicerDetails.SlicedMesh;
}
}
///
public override void FinalizeSlicing()
{
EnableSlicing();
}
///
public override Hash128 CalculateHash()
{
var hash = base.CalculateHash();
if (MeshSlicerDetails != null)
{
var tempHash = MeshSlicerDetails.CalculateHash();
HashUtility.AppendHash(tempHash, ref hash);
}
if (MeshCollider != null)
{
var enabledColliderHash = HashUtility.CalculateHash(MeshCollider.enabled, 5);
HashUtility.AppendHash(enabledColliderHash, ref hash);
if (MeshCollider.sharedMesh != null)
{
var tempHash = HashUtility.CalculateHash(MeshCollider.sharedMesh);
HashUtility.AppendHash(tempHash, ref hash);
}
}
return hash;
}
///
public override void Destroy()
{
// Nothing to destroy, let the Mesh Slicer manage this
}
}
}