Exemplo n.º 1
0
        public void ExtraStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle leaderVehicleData)
        {
            // base.ExtraSimulationStep(vehicleID, ref vehicleData);
            uint path = leaderVehicleData.m_path;
            byte pathPositionIndex = leaderVehicleData.m_pathPositionIndex;

            Singleton <PathManager> .instance.m_pathUnits.m_buffer[path].GetPosition(pathPositionIndex >> 1, out PathUnit.Position position);
            ushort segment = position.m_segment;
            byte   lane    = position.m_lane;

            if (segment != 0)
            {
                ushort num = (ushort)((int)(vehicleData.m_flags2 & (Vehicle.Flags2)(-65536)) >> 16);
                byte   b   = (byte)((int)(vehicleData.m_flags2 & (Vehicle.Flags2) 61440) >> 12);
                CalculatePositionAndRotation(vehicleID, ref vehicleData, out Vector3 position2, out Vector3 swayPosition, out Quaternion rotation);
                float      poleLength = m_poleLength;
                Quaternion rhs        = Quaternion.Euler(swayPosition.z * 57.29578f, 0f, swayPosition.x * -57.29578f);
                Vector3    polePivot  = position2 + rotation * rhs * (Vector3.left * m_offsetX + Vector3.back * m_offsetZ + Vector3.up * m_offsetY);
                Vector3    polePivot2 = position2 + rotation * rhs * (Vector3.right * m_offsetX + Vector3.back * m_offsetZ + Vector3.up * m_offsetY);
                Vector3    poleEnd    = position2 + rotation * rhs * (Vector3.left * m_offsetX + Vector3.back * (m_offsetZ + poleLength) + Vector3.up * m_offsetY);
                Vector3    poleEnd2   = position2 + rotation * rhs * (Vector3.right * m_offsetX + Vector3.back * (m_offsetZ + poleLength) + Vector3.up * m_offsetY);
                if (TrolleybusReversePatch.FindSegmentWireConnection(segment, lane, VehicleInfo.VehicleType.TrolleybusLeftPole, polePivot, poleEnd, poleLength, out Vector3 connectionPoint) && TrolleybusReversePatch.FindSegmentWireConnection(segment, lane, VehicleInfo.VehicleType.TrolleybusRightPole, polePivot2, poleEnd2, poleLength, out connectionPoint))
                {
                    pathPositionIndex = leaderVehicleData.m_pathPositionIndex;
                    Singleton <PathManager> .instance.m_pathUnits.m_buffer[path].GetNextPosition(pathPositionIndex >> 1, out PathUnit.Position position3);
                    num = position3.m_segment;
                    b   = position3.m_lane;
                    CachePathData(vehicleID, ref vehicleData, segment, lane, num, b);
                }
            }
        }