public CarCreationData(GameObject go, Mesh renderMesh, Mesh colliderMesh, CRBalltreeAsset btAsset, bool isRope) { gameObject_ = go; isRope_ = isRope; positionRotationCanBeUpdated_ = true; renderFingerprint_ = null; colliderFingerprint_ = null; btAsset_ = btAsset; if (renderMesh != null) { renderFingerprint_ = new byte[256]; CarGeometryUtils.CalculateFingerprint(renderMesh, renderFingerprint_); } if (colliderMesh != null) { colliderFingerprint_ = new byte[256]; CarGeometryUtils.CalculateFingerprint(colliderMesh, colliderFingerprint_); } position_ = go.transform.position; rotation_ = go.transform.rotation; lossyScale_ = go.transform.lossyScale; positionCollider_ = Vector3.zero; rotationCollider_ = Quaternion.identity; lossyScaleCollider_ = Vector3.one; Caronte_Fx_Body fxBody = go.GetComponent <Caronte_Fx_Body>(); if (fxBody != null) { colliderType_ = fxBody.ColliderType; hasValidCollider_ = fxBody.HasValidCollider(); if (colliderType_ == Caronte_Fx_Body.EColliderType.CustomGameObject) { GameObject goCollider = fxBody.GetColliderGameObject(); if (goCollider != null) { positionCollider_ = goCollider.transform.position; rotationCollider_ = goCollider.transform.rotation; lossyScaleCollider_ = goCollider.transform.lossyScale; } } } }
private bool AreMeshFingerprintsValid(Caronte_Fx_Body fxBody) { bool isValid = true; if (renderFingerprint_ != null) { Mesh renderMesh; bool isBakedMesh = fxBody.GetRenderMesh(out renderMesh); if (renderMesh == null) { return(false); } CarGeometryUtils.CalculateFingerprint(renderMesh, fingerprintAux_); isValid &= CarGeometryUtils.AreFingerprintsEqual(fingerprintAux_, renderFingerprint_); if (isBakedMesh) { Object.DestroyImmediate(renderMesh); } } if (colliderFingerprint_ != null) { Mesh meshToCheck; bool isBakedMesh = false; if (isRope_) { meshToCheck = fxBody.GetTileMesh(); } else { isBakedMesh = fxBody.GetColliderMesh(out meshToCheck); } if (meshToCheck == null) { return(false); } CarGeometryUtils.CalculateFingerprint(meshToCheck, fingerprintAux_); isValid &= CarGeometryUtils.AreFingerprintsEqual(fingerprintAux_, colliderFingerprint_); if (isBakedMesh) { Object.DestroyImmediate(meshToCheck); } } return(isValid); }