Beispiel #1
0
        private void RenderDescriptor(ref Vehicle v, RenderManager.CameraInfo cameraInfo, ushort vehicleId, Vector3 position, Matrix4x4 vehicleMatrix, ref LayoutDescriptorVehicleXml targetDescriptor)
        {
            var instance = VehicleManager.instance;

            for (int j = 0; j < targetDescriptor.TextDescriptors.Length; j++)
            {
                ref BoardTextDescriptorGeneralXml descriptor = ref targetDescriptor.TextDescriptors[j];
                if (descriptor != null && cameraInfo.CheckRenderDistance(position, 200 * descriptor.m_textScale * (descriptor.IlluminationConfig?.IlluminationType == FontStashSharp.MaterialType.OPAQUE ? 1 : 2)))
                {
                    MaterialPropertyBlock properties = instance.m_materialBlock;
                    properties.Clear();
                    var flags = v.m_flags;
                    if ((flags & Vehicle.Flags.Inverted) != 0)
                    {
                        flags ^= Vehicle.Flags.Reversed;
                    }
                    ref Vehicle vehicle = ref instance.m_vehicles.m_buffer[vehicleId];
                    WTSDynamicTextRenderingRules.RenderTextMesh(vehicleId, 0, 0, targetDescriptor, vehicleMatrix, null, ref targetDescriptor.TextDescriptors[j], properties, (int)flags, vehicle.Info.m_vehicleAI.GetColor(vehicleId, ref vehicle, InfoManager.InfoMode.None), v.Info, ref VehicleManager.instance.m_drawCallData.m_batchedCalls);
                }
        protected override Matrix4x4 RenderMesh(PropInfo info, BoardTextDescriptorGeneralXml[] descriptor, Vector3 position, Quaternion rotation, Vector3 scale, Matrix4x4 sourceMatrix, out Color targetColor, ref int defaultCallsCounter)
        {
            var                   propMatrix    = Matrix4x4.TRS(position, rotation, scale) * sourceMatrix;
            PropManager           instance      = Singleton <PropManager> .instance;
            MaterialPropertyBlock materialBlock = instance.m_materialBlock;

            materialBlock.Clear();
            targetColor = WTSDynamicTextRenderingRules.GetPropColor(0, 0, 0, m_defaultInstance, null, out bool colorFound);
            materialBlock.SetColor(instance.ID_Color, colorFound ? targetColor : Color.white);

            PropManager propManager = instance;

            propManager.m_drawCallData.m_batchedCalls += 1;

            if (info.m_rollLocation != null)
            {
                GetMaterial(info).SetVectorArray(instance.ID_RollLocation, info.m_rollLocation);
                GetMaterial(info).SetVectorArray(instance.ID_RollParams, info.m_rollParams);
            }
            defaultCallsCounter++;
            Graphics.DrawMesh(GetMesh(info), propMatrix, GetMaterial(info), info.m_prefabDataLayer, m_camera, 0, materialBlock, false, false, false);
            return(propMatrix);
        }
Beispiel #3
0
        internal bool CalculateGroupData(ushort nodeID, int layer, ref int vertexCount, ref int triangleCount, ref int objectCount, ref RenderGroup.VertexArrays vertexArrays)
        {
            var result = false;

            for (int y = 0; y < Data.BoardsContainers.GetLength(1); y++)
            {
                for (int z = 0; z < Data.BoardsContainers.GetLength(2); z++)
                {
                    ref CacheRoadNodeItem item = ref Data.BoardsContainers[nodeID, y, z];
                    if (item?.m_renderPlate ?? false)
                    {
                        ref BoardInstanceRoadNodeXml targetDescriptor = ref item.m_currentDescriptor;
                        if (targetDescriptor?.Descriptor?.PropName == null)
                        {
                            continue;
                        }

                        WTSDynamicTextRenderingRules.GetColorForRule(nodeID, y, z, targetDescriptor.Descriptor, targetDescriptor, out bool rendered);
                        if (rendered && !(item.m_currentDescriptor.Descriptor?.CachedProp is null))
                        {
                            result = PropInstance.CalculateGroupData(item.m_currentDescriptor.Descriptor.CachedProp, layer, ref vertexCount, ref triangleCount, ref objectCount, ref vertexArrays);
                        }
                    }
                }
Beispiel #4
0
        protected override Matrix4x4 RenderMesh(VehicleInfo info, BoardTextDescriptorGeneralXml[] textDescriptors, Vector3 position, Quaternion rotation, Vector3 scale, Matrix4x4 sourceMatrix, out Color targetColor, ref int defaultCallsCounter)
        {
            targetColor = WTSDynamicTextRenderingRules.GetPropColor(0, 0, 0, m_defaultInstance, null, out _);
            VehicleManager        instance2     = Singleton <VehicleManager> .instance;
            Matrix4x4             matrix        = Matrix4x4.TRS(position, rotation, scale) * sourceMatrix;
            Matrix4x4             value         = info.m_vehicleAI.CalculateTyreMatrix(Vehicle.Flags.Created, ref position, ref rotation, ref scale, ref matrix);
            MaterialPropertyBlock materialBlock = instance2.m_materialBlock;

            materialBlock.Clear();
            materialBlock.SetMatrix(instance2.ID_TyreMatrix, value);
            materialBlock.SetVector(instance2.ID_TyrePosition, Vector3.zero);
            materialBlock.SetVector(instance2.ID_LightState, Vector3.zero);
            materialBlock.SetColor(instance2.ID_Color, targetColor * new Color(1, 1, 1, 0));
            instance2.m_drawCallData.m_batchedCalls += 1;
            info.m_material.SetVectorArray(instance2.ID_TyreLocation, info.m_generatedInfo.m_tyres);
            defaultCallsCounter++;
            Graphics.DrawMesh(GetMesh(info), matrix, GetMaterial(info), info.m_prefabDataLayer, m_camera, 0, materialBlock, true, true);

            for (int j = 0; j < info.m_subMeshes.Length; j++)
            {
                VehicleInfo.MeshInfo meshInfo = info.m_subMeshes[j];
                var subInfo = meshInfo.m_subInfo as VehicleInfoSub;
                if (subInfo != null && (meshInfo.m_vehicleFlagsRequired & Vehicle.Flags.LeftHandDrive) == 0)
                {
                    VehicleManager.instance.m_drawCallData.m_batchedCalls = VehicleManager.instance.m_drawCallData.m_batchedCalls + 1;

                    subInfo.m_material.SetVectorArray(VehicleManager.instance.ID_TyreLocation, subInfo.m_generatedInfo.m_tyres);
                    defaultCallsCounter++;
                    Graphics.DrawMesh(subInfo.m_mesh, matrix, subInfo.m_material, info.m_prefabDataLayer, null, 0, materialBlock);
                }
            }
            ////Vector3 one = Vector3.one;
            ////float magnitude = info.m_mesh.bounds.extents.magnitude;
            ////float num = magnitude + 16f;
            ////float num2 = magnitude * 3f;
            ////m_camera.transform.position = Vector3.forward * num2;
            ////m_camera.transform.rotation = Quaternion.AngleAxis(180f, Vector3.up);
            ////m_camera.nearClipPlane = Mathf.Max(num2 - num * 1.5f, 0.01f);
            ////m_camera.farClipPlane = num2 + num * 1.5f;
            ////Quaternion quaternion = Quaternion.Euler(20f, 0f, 0f)* rotation;
            ////Vector3 pos = quaternion * -info.m_mesh.bounds.center;
            ////VehicleManager instance2 = Singleton<VehicleManager>.instance;
            ////Matrix4x4 matrix = Matrix4x4.TRS(pos, quaternion, Vector3.one);
            ////Matrix4x4 value = info.m_vehicleAI.CalculateTyreMatrix(Vehicle.Flags.Created, ref pos, ref quaternion, ref one, ref matrix);
            ////MaterialPropertyBlock materialBlock = instance2.m_materialBlock;
            ////materialBlock.Clear();
            ////materialBlock.SetMatrix(instance2.ID_TyreMatrix, value);
            ////materialBlock.SetVector(instance2.ID_TyrePosition, Vector3.zero);
            ////materialBlock.SetVector(instance2.ID_LightState, Vector3.zero);
            ////materialBlock.SetColor(instance2.ID_VehicleColor, targetColor);

            ////instance2.m_drawCallData.m_batchedCalls = instance2.m_drawCallData.m_batchedCalls + 1;
            ////info.m_material.SetVectorArray(instance2.ID_TyreLocation, info.m_generatedInfo.m_tyres);
            ///defaultCallsCounter++;
            ////Graphics.DrawMesh(info.m_mesh, matrix, info.m_material, 0, m_camera, 0, materialBlock, true, true);

            ////m_camera.Render();


            return(matrix);
        }