public void Start() { NetSkins_Support.Init(); // Getting NetTool m_netTool = GameObject.FindObjectOfType <NetTool>(); if (m_netTool == null) { DebugUtils.Warning("NetTool not found."); enabled = false; return; } // Getting BulldozeTool m_bulldozeTool = GameObject.FindObjectOfType <BulldozeTool>(); if (m_bulldozeTool == null) { DebugUtils.Warning("BulldozeTool not found."); enabled = false; return; } // Getting BuildingTool m_buildingTool = GameObject.FindObjectOfType <BuildingTool>(); if (m_buildingTool == null) { DebugUtils.Warning("BuildingTool not found."); enabled = false; return; } // Getting NetTool private fields m_elevationField = m_netTool.GetType().GetField("m_elevation", BindingFlags.NonPublic | BindingFlags.Instance); m_elevationUpField = m_netTool.GetType().GetField("m_buildElevationUp", BindingFlags.NonPublic | BindingFlags.Instance); m_elevationDownField = m_netTool.GetType().GetField("m_buildElevationDown", BindingFlags.NonPublic | BindingFlags.Instance); m_buildingElevationField = m_buildingTool.GetType().GetField("m_elevation", BindingFlags.NonPublic | BindingFlags.Instance); m_controlPointCountField = m_netTool.GetType().GetField("m_controlPointCount", BindingFlags.NonPublic | BindingFlags.Instance); m_upgradingField = m_netTool.GetType().GetField("m_upgrading", BindingFlags.NonPublic | BindingFlags.Instance); m_placementErrorsField = m_buildingTool.GetType().GetField("m_placementErrors", BindingFlags.NonPublic | BindingFlags.Instance); if (m_elevationField == null || m_elevationUpField == null || m_elevationDownField == null || m_buildingElevationField == null || m_controlPointCountField == null || m_upgradingField == null || m_placementErrorsField == null) { DebugUtils.Warning("NetTool fields not found"); m_netTool = null; enabled = false; return; } // Getting Upgrade button template try { m_upgradeButtonTemplate = GameObject.Find("RoadsSmallPanel").GetComponent <GeneratedScrollPanel>().m_OptionsBar.Find <UIButton>("Upgrade"); } catch { DebugUtils.Warning("Upgrade button template not found"); } // Creating UI CreateToolOptionsButton(); // Store segment count m_segmentCount = NetManager.instance.m_segmentCount; // Getting control points try { m_controlPoints = m_netTool.GetType().GetField("m_controlPoints", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(m_netTool) as NetTool.ControlPoint[]; m_cachedControlPoints = m_netTool.GetType().GetField("m_cachedControlPoints", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(m_netTool) as NetTool.ControlPoint[]; } catch { DebugUtils.Warning("ControlPoints not found"); } // Init dictionary RoadPrefab.Initialize(); m_inEditor = (ToolManager.instance.m_properties.m_mode & ItemClass.Availability.AssetEditor) != ItemClass.Availability.None; RoadPrefab.singleMode = m_inEditor; if (changeMaxTurnAngle.value) { RoadPrefab.SetMaxTurnAngle(maxTurnAngle.value); } // Update Catenary UpdateCatenary(); // Fix nodes FixNodes(); DebugUtils.Log("Initialized"); }
public void Update(bool straightSlope) { if (m_prefab == null) { return; } Restore(!straightSlope); if (straightSlope && !m_detoured) { List <MethodInfo> methods = new List <MethodInfo>(m_redirections.Keys); foreach (MethodInfo from in methods) { m_redirections[from] = RedirectionHelper.RedirectCalls(from, m_LinearMiddleHeight); } m_detoured = true; } NetSkins_Support.ForceUpdate(); if (!hasElevation) { return; } switch (m_mode) { case Mode.Ground: if (m_prefab.m_flattenTerrain) { m_roadAI.elevated = m_prefab; m_roadAI.bridge = null; m_roadAI.slope = null; m_roadAI.tunnel = m_prefab; } break; case Mode.Elevated: if (m_elevated != null) { m_roadAI.info = m_elevated; m_roadAI.elevated = m_elevated; m_roadAI.bridge = null; } break; case Mode.Bridge: if (m_bridge != null) { m_roadAI.info = m_bridge; m_roadAI.elevated = m_bridge; } break; case Mode.Tunnel: if (m_tunnel != null && m_slope != null) { m_roadAI.info = m_tunnel; m_roadAI.elevated = m_tunnel; m_roadAI.bridge = null; m_roadAI.slope = m_tunnel; } break; case Mode.Single: m_roadAI.elevated = null; m_roadAI.bridge = null; m_roadAI.slope = null; m_roadAI.tunnel = null; break; } }