Example #1
0
        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;
            }
        }