Exemplo n.º 1
0
        private Matrix4x4 CalculatePoleMatrix(ushort vehicleID, ref Vehicle vehicleData, Vector3 position, Quaternion rotation, Vector3 swayPosition, VehicleInfo.MeshInfo meshInfo, VehicleInfoBase subInfo, bool assetEditor)
        {
            Vehicle.Flags           flags    = meshInfo.m_vehicleFlagsRequired & (Vehicle.Flags.TakingOff | Vehicle.Flags.Landing);
            VehicleInfo.VehicleType wireType = GetWireType(vehicleData.m_flags, flags);
            float      poleLength            = m_poleLength;
            Quaternion rhs     = Quaternion.Euler(swayPosition.z * 57.29578f, 0f, swayPosition.x * -57.29578f);
            Vector3    a       = (flags != Vehicle.Flags.TakingOff) ? Vector3.left : Vector3.right;
            Vector3    vector  = position + rotation * rhs * (a * m_offsetX + Vector3.back * m_offsetZ + Vector3.up * m_offsetY);
            Vector3    poleEnd = position + rotation * rhs * (a * m_offsetX + Vector3.back * (m_offsetZ + poleLength) + Vector3.up * m_offsetY);
            Vector3    wireAttachmentPosition;

            if (!assetEditor)
            {
                TrolleybusReversePatch.FindWireConnection(vehicleID, ref vehicleData, wireType, poleLength, vector, poleEnd, out wireAttachmentPosition);
            }
            else
            {
                wireAttachmentPosition = position + rotation * rhs * (a * m_offsetX + Vector3.back * (m_offsetZ + poleLength) + Vector3.up * 4.55f);
            }
            Matrix4x4 result = default(Matrix4x4);

            result.SetTRS(vector, Quaternion.LookRotation(vector - wireAttachmentPosition, Vector3.up), Vector3.one);
            return(result);
        }