Пример #1
0
        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;
                    }
                }
            }
        }
Пример #2
0
        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);
        }