public override void OnSaveData() { LoggerUtils.Log("Saving props"); BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream propMemoryStream = new MemoryStream(); try { PropWrapper[] propInfos = PropUnlimiterManager.instance.GetAllPropWrappers(); if (propInfos != null) { binaryFormatter.Serialize(propMemoryStream, propInfos); serializableDataManager.SaveData(dataKey, propMemoryStream.ToArray()); LoggerUtils.Log("Props have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save props, as the array is null!"); } } catch (Exception e) { LoggerUtils.LogError(e); } }
/// <summary> /// Load all options from the disk. /// </summary> public static void LoadPropInfo() { if (File.Exists("BAPropPositioningInfo.xml")) { XmlSerializer serializer = new XmlSerializer(typeof(PropPositioningInfoObject[]), new XmlRootAttribute() { ElementName = "PropPositioningInfo" }); StreamReader reader = new StreamReader("BAPropPositioningInfo.xml"); Dictionary <string, PropPositioningInfo> routeShieldDict = ((PropPositioningInfoObject[])serializer.Deserialize(reader)).ToDictionary(i => i.key, i => i.value); reader.Close(); if (routeShieldDict != null) { Instance().propPositioningDict = routeShieldDict; LoggerUtils.Log("Loaded prop position info file."); } else { Instance().propPositioningDict = fallbackDict; LoggerUtils.LogError("Created prop position file is invalid!"); } } else { Instance().propPositioningDict = fallbackDict; LoggerUtils.LogWarning("Could not load the prop position file!"); } }
private Region GetSolution(Model model) { if (model == null) { return(null); } var region = new Region() { Rows = m_program.GetConst("rows").Number, Cols = m_program.GetConst("cols").Number, }; region.Parcels = new Parcel[region.Rows, region.Cols]; var atoms = model.GetSymbols(shown: true); LoggerUtils.Log($"Atoms count: {atoms.Count}"); foreach (var symbol in atoms) { if (symbol.Name.Equals("parcel")) { var arguments = symbol.Arguments; LoggerUtils.Log($"{symbol} - ({arguments[0].Number}, {arguments[1].Number}, {arguments[2].Number})"); region.Parcels[arguments[0].Number, arguments[1].Number] = (Parcel)arguments[2].Number; } } return(region); }
private void LoadProgram() { try { m_program = new Control(args: new List <string>() { m_maxSolutions.ToString(), "--const", $"rows={m_rows}", "--const", $"cols={m_cols}" }); LoggerUtils.Log("Loading definition files"); m_program.Load(ClingoConstants.ItemDefinitionFile); m_program.Load(ClingoConstants.IndustryGeneratorFile); LoggerUtils.Log("Grounding program"); var parts = new List <Tuple <string, List <Symbol> > >() { new Tuple <string, List <Symbol> >("base", new List <Symbol>()) }; m_program.Ground(parts); LoggerUtils.Log("Solving program"); m_solver = m_program.Solve(yield: true); } catch (Exception ex) { LoggerUtils.Error(ex, "cannot load logic program: "); } }
public Task <ResultInfo> SendMessageAsync(CreateHelpRequest message, string appName = null) { return(RetryUtils.DoAsync(async() => { var text = new StringBuilder(); if (!string.IsNullOrEmpty(appName)) { text.AppendLine($"*AppName:* {appName}"); } text.AppendLine($"*From:* {message.Email}"); text.AppendLine($"*Subject:* {message.Subject}"); text.AppendLine($"*Description:* {message.Description}"); var slack = new SlackClient(_options.Url); var slackMessage = new SlackMessage() { Channel = _options.Channel, Text = text.ToString(), Username = _options.Username, IconEmoji = Emoji.Angel }; return await slack.PostAsync(slackMessage) ? new ResultInfo(HttpStatusCode.OK) : new ResultInfo(HttpStatusCode.BadRequest, "Error in post message"); }, TimeSpan.FromMilliseconds(500), 3, false, exception => { LoggerUtils.Log("SlackManager exception", exception, nameof(SlackManager)); })); }
public override void OnSaveData() { LoggerUtils.Log("Saving routes and signs"); BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream routeMemoryStream = new MemoryStream(); MemoryStream signMemoryStream = new MemoryStream(); MemoryStream dynamicSignMemoryStream = new MemoryStream(); try { RouteContainer[] routeNames = RouteManager.Instance().SaveRoutes(); SignContainer[] signs = RouteManager.Instance().m_signList.ToArray(); DynamicSignContainer[] dynamicSigns = RouteManager.Instance().m_dynamicSignList.ToArray(); if (routeNames != null) { binaryFormatter.Serialize(routeMemoryStream, routeNames); serializableDataManager.SaveData(routeDataKey, routeMemoryStream.ToArray()); LoggerUtils.Log("Routes have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save routes, as the array is null!"); } if (signs != null) { binaryFormatter.Serialize(signMemoryStream, signs); serializableDataManager.SaveData(signDataKey, signMemoryStream.ToArray()); LoggerUtils.Log("Signs have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save signs, as the array is null!"); } if (dynamicSignMemoryStream != null) { binaryFormatter.Serialize(dynamicSignMemoryStream, dynamicSigns); serializableDataManager.SaveData(dynamicSignDataKey, dynamicSignMemoryStream.ToArray()); LoggerUtils.Log("Dynamic signs have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save dynamic signs, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { routeMemoryStream.Close(); } }
public void SaveOptions() { XmlSerializer serializer = new XmlSerializer(typeof(OptionsManager)); StreamWriter writer = new StreamWriter(FILE_NAME); serializer.Serialize(writer, OptionsManager.mInstance); writer.Close(); LoggerUtils.Log("Settings saved"); }
protected override void OnToolUpdate() { if (m_toolController != null && !m_toolController.IsInsideUI && Cursor.visible) { RaycastOutput raycastOutput; if (RaycastRoad(out raycastOutput)) { ushort netSegmentId = raycastOutput.m_netSegment; if (netSegmentId != 0) { NetManager netManager = Singleton <NetManager> .instance; NetSegment netSegment = netManager.m_segments.m_buffer[(int)netSegmentId]; if (netSegment.m_flags.IsFlagSet(NetSegment.Flags.Created)) { if (Event.current.type == EventType.MouseDown /*&& Event.current.button == (int)UIMouseButton.Left*/) { Vector3 pos1; Vector3 pos2; Vector3 rot1; Vector3 rot2; bool smooth1; bool smooth2; netSegment.CalculateCorner(netSegmentId, true, true, true, out pos1, out rot1, out smooth1); netSegment.CalculateCorner(netSegmentId, true, false, true, out pos2, out rot2, out smooth2); LoggerUtils.Log(string.Format("pos:{0},rot:{1}", pos1, rot1)); LoggerUtils.Log(string.Format("pos:{0},rot:{1}", pos2, rot2)); Vector3 diff = pos2 - pos1; float angle = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; LoggerUtils.Log(string.Format("angle:{0}", angle)); ShowToolInfo(false, null, new Vector3()); VehicleInfo info = VehicleHolder.getInstance().getVehicleInfo(); VehicleHolder.getInstance().setActive(netSegment.m_middlePosition, Vector3.zero); //unset self as tool ToolsModifierControl.toolController.CurrentTool = ToolsModifierControl.GetTool <DefaultTool>(); ToolsModifierControl.SetTool <DefaultTool>(); UnityEngine.Object.Destroy(this); } else { ShowToolInfo(true, "Spawn Vehicle", netSegment.m_bounds.center); } } } } } else { ShowToolInfo(false, null, new Vector3()); } }
/// <summary> /// Invoked when the tool is disabled /// </summary> protected override void OnDisable() { LoggerUtils.Log("Disabled"); base.OnDisable(); m_optionPanel.Hide(); m_action.OnLeftController(); m_action = null; }
/// <summary> /// Invoked when the tool is enabled /// </summary> protected override void OnEnable() { LoggerUtils.Log("Enabled"); base.OnEnable(); m_optionPanel.Show(); m_action = m_zoningAction; m_action.OnEnterController(); }
public override void OnCreated(ILoading loading) { try { JsonMapper.RegisterExporter <float>((obj, writer) => writer.Write(Convert.ToDouble(obj))); JsonMapper.RegisterImporter <double, float>(input => Convert.ToSingle(input)); } catch (NullReferenceException e) { LoggerUtils.Log("Failure at jsonmapper!"); } }
/// <summary> /// Save all options from the disk. /// </summary> public static void SavePropInfo() { XmlSerializer serializer = new XmlSerializer(typeof(PropPositioningInfoObject[]), new XmlRootAttribute() { ElementName = "PropPositioningInfo" }); StreamWriter writer = new StreamWriter("RouteShieldOptions.xml"); serializer.Serialize(writer, instance.propPositioningDict.Select(kv => new PropPositioningInfoObject() { key = kv.Key, value = kv.Value }).ToArray()); writer.Close(); LoggerUtils.Log("Saved route shield info file."); }
public override void OnSaveData() { LoggerUtils.Log("Saving Screen Objects"); BinaryFormatter binaryFormatter = new BinaryFormatter(); MemoryStream propDictStream = new MemoryStream(); MemoryStream buildingDictStream = new MemoryStream(); try { ScreenObj[] propDict = ScreenManager.instance.saveScreen(true); ScreenObj[] buildingDict = ScreenManager.instance.saveScreen(false); if (propDict != null) { binaryFormatter.Serialize(propDictStream, propDict); serializableDataManager.SaveData(propDictKey, propDictStream.ToArray()); LoggerUtils.Log("Prop screen objs have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save props, as the array is null!"); } if (buildingDict != null) { binaryFormatter.Serialize(buildingDictStream, buildingDict); serializableDataManager.SaveData(buildingDictKey, buildingDictStream.ToArray()); LoggerUtils.Log("building screen objs have been saved!"); } else { LoggerUtils.LogWarning("Couldn't save buildings, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { buildingDictStream.Close(); propDictStream.Close(); } }
public void LoadOptions() { LoggerUtils.Log("Starting settings load"); if (File.Exists(FILE_NAME)) { XmlSerializer xmlSerialiser = new XmlSerializer(typeof(OptionsManager)); StreamReader reader = new StreamReader(FILE_NAME); OptionsManager optionsManager = xmlSerialiser.Deserialize(reader) as OptionsManager; reader.Close(); LoggerUtils.Log(optionsManager.mMaxVelocity.ToString()); if (optionsManager != null) { mInstance = optionsManager; } LoggerUtils.Log("Settings read"); } }
/// <summary> /// Invoked when the tool is created /// </summary> protected override void Awake() { base.Awake(); m_toolController = FindObjectOfType <ToolController>(); name = ObjectName; LoggerUtils.Log("Loading IndustryLP"); SetupToolbarButton(); SetupTutorialPanel(); SetupOptionPanel(); SetupScrollablePanel(); SetupActions(); SetupDistributions(); LoggerUtils.Log("Finished"); }
public Task <ResultInfo> AddRequestAsync(CreateHelpRequest model) { return(RetryUtils.DoAsync(async() => { var baseUrl = new Uri(new Uri(_options.Url), _addRequestApiMethod); var client = new RestClient(baseUrl); var request = new RestRequest(Method.POST); var outgoingQueryString = HttpUtility.ParseQueryString(string.Empty); outgoingQueryString.Add("apikey", _options.ApiKey); outgoingQueryString.Add("group", _options.Group); outgoingQueryString.Add("businessUnit", _options.BusinessUnit); outgoingQueryString.Add("email", model.Email); outgoingQueryString.Add("subject", model.Subject); outgoingQueryString.Add("description", model.Description); var postdata = outgoingQueryString.ToString(); request.AddParameter("application/x-www-form-urlencoded", postdata, ParameterType.RequestBody); var response = await client.ExecuteTaskAsync(request); if (!response.IsSuccessful) { LoggerUtils.Log($"HelpDesk API request was failed with code: {response.StatusCode}" + Environment.NewLine + $"Response: {response.Content}", _logFileName); return new ResultInfo(response.StatusCode, _invalidRequestMessage); } var responseModel = JsonConvert.DeserializeObject <CreateHelpDeskRequestResponse>(response.Content); if (responseModel.Response.Result.Status == CreateHelpDeskRequestResponse.Status.Failure) { LoggerUtils.Log($"HelpDesk API AddRequest was failed with message: {responseModel.Response.Result.Message}", _logFileName); return new ResultInfo(HttpStatusCode.BadRequest, _invalidRequestMessage); } return new ResultInfo(HttpStatusCode.OK); }, TimeSpan.FromMilliseconds(500), 3, false, exception => { LoggerUtils.Log("HelpDeskManager exception", exception, _logFileName); })); }
public static bool Prefix(ref PropInfo info, ref Vector3 position, ref float angle, ref bool single) { if (!(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) { return(true); } else { #if DEBUG string str = String.Format("Invoking prop at:{0}, angle:{1}, info:{2}", position, angle, info.GetLocalizedTitle()); LoggerUtils.Log(str); #endif PropUnlimiterManager.instance.SetUnlimitedProp(info.m_prefabDataIndex, position, angle, single); PropTool.DispatchPlacementEffect(position, true); PropManager.instance.UpdateProp(0); PropManager.instance.UpdatePropRenderer(0, true); return(false); } }
public void Update() { if (IsAlive && !IsFinished) { //LoggerUtils.Log("Getting new model"); Model model = NewSolution(); if (model != null) { LoggerUtils.Log($"Saving model: {model}"); m_results.Add(GetSolution(model)); } else { //LoggerUtils.Log("Finished!"); IsFinished = true; } } }
public override void OnLoadData() { LoggerUtils.Log("Loading data"); BinaryFormatter binaryFormatter = new BinaryFormatter(); lock (thisLock) { byte[] loadedPropData = serializableDataManager.LoadData(dataKey); LoggerUtils.Log("Props loaded, parsing data"); if (loadedPropData != null && loadedPropData.Length > 0) { MemoryStream memoryStream = new MemoryStream(loadedPropData); try { PropWrapper[] props = binaryFormatter.Deserialize(memoryStream) as PropWrapper[]; if (props != null && props.Length > 0) { PropUnlimiterManager.instance.LoadWrappers(props.ToList()); } else { LoggerUtils.LogWarning("Couldn't load props, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { memoryStream.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } } }
protected override void Awake() { base.Awake(); LoggerUtils.Log("Initialising RoadRenderingManager"); if (!LoadPropMeshes()) { LoggerUtils.LogError("Failed to load some props!"); } else { LoggerUtils.Log("Props loaded!"); } replaceProp(ModSettings.Instance().settings.Contains("loadMotorwaySigns") ? (bool)ModSettings.Instance().settings["loadMotorwaySigns"] : true); DistrictManager districtManager = DistrictManager.instance; ShaderUtils.m_shaderStore.Add("fallback", districtManager.m_properties.m_areaNameShader); //Only start dynamic signs after everything's loaded RenderingManager.instance.initTimer(); }
public override void OnLoadData() { LoggerUtils.Log("Loading routes"); byte[] loadedRouteData = serializableDataManager.LoadData(routeDataKey); byte[] loadedSignData = serializableDataManager.LoadData(signDataKey); byte[] loadedDynamicSignData = serializableDataManager.LoadData(dynamicSignDataKey); if (loadedRouteData != null) { MemoryStream routeMemoryStream = new MemoryStream(); routeMemoryStream.Write(loadedRouteData, 0, loadedRouteData.Length); routeMemoryStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { RouteContainer[] routeNames = binaryFormatter.Deserialize(routeMemoryStream) as RouteContainer[]; if (routeNames != null) { RouteManager.Instance().Load(routeNames); } else { LoggerUtils.LogWarning("Couldn't load routes, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { routeMemoryStream.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } if (loadedSignData != null) { MemoryStream signMemoryStream = new MemoryStream(); signMemoryStream.Write(loadedSignData, 0, loadedSignData.Length); signMemoryStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { SignContainer[] signNames = binaryFormatter.Deserialize(signMemoryStream) as SignContainer[]; if (signNames != null) { RouteManager.Instance().LoadSigns(signNames); } else { LoggerUtils.LogWarning("Couldn't load routes, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { signMemoryStream.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } if (loadedDynamicSignData != null) { MemoryStream dynamicSignMemoryStream = new MemoryStream(); dynamicSignMemoryStream.Write(loadedDynamicSignData, 0, loadedDynamicSignData.Length); dynamicSignMemoryStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { DynamicSignContainer[] signNames = binaryFormatter.Deserialize(dynamicSignMemoryStream) as DynamicSignContainer[]; if (signNames != null) { RouteManager.Instance().LoadDynamicSigns(signNames); } else { LoggerUtils.LogWarning("Couldn't load routes, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { dynamicSignMemoryStream.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } }
protected override void Awake() { LoggerUtils.Log("Tool awake"); base.Awake(); }
protected override void Awake() { LoggerUtils.Log("Sign deletion Tool awake"); base.Awake(); }
public override void OnLoadData() { LoggerUtils.Log("Loading routes"); byte[] loadPropDict = serializableDataManager.LoadData(propDictKey); byte[] loadBuildingDict = serializableDataManager.LoadData(buildingDictKey); if (loadPropDict != null) { MemoryStream propDictStream = new MemoryStream(); propDictStream.Write(loadPropDict, 0, loadPropDict.Length); propDictStream.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { ScreenObj[] propArray = binaryFormatter.Deserialize(propDictStream) as ScreenObj[]; if (propArray != null) { ScreenManager.instance.loadScreen(true, propArray); } else { LoggerUtils.LogWarning("Couldn't load props, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { propDictStream.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } if (loadBuildingDict != null) { MemoryStream buildingPropDict = new MemoryStream(); buildingPropDict.Write(loadBuildingDict, 0, loadBuildingDict.Length); buildingPropDict.Position = 0; BinaryFormatter binaryFormatter = new BinaryFormatter(); try { ScreenObj[] buildingArray = binaryFormatter.Deserialize(buildingPropDict) as ScreenObj[]; if (buildingArray != null) { ScreenManager.instance.loadScreen(false, buildingArray); } else { LoggerUtils.LogWarning("Couldn't load building, as the array is null!"); } } catch (Exception ex) { LoggerUtils.LogException(ex); } finally { buildingPropDict.Close(); } } else { LoggerUtils.LogWarning("Found no data to load"); } }
public void initTimer() { interval = 5000; LoggerUtils.Log("Timer started!"); }
/// <summary> /// Redraw the text to be drawn later with a mesh. Use sparingly, as /// this is an expensive task. /// </summary> private void RenderText() { DistrictManager districtManager = DistrictManager.instance; NetManager netManager = NetManager.instance; if (districtManager.m_properties.m_areaNameFont != null) { UIFontManager.Invalidate(districtManager.m_properties.m_areaNameFont); foreach (RouteContainer route in RouteManager.Instance().m_routeDict.Values) { if (route.m_segmentId != 0) { string routeStr = route.m_route; if (routeStr != null) { NetSegment netSegment = netManager.m_segments.m_buffer[route.m_segmentId]; NetSegment.Flags segmentFlags = netSegment.m_flags; if (segmentFlags.IsFlagSet(NetSegment.Flags.Created)) { //Load a route shield type ( generic motorway shield should be default value ) RouteShieldInfo shieldInfo = RouteShieldConfig.Instance().GetRouteShieldInfo(route.m_routePrefix); NetNode startNode = netManager.m_nodes.m_buffer[netSegment.m_startNode]; NetNode endNode = netManager.m_nodes.m_buffer[netSegment.m_endNode]; Vector3 startNodePosition = startNode.m_position; if (!SpriteUtils.m_textureStore.ContainsKey(shieldInfo.textureName)) { LoggerUtils.Log("WTF, No texture found for route shield" + shieldInfo.textureName); } Material mat = SpriteUtils.m_textureStore[shieldInfo.textureName]; route.m_shieldObject.GetComponent <Renderer>().material = mat; //TODO: Make mesh size dependent on text size route.m_shieldMesh.mesh = MeshUtils.CreateRectMesh(mat.mainTexture.width, mat.mainTexture.height); route.m_shieldMesh.transform.position = startNodePosition; route.m_shieldMesh.transform.LookAt(endNode.m_position, Vector3.up); route.m_shieldMesh.transform.Rotate(90f, 0f, 90f); //TODO: Bind the elevation of the mesh to the text z offset route.m_shieldMesh.transform.position += (Vector3.up * (0.5f)); route.m_shieldMesh.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); route.m_shieldObject.GetComponent <Renderer>().sortingOrder = 1000; route.m_numMesh.anchor = TextAnchor.MiddleCenter; route.m_numMesh.font = FontUtils.m_fontStore.ContainsKey("Highway Gothic") ? FontUtils.m_fontStore["Highway Gothic"] : districtManager.m_properties.m_areaNameFont.baseFont; route.m_numMesh.GetComponent <Renderer>().material = route.m_numMesh.font.material; if (ShaderUtils.m_shaderStore.ContainsKey("font")) { route.m_numMesh.GetComponent <Renderer>().material.shader = ShaderUtils.m_shaderStore["font"]; } else { route.m_numMesh.GetComponent <Renderer>().material.shader = ShaderUtils.m_shaderStore["fallback"]; } //TODO: Tie the font size to the font size option route.m_numMesh.fontSize = 50; route.m_numMesh.transform.position = startNode.m_position; route.m_numMesh.transform.parent = route.m_shieldObject.transform; route.m_numMesh.transform.LookAt(endNode.m_position, Vector3.up); route.m_numMesh.transform.Rotate(90f, 0f, 90f); route.m_numMesh.transform.position = route.m_shieldObject.GetComponent <Renderer>().bounds.center; //Just a hack, to make sure the text actually shows up above the shield route.m_numMesh.offsetZ = 0.001f; //TODO: Definitely get a map of the texture to the required text offsets route.m_numMesh.transform.localPosition += (Vector3.up * shieldInfo.upOffset); route.m_numMesh.transform.localPosition += (Vector3.left * shieldInfo.leftOffset); //TODO: Figure out a better ratio for route markers route.m_numMesh.transform.localScale = new Vector3(shieldInfo.textScale, shieldInfo.textScale, shieldInfo.textScale); route.m_numMesh.GetComponent <Renderer>().material.color = shieldInfo.textColor; route.m_numMesh.text = route.m_route.ToString(); } } } } foreach (SignContainer sign in RouteManager.Instance().m_signList) { Vector3 position = new Vector3(sign.x, sign.y, sign.z); string signPropType = (sign.m_exitNum == null || !m_signPropDict.ContainsKey(sign.m_exitNum)) ? "hwysign" : sign.m_exitNum; SignPropInfo signPropInfo = SignPropConfig.signPropInfoDict[signPropType]; int numSignProps = signPropInfo.isDoubleGantry ? 2 : 1; sign.m_sign.GetComponent <Renderer>().material = m_signPropDict[signPropType].m_material; //TODO: Make mesh size dependent on text size sign.m_sign.mesh = m_signPropDict[signPropType].m_mesh; sign.m_sign.transform.position = position; if (sign.m_routePrefix != null) { RouteShieldInfo shieldInfo = RouteShieldConfig.Instance().GetRouteShieldInfo(sign.m_routePrefix); Material mat = SpriteUtils.m_textureStore[shieldInfo.textureName]; sign.m_shieldObject.GetComponent <Renderer>().material = mat; //TODO: Make mesh size dependent on text size sign.m_shieldMesh.mesh = MeshUtils.CreateRectMesh(mat.mainTexture.width, mat.mainTexture.height); sign.m_shieldMesh.transform.position = position; //TODO: Bind the elevation of the mesh to the text z offset sign.m_shieldMesh.transform.position += (Vector3.up * (0.5f)); sign.m_shieldMesh.transform.localScale = signPropInfo.shieldScale; sign.m_shieldObject.GetComponent <Renderer>().sortingOrder = 1000; sign.m_numMesh.anchor = TextAnchor.MiddleCenter; sign.m_numMesh.font = FontUtils.m_fontStore.ContainsKey("Highway Gothic") ? FontUtils.m_fontStore["Highway Gothic"] : districtManager.m_properties.m_areaNameFont.baseFont; sign.m_numMesh.GetComponent <Renderer>().material = sign.m_numMesh.font.material; if (ShaderUtils.m_shaderStore.ContainsKey("font")) { sign.m_numMesh.GetComponent <Renderer>().material.shader = ShaderUtils.m_shaderStore["font"]; } else { sign.m_numMesh.GetComponent <Renderer>().material.shader = ShaderUtils.m_shaderStore["fallback"]; } //TODO: Tie the font size to the font size option sign.m_numMesh.fontSize = 50; sign.m_numMesh.transform.position = position; sign.m_numMesh.transform.parent = sign.m_shieldObject.transform; sign.m_numMesh.transform.position = sign.m_shieldObject.GetComponent <Renderer>().bounds.center; //Just a hack, to make sure the text actually shows up above the shield sign.m_numMesh.offsetZ = 0.01f; //TODO: Definitely get a map of the texture to the required text offsets ds sign.m_numMesh.transform.localPosition += (Vector3.up * shieldInfo.upOffset); sign.m_numMesh.transform.localPosition += (Vector3.left * shieldInfo.leftOffset); //TODO: Figure out a better ratio for route markers sign.m_numMesh.transform.localScale = new Vector3(shieldInfo.textScale, shieldInfo.textScale, shieldInfo.textScale); sign.m_numMesh.GetComponent <Renderer>().material.color = shieldInfo.textColor; sign.m_numMesh.text = sign.m_route.ToString(); sign.m_numMesh.TE sign.m_shieldMesh.transform.parent = sign.m_sign.transform; sign.m_shieldMesh.transform.localPosition = signPropInfo.shieldOffset; } string[] destinationStrings = sign.m_destination.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); for (int i = 0; i < numSignProps; i++) { sign.m_destinationMesh[i].anchor = TextAnchor.MiddleCenter; sign.m_destinationMesh[i].font = FontUtils.m_fontStore.ContainsKey(signPropInfo.fontType) ? FontUtils.m_fontStore[signPropInfo.fontType] : districtManager.m_properties.m_areaNameFont.baseFont; sign.m_destinationMesh[i].font.material.SetColor("Text Color", Color.white); if (ShaderUtils.m_shaderStore.ContainsKey("font")) { sign.m_destinationMesh[i].font.material.shader = ShaderUtils.m_shaderStore["font"]; } else { sign.m_destinationMesh[i].font.material.shader = ShaderUtils.m_shaderStore["fallback"]; } sign.m_destinationMesh[i].GetComponent <Renderer>().material = sign.m_destinationMesh[i].font.material; //TODO: Tie the font size to the font size option sign.m_destinationMesh[i].fontSize = 50; sign.m_destinationMesh[i].transform.position = position; sign.m_destinationMesh[i].transform.parent = sign.m_sign.transform; sign.m_destinationMesh[i].transform.position = position; //Just a hack, to make sure the text actually shows up above the shield sign.m_destinationMesh[i].offsetZ = 0.001f; //TODO: Definitely get a map of the texture to the required text offsets //TODO: Figure out a better ratio for route markers sign.m_destinationMesh[i].transform.localScale = signPropInfo.textScale; sign.m_destinationMesh[i].text = signPropInfo.isDoubleGantry ? destinationStrings[i] : sign.m_destination; sign.m_destinationMesh[i].transform.localPosition = sign.m_routePrefix == null ? signPropInfo.textOffsetNoSign[i] : signPropInfo.textOffsetSign[i]; } } foreach (DynamicSignContainer sign in RouteManager.Instance().m_dynamicSignList) { Vector3 position = new Vector3(sign.x, sign.y, sign.z); sign.m_sign.GetComponent <Renderer>().material = m_signPropDict["electronic_sign_gantry"].m_material; //TODO: Make mesh size dependent on text size sign.m_sign.mesh = m_signPropDict["electronic_sign_gantry"].m_mesh; sign.m_sign.transform.position = position; sign.m_messageTextMesh.anchor = TextAnchor.MiddleLeft; sign.m_messageTextMesh.font = FontUtils.m_fontStore.ContainsKey("Electronic Highway Sign") ? FontUtils.m_fontStore["Electronic Highway Sign"] : districtManager.m_properties.m_areaNameFont.baseFont; if (ShaderUtils.m_shaderStore.ContainsKey("font")) { sign.m_messageTextMesh.font.material.shader = ShaderUtils.m_shaderStore["font"]; } else { sign.m_numMesh.GetComponent <Renderer>().material.shader = ShaderUtils.m_shaderStore["fallback"]; } sign.m_messageTextMesh.color = (new Color(1, 0.77f, 0.56f, 1f)); sign.m_messageTextMesh.font.material.SetColor("Text Color", new Color(1, 0.77f, 0.56f, 1f)); sign.m_messageTextMesh.GetComponent <Renderer>().material = sign.m_messageTextMesh.font.material; //TODO: Tie the font size to the font size option sign.m_messageTextMesh.fontSize = 50; sign.m_messageTextMesh.transform.position = position; sign.m_messageTextMesh.transform.parent = sign.m_sign.transform; sign.m_messageTextMesh.transform.position = position; //Just a hack, to make sure the text actually shows up above the shield sign.m_messageTextMesh.offsetZ = 0.001f; //TODO: Definitely get a map of the texture to the required text odffsets //TODO: Figure out a better ratio for route markers sign.m_messageTextMesh.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f); String msgText = (sign.m_route == null ? "Traffic" : (sign.m_routePrefix + '-' + sign.m_route)) + " moving smoothly"; sign.m_messageTextMesh.text = msgText; sign.m_messageTextMesh.transform.localPosition = new Vector3(0.7f, 8.4f, -19.7f); } } }