private void Activate(NetInfo info) { if (info == null) { return; } RoadPrefab prefab = RoadPrefab.GetPrefab(m_current); if (prefab != null) { prefab.Restore(true); } m_current = info; prefab = RoadPrefab.GetPrefab(info); AttachToolOptionsButton(prefab); // Is it a valid prefab? m_current.m_netAI.GetElevationLimits(out int min, out int max); if ((m_bulldozeTool.enabled || (min == 0 && max == 0)) && !m_buttonExists) { Deactivate(); return; } DisableDefaultKeys(); m_elevation = (int)m_elevationField.GetValue(m_netTool); if (prefab != null) { prefab.mode = m_mode; prefab.Update(straightSlope); } else { DebugUtils.Log("Selected prefab not registered"); } m_segmentCount = NetManager.instance.m_segmentCount; m_controlPointCount = 0; m_activated = true; m_toolOptionButton.isVisible = true; m_toolOptionButton.UpdateInfo(); }
public virtual void OnAfterSimulationTick() { if (m_buildingTool == null) { return; } // Removes HeightTooHigh & TooShort errors if (m_buildingTool.enabled) { ToolBase.ToolErrors errors = (ToolBase.ToolErrors)m_placementErrorsField.GetValue(m_buildingTool); if ((errors & ToolBase.ToolErrors.HeightTooHigh) == ToolBase.ToolErrors.HeightTooHigh) { errors = errors & ~ToolBase.ToolErrors.HeightTooHigh; m_placementErrorsField.SetValue(m_buildingTool, errors); } if ((errors & ToolBase.ToolErrors.TooShort) == ToolBase.ToolErrors.TooShort) { errors = errors & ~ToolBase.ToolErrors.TooShort; m_placementErrorsField.SetValue(m_buildingTool, errors); } } // Resume fixes if (m_fixNodesCount != 0 || m_fixTunnelsCount != 0) { RoadPrefab prefab = RoadPrefab.GetPrefab(m_current); if (prefab != null) { prefab.Restore(false); } if (m_fixTunnelsCount != 0) { FixTunnels(); } if (m_fixNodesCount != 0) { FixNodes(); } if (prefab != null) { prefab.Update(false); } } if (!isActive && !m_bulldozeTool.enabled) { return; } // Check if segment have been created/deleted/updated if (m_segmentCount != NetManager.instance.m_segmentCount || (bool)m_upgradingField.GetValue(m_netTool)) { m_segmentCount = NetManager.instance.m_segmentCount; RoadPrefab prefab = RoadPrefab.GetPrefab(m_current); if (prefab != null) { prefab.Restore(false); } m_fixTunnelsCount = 0; m_fixNodesCount = 0; FixTunnels(); FixNodes(); if (prefab != null) { prefab.Update(straightSlope); } } if (!isActive) { return; } // Fix first control point elevation int count = (int)m_controlPointCountField.GetValue(m_netTool); if (count != m_controlPointCount && m_controlPointCount == 0 && count == 1) { if (FixControlPoint(0)) { m_elevation = Mathf.RoundToInt(Mathf.RoundToInt(m_controlPoints[0].m_elevation / elevationStep) * elevationStep * 256f / 12f); UpdateElevation(); if (m_toolOptionButton != null) { m_toolOptionButton.UpdateInfo(); } } } // Fix last control point elevation else if (count == ((m_netTool.m_mode == NetTool.Mode.Curved || m_netTool.m_mode == NetTool.Mode.Freeform) ? 2 : 1)) { FixControlPoint(count); } m_controlPointCount = count; }