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); }
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); } } }
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); }