internal void SetupControls() { float offset = 40f; // Title Bar m_title = AddUIComponent <UITitleBar>(); m_title.iconSprite = "InfoIconTrafficCongestion"; m_title.title = AVOMod.ModName + " " + AVOMod.Version; // Category DropDown UILabel label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = new Vector3(10f, offset); label.text = Translations.Translate("AVO_MOD_MP56"); m_category = UIUtils.CreateDropDown(this); m_category.width = 175; for (int i = 0; i < categoryList.Length; i++) { m_category.AddItem(categoryList[i]); } m_category.selectedIndex = 0; m_category.tooltip = Translations.Translate("AVO_MOD_MP39"); m_category.relativePosition = label.relativePosition + new Vector3(75f, 0f); m_category.eventSelectedIndexChanged += (c, t) => { m_category.enabled = false; PopulateList(); m_category.enabled = true; }; // Search m_search = UIUtils.CreateTextField(this); m_search.width = 145f; m_search.height = 30f; m_search.padding = new RectOffset(6, 6, 6, 6); m_search.tooltip = Translations.Translate("AVO_MOD_MP40"); m_search.relativePosition = new Vector3(WIDTHLEFT - m_search.width, offset); m_search.eventTextChanged += (c, t) => PopulateList(); label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = m_search.relativePosition - new Vector3(60f, 0f); label.text = Translations.Translate("AVO_MOD_MP55"); // FastList m_fastList = UIFastList.Create <UIVehicleItem>(this); m_fastList.backgroundSprite = "UnlockingPanel"; m_fastList.width = WIDTHLEFT - 5; m_fastList.height = height - offset - 110; m_fastList.canSelect = true; m_fastList.relativePosition = new Vector3(5, offset + 35); // Configuration file buttons UILabel configLabel = this.AddUIComponent <UILabel>(); configLabel.text = Translations.Translate("AVO_MOD_MP41"); configLabel.textScale = 0.8f; configLabel.relativePosition = new Vector3(16, height - 65); m_import = UIUtils.CreateButton(this); m_import.text = Translations.Translate("AVO_MOD_MP42"); m_import.width = 80; m_import.tooltip = Translations.Translate("AVO_MOD_MP43"); m_import.relativePosition = new Vector3(10, height - 45); m_export = UIUtils.CreateButton(this); m_export.text = Translations.Translate("AVO_MOD_MP44"); m_export.width = 80; m_export.tooltip = Translations.Translate("AVO_MOD_MP45"); m_export.relativePosition = new Vector3(95, height - 45); m_resetall = UIUtils.CreateButton(this); m_resetall.text = Translations.Translate("AVO_MOD_MP46"); m_resetall.width = 80; m_resetall.tooltip = Translations.Translate("AVO_MOD_MP47"); m_resetall.relativePosition = new Vector3(180, height - 45); m_autosave = AddUIComponent <UILabel>(); m_autosave.textScale = 0.6f; m_autosave.text = Translations.Translate("AVO_MOD_MP48"); m_autosave.relativePosition = new Vector3(275, height - 40); m_autosave.autoSize = true; m_autosave.textAlignment = UIHorizontalAlignment.Center; m_autosave.textColor = Color.green; m_autosave.tooltip = Translations.Translate("AVO_MOD_MP49"); m_autosave.isVisible = AdvancedVehicleOptions.AutoSaveVehicleConfig; // Preview UIPanel panel = AddUIComponent <UIPanel>(); panel.backgroundSprite = "GenericPanel"; panel.width = WIDTHRIGHT - 10; panel.height = HEIGHT - 420; panel.relativePosition = new Vector3(WIDTHLEFT + 5, offset); m_preview = panel.AddUIComponent <UITextureSprite>(); m_preview.size = panel.size; m_preview.relativePosition = Vector3.zero; m_previewRenderer = gameObject.AddComponent <PreviewRenderer>(); m_previewRenderer.size = m_preview.size * 2; // Twice the size for anti-aliasing m_preview.texture = m_previewRenderer.texture; // Follow a vehicle if (m_cameraController != null) { m_followVehicle = AddUIComponent <UISprite>(); m_followVehicle.spriteName = "LocationMarkerFocused"; m_followVehicle.width = m_followVehicle.spriteInfo.width; m_followVehicle.height = m_followVehicle.spriteInfo.height; m_followVehicle.tooltip = Translations.Translate("AVO_MOD_MP50"); m_followVehicle.relativePosition = new Vector3(panel.relativePosition.x + panel.width - m_followVehicle.width - 5, panel.relativePosition.y + 5); m_followVehicle.eventClick += (c, p) => FollowNextVehicle(); } //Remove the followed vehicle { m_removeVehicle = AddUIComponent <UISprite>(); m_removeVehicle.Hide(); m_removeVehicle.spriteName = "IconPolicyOldTown"; m_removeVehicle.width = m_removeVehicle.spriteInfo.width - 12; m_removeVehicle.height = m_removeVehicle.spriteInfo.height - 12; m_removeVehicle.tooltip = Translations.Translate("AVO_MOD_MP51"); m_removeVehicle.relativePosition = new Vector3(panel.relativePosition.x + panel.width - m_removeVehicle.width - 33, panel.relativePosition.y + 7); m_removeVehicle.eventClick += (c, p) => RemoveThisVehicle(); } // Option panel m_optionPanel = AddUIComponent <UIOptionPanel>(); m_optionPanel.relativePosition = new Vector3(WIDTHLEFT, height - 370); // Event handlers m_fastList.eventSelectedIndexChanged += OnSelectedItemChanged; m_optionPanel.eventEnableCheckChanged += OnEnableStateChanged; m_import.eventClick += (c, t) => { DefaultOptions.RestoreAll(); AdvancedVehicleOptions.ImportVehicleDataConfig(); optionList = AdvancedVehicleOptions.config.options; }; m_export.eventClick += (c, t) => AdvancedVehicleOptions.ExportVehicleDataConfig(true); m_resetall.eventClick += (c, t) => { ConfirmPanel.ShowModal(Translations.Translate("AVO_MOD_MP52"), Translations.Translate("AVO_MOD_MP53"), (comp, ret) => { if (ret != 1) { return; } DefaultOptions.RestoreAll(); AdvancedVehicleOptions.ResetVehicleDataConfig(); optionList = AdvancedVehicleOptions.config.options; ExceptionPanel resetpanel = UIView.library.ShowModal <ExceptionPanel>("ExceptionPanel"); resetpanel.SetMessage("Advanced Vehicle Options", Translations.Translate("AVO_MOD_MP54"), false); }); }; panel.eventMouseDown += (c, p) => { eventMouseMove += RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseUp += (c, p) => { eventMouseMove -= RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseWheel += (c, p) => { m_previewRenderer.zoom -= Mathf.Sign(p.wheelDelta) * 0.25f; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; }
private void SetupControls() { float offset = 40f; // Title Bar m_title = AddUIComponent <UITitleBar>(); m_title.iconSprite = "IconAssetBuilding"; m_title.title = "Mesh Info " + MeshInfo.version; // Type DropDown UILabel label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = new Vector3(15f, offset + 5f); label.text = "Type :"; m_prefabType = UIUtils.CreateDropDown(this); m_prefabType.width = 110; m_prefabType.AddItem("Building"); m_prefabType.AddItem("Prop"); m_prefabType.AddItem("Tree"); m_prefabType.AddItem("Vehicle"); m_prefabType.selectedIndex = 0; m_prefabType.relativePosition = label.relativePosition + new Vector3(60f, 0f); m_prefabType.eventSelectedIndexChanged += (c, t) => { m_prefabType.enabled = false; m_isSorted = false; PopulateList(); m_prefabType.enabled = true; }; // Sorting DropDown label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = m_prefabType.relativePosition + new Vector3(130f, 0f); label.text = "Sort by :"; m_sorting = UIUtils.CreateDropDown(this); m_sorting.width = 125; m_sorting.AddItem("Name"); m_sorting.AddItem("Triangles"); m_sorting.AddItem("LOD Triangles"); m_sorting.AddItem("Weight"); m_sorting.AddItem("LOD Weight"); m_sorting.AddItem("Texture"); m_sorting.AddItem("LOD Texture"); m_sorting.selectedIndex = 0; m_sorting.relativePosition = label.relativePosition + new Vector3(60f, 0f); m_sorting.eventSelectedIndexChanged += (c, t) => { m_sorting.enabled = false; m_isSorted = false; PopulateList(); m_sorting.enabled = true; }; // Sorting direction m_sortDirection = AddUIComponent <UISprite>(); m_sortDirection.atlas = UIUtils.GetAtlas("Ingame"); m_sortDirection.spriteName = "IconUpArrow"; m_sortDirection.relativePosition = m_sorting.relativePosition + new Vector3(130f, 0f); m_sortDirection.eventClick += (c, t) => { m_sortDirection.flip = (m_sortDirection.flip == UISpriteFlip.None) ? UISpriteFlip.FlipVertical : UISpriteFlip.None; m_isSorted = false; PopulateList(); }; // Search m_search = UIUtils.CreateTextField(this); m_search.width = 150f; m_search.height = 30f; m_search.padding = new RectOffset(6, 6, 6, 6); m_search.relativePosition = new Vector3(width - m_search.width - 15f, offset + 5f); label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = m_search.relativePosition - new Vector3(60f, 0f); label.text = "Search :"; m_search.eventTextChanged += (c, t) => PopulateList(); // Labels label = AddUIComponent <UILabel>(); label.textScale = 0.9f; label.text = "Name"; label.relativePosition = new Vector3(15f, offset + 50f); label = AddUIComponent <UILabel>(); label.textScale = 0.9f; label.text = "Texture"; label.relativePosition = new Vector3(width - 135f, offset + 50f); UILabel label2 = AddUIComponent <UILabel>(); label2.textScale = 0.9f; label2.text = "Weight"; label2.relativePosition = label.relativePosition - new Vector3(125f, 0f); label = AddUIComponent <UILabel>(); label.textScale = 0.9f; label.text = "Triangles"; label.relativePosition = label2.relativePosition - new Vector3(115f, 0f); // Item List m_itemList = UIFastList.Create <UIPrefabItem>(this); m_itemList.rowHeight = 40f; m_itemList.backgroundSprite = "UnlockingPanel"; m_itemList.width = width - 10; m_itemList.height = height - offset - 75; m_itemList.relativePosition = new Vector3(5f, offset + 70f); }
public override void Awake() { height = 46; focusButton = UIUtils.CreateButton(this); focusButton.name = "CCX_FocusButton"; focusButton.text = "Point 0"; focusButton.size = new Vector2(70f, 30f); focusButton.relativePosition = new Vector3(8, 8); focusButton.tooltip = "Click here to place the camera at this point"; easingDropDown = UIUtils.CreateDropDown(this); easingDropDown.name = "CCX_EasingDropDown"; easingDropDown.textScale = 0.9f; easingDropDown.AddItem("None"); easingDropDown.AddItem("Auto"); easingDropDown.AddItem("In"); easingDropDown.AddItem("Out"); easingDropDown.AddItem("InOut"); easingDropDown.selectedValue = "Auto"; easingDropDown.size = new Vector2(80f, 30f); easingDropDown.textFieldPadding.top = 7; easingDropDown.relativePosition = new Vector3(focusButton.relativePosition.x + focusButton.width + 8, 8); easingDropDown.tooltip = "Camera movement easing"; durationInput = UIUtils.CreateTextField(this); durationInput.name = "CCX_DurationInput"; durationInput.size = new Vector2(40f, 26f); durationInput.numericalOnly = true; durationInput.allowFloats = true; durationInput.padding.top = 6; durationInput.relativePosition = new Vector3(easingDropDown.relativePosition.x + easingDropDown.width + 8, 10); durationInput.tooltip = "Duration in seconds"; delayInput = UIUtils.CreateTextField(this); delayInput.name = "CCX_DelayInput"; delayInput.size = new Vector2(45f, 26f); delayInput.numericalOnly = true; delayInput.allowFloats = true; delayInput.padding.top = 6; delayInput.relativePosition = new Vector3(durationInput.relativePosition.x + durationInput.width + 8, 10); delayInput.tooltip = "Delay in seconds"; fovInput = UIUtils.CreateTextField(this); fovInput.name = "CCX_DelayInput"; fovInput.size = new Vector2(45f, 26); fovInput.numericalOnly = true; fovInput.allowFloats = true; fovInput.padding.top = 6; fovInput.relativePosition = new Vector3(delayInput.relativePosition.x + delayInput.width + 8, 10); fovInput.tooltip = "Field of view in degrees"; resetButton = UIUtils.CreateButton(this); resetButton.name = "CCX_ResetButton"; resetButton.text = "O"; resetButton.size = new Vector2(45f, 30f); resetButton.relativePosition = new Vector3(fovInput.relativePosition.x + fovInput.width + 8, 8); resetButton.tooltip = "Recapture the camera position"; removeButton = UIUtils.CreateButton(this); removeButton.name = "CCX_RemoveButton"; removeButton.text = "X"; removeButton.size = new Vector2(40f, 30f); removeButton.relativePosition = new Vector3(resetButton.relativePosition.x + resetButton.width + 8, 8); removeButton.tooltip = "Remove this point"; focusButton.eventClicked += (c, p) => { CameraPath.SetCitiesCameraTransform(knot); }; easingDropDown.eventSelectedIndexChanged += (c, p) => { knot.mode = (EasingMode)p; }; durationInput.eventTextSubmitted += (c, p) => { float value; if (float.TryParse(p, out value) && value > 0) { knot.duration = value; } durationInput.text = knot.duration.ToString(); }; durationInput.eventMouseWheel += (c, p) => { float value; if (float.TryParse(durationInput.text, out value)) { knot.duration = Mathf.Max(0, value + p.wheelDelta); durationInput.text = knot.duration.ToString(); } p.Use(); }; delayInput.eventTextSubmitted += (c, p) => { float value; if (float.TryParse(p, out value)) { knot.delay = Mathf.Max(0, value); } delayInput.text = knot.delay.ToString(); }; delayInput.eventMouseWheel += (c, p) => { float value; if (float.TryParse(delayInput.text, out value)) { knot.delay = Mathf.Max(0, value + p.wheelDelta); delayInput.text = knot.delay.ToString(); } p.Use(); }; fovInput.eventTextSubmitted += (c, p) => { float value; if (float.TryParse(p, out value)) { knot.fov = Mathf.Clamp(value, 20f, 179f) / 2f; } fovInput.text = (2f * knot.fov).ToString(); }; fovInput.eventMouseWheel += (c, p) => { float value; if (float.TryParse(fovInput.text, out value)) { knot.fov = Mathf.Clamp(value + p.wheelDelta, 20f, 179f) / 2f; fovInput.text = (2f * knot.fov).ToString(); } p.Use(); }; resetButton.eventClicked += (c, p) => { knot.CaptureCamera(); fovInput.text = (2f * knot.fov).ToString(); }; removeButton.eventClicked += (c, p) => { CameraDirector.cameraPath.knots.RemoveAt(index); CameraDirector.mainWindow.RefreshKnotList(); }; }
/*public override void OnDestroy() * { * base.OnDestroy(); * * DebugUtils.Log("Destroying UIMainPanel"); * * if (m_button != null) GameObject.Destroy(m_button.gameObject); * GameObject.Destroy(m_optionPanel.gameObject); * }*/ private void SetupControls() { float offset = 40f; // Title Bar m_title = AddUIComponent <UITitleBar>(); m_title.iconSprite = "InfoIconTrafficCongestion"; m_title.title = "Advanced Vehicle Options " + ModInfo.version; // Category DropDown UILabel label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = new Vector3(10f, offset); label.text = "Category :"; m_category = UIUtils.CreateDropDown(this); m_category.width = 150; for (int i = 0; i < categoryList.Length; i++) { m_category.AddItem(categoryList[i]); } m_category.selectedIndex = 0; m_category.tooltip = "Select a category to display\nTip: Use the mouse wheel to switch between categories faster"; m_category.relativePosition = label.relativePosition + new Vector3(75f, 0f); m_category.eventSelectedIndexChanged += (c, t) => { m_category.enabled = false; PopulateList(); m_category.enabled = true; }; // Search m_search = UIUtils.CreateTextField(this); m_search.width = 145f; m_search.height = 30f; m_search.padding = new RectOffset(6, 6, 6, 6); m_search.tooltip = "Type the name of a vehicle type"; m_search.relativePosition = new Vector3(WIDTHLEFT - m_search.width, offset); m_search.eventTextChanged += (c, t) => PopulateList(); label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = m_search.relativePosition - new Vector3(60f, 0f); label.text = "Search :"; // FastList m_fastList = UIFastList.Create <UIVehicleItem>(this); m_fastList.backgroundSprite = "UnlockingPanel"; m_fastList.width = WIDTHLEFT - 5; m_fastList.height = height - offset - 110; m_fastList.canSelect = true; m_fastList.relativePosition = new Vector3(5, offset + 35); // Configuration file buttons UILabel configLabel = this.AddUIComponent <UILabel>(); configLabel.text = "Configuration file:"; configLabel.textScale = 0.8f; configLabel.relativePosition = new Vector3(10, height - 60); m_import = UIUtils.CreateButton(this); m_import.text = "Import"; m_import.tooltip = "Import the configuration"; m_import.relativePosition = new Vector3(10, height - 40); m_export = UIUtils.CreateButton(this); m_export.text = "Export"; m_export.tooltip = "Export the configuration"; m_export.relativePosition = new Vector3(105, height - 40); // Preview UIPanel panel = AddUIComponent <UIPanel>(); panel.backgroundSprite = "GenericPanel"; panel.width = WIDTHRIGHT - 10; panel.height = HEIGHT - 420; panel.relativePosition = new Vector3(WIDTHLEFT + 5, offset); m_preview = panel.AddUIComponent <UITextureSprite>(); m_preview.size = panel.size; m_preview.relativePosition = Vector3.zero; m_previewRenderer = gameObject.AddComponent <PreviewRenderer>(); m_previewRenderer.size = m_preview.size * 2; // Twice the size for anti-aliasing m_preview.texture = m_previewRenderer.texture; // Follow if (m_cameraController != null) { m_followVehicle = AddUIComponent <UISprite>(); m_followVehicle.spriteName = "LocationMarkerFocused"; m_followVehicle.width = m_followVehicle.spriteInfo.width; m_followVehicle.height = m_followVehicle.spriteInfo.height; m_followVehicle.tooltip = "Click here to cycle through the existing vehicles of that type"; m_followVehicle.relativePosition = new Vector3(panel.relativePosition.x + panel.width - m_followVehicle.width - 5, panel.relativePosition.y + 5); m_followVehicle.eventClick += (c, p) => FollowNextVehicle(); } // Option panel m_optionPanel = AddUIComponent <UIOptionPanel>(); m_optionPanel.relativePosition = new Vector3(WIDTHLEFT, height - 370); // Event handlers m_fastList.eventSelectedIndexChanged += OnSelectedItemChanged; m_optionPanel.eventEnableCheckChanged += OnEnableStateChanged; m_import.eventClick += (c, t) => { DefaultOptions.RestoreAll(); AdvancedVehicleOptions.ImportConfig(); optionList = AdvancedVehicleOptions.config.options; }; m_export.eventClick += (c, t) => AdvancedVehicleOptions.ExportConfig(); panel.eventMouseDown += (c, p) => { eventMouseMove += RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseUp += (c, p) => { eventMouseMove -= RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseWheel += (c, p) => { m_previewRenderer.zoom -= Mathf.Sign(p.wheelDelta) * 0.25f; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; }
private void SetupControls() { float offset = 40f; //Beta Testing Timestamp //DateTime now = DateTime.Now; //m_title.title = "Advanced Vehicle Options " + ModInfo.version + " " + now; // Title Bar m_title = AddUIComponent <UITitleBar>(); m_title.iconSprite = "InfoIconTrafficCongestion"; m_title.title = "Advanced Vehicle Options " + ModInfo.version; // Category DropDown UILabel label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = new Vector3(10f, offset); label.text = "Category :"; m_category = UIUtils.CreateDropDown(this); m_category.width = 175; for (int i = 0; i < categoryList.Length; i++) { m_category.AddItem(categoryList[i]); } m_category.selectedIndex = 0; m_category.tooltip = "Select a category to display\nTip: Use the mouse wheel to switch between categories faster"; m_category.relativePosition = label.relativePosition + new Vector3(75f, 0f); m_category.eventSelectedIndexChanged += (c, t) => { m_category.enabled = false; PopulateList(); m_category.enabled = true; }; // Search m_search = UIUtils.CreateTextField(this); m_search.width = 145f; m_search.height = 30f; m_search.padding = new RectOffset(6, 6, 6, 6); m_search.tooltip = "Type the name of a vehicle type"; m_search.relativePosition = new Vector3(WIDTHLEFT - m_search.width, offset); m_search.eventTextChanged += (c, t) => PopulateList(); label = AddUIComponent <UILabel>(); label.textScale = 0.8f; label.padding = new RectOffset(0, 0, 8, 0); label.relativePosition = m_search.relativePosition - new Vector3(60f, 0f); label.text = "Search :"; // FastList m_fastList = UIFastList.Create <UIVehicleItem>(this); m_fastList.backgroundSprite = "UnlockingPanel"; m_fastList.width = WIDTHLEFT - 5; m_fastList.height = height - offset - 110; m_fastList.canSelect = true; m_fastList.relativePosition = new Vector3(5, offset + 35); // Configuration file buttons UILabel configLabel = this.AddUIComponent <UILabel>(); configLabel.text = "Actions for Vehicle Configuration:"; configLabel.textScale = 0.8f; configLabel.relativePosition = new Vector3(16, height - 65); m_import = UIUtils.CreateButton(this); m_import.text = "Import"; m_import.width = 80; m_import.tooltip = "Import the configuration"; m_import.relativePosition = new Vector3(10, height - 45); m_export = UIUtils.CreateButton(this); m_export.text = "Export"; m_export.width = 80; m_export.tooltip = "Export the configuration"; m_export.relativePosition = new Vector3(95, height - 45); m_resetall = UIUtils.CreateButton(this); m_resetall.text = "Reset all"; m_resetall.width = 80; m_resetall.tooltip = "Reset full configuration"; m_resetall.relativePosition = new Vector3(180, height - 45); // Preview UIPanel panel = AddUIComponent <UIPanel>(); panel.backgroundSprite = "GenericPanel"; panel.width = WIDTHRIGHT - 10; panel.height = HEIGHT - 420; panel.relativePosition = new Vector3(WIDTHLEFT + 5, offset); m_preview = panel.AddUIComponent <UITextureSprite>(); m_preview.size = panel.size; m_preview.relativePosition = Vector3.zero; m_previewRenderer = gameObject.AddComponent <PreviewRenderer>(); m_previewRenderer.size = m_preview.size * 2; // Twice the size for anti-aliasing m_preview.texture = m_previewRenderer.texture; // Follow a vehicle if (m_cameraController != null) { m_followVehicle = AddUIComponent <UISprite>(); m_followVehicle.spriteName = "LocationMarkerFocused"; m_followVehicle.width = m_followVehicle.spriteInfo.width; m_followVehicle.height = m_followVehicle.spriteInfo.height; m_followVehicle.tooltip = "Click here to cycle through the existing vehicles of that type.\nHold Shift Key down for zooming directly to vehicle."; m_followVehicle.relativePosition = new Vector3(panel.relativePosition.x + panel.width - m_followVehicle.width - 5, panel.relativePosition.y + 5); m_followVehicle.eventClick += (c, p) => FollowNextVehicle(); } //Remove the followed vehicle { m_removeVehicle = AddUIComponent <UISprite>(); m_removeVehicle.Hide(); m_removeVehicle.spriteName = "IconPolicyOldTown"; m_removeVehicle.width = m_removeVehicle.spriteInfo.width - 12; m_removeVehicle.height = m_removeVehicle.spriteInfo.height - 12; m_removeVehicle.tooltip = "Click here to remove the selected vehicle."; m_removeVehicle.relativePosition = new Vector3(panel.relativePosition.x + panel.width - m_removeVehicle.width - 33, panel.relativePosition.y + 7); m_removeVehicle.eventClick += (c, p) => RemoveThisVehicle(); } // Option panel m_optionPanel = AddUIComponent <UIOptionPanel>(); m_optionPanel.relativePosition = new Vector3(WIDTHLEFT, height - 370); // Event handlers m_fastList.eventSelectedIndexChanged += OnSelectedItemChanged; m_optionPanel.eventEnableCheckChanged += OnEnableStateChanged; m_import.eventClick += (c, t) => { DefaultOptions.RestoreAll(); AdvancedVehicleOptionsUID.ImportConfig(); optionList = AdvancedVehicleOptionsUID.config.options; }; m_export.eventClick += (c, t) => AdvancedVehicleOptionsUID.ExportConfig(); m_resetall.eventClick += (c, t) => { ConfirmPanel.ShowModal("Confirm Reset Configuration", "Customized settings for all vehicles will be reset.\n\n" + "Proceed with Configuration reset ?", (comp, ret) => { if (ret != 1) { return; } DefaultOptions.RestoreAll(); AdvancedVehicleOptionsUID.ResetConfig(); optionList = AdvancedVehicleOptionsUID.config.options; ExceptionPanel resetpanel = UIView.library.ShowModal <ExceptionPanel>("ExceptionPanel"); resetpanel.SetMessage("Advanced Vehicle Options", "All vehicle configuration and customized settings\n" + "have been reset to the Game Defaults.", false); }); }; panel.eventMouseDown += (c, p) => { eventMouseMove += RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseUp += (c, p) => { eventMouseMove -= RotateCamera; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; panel.eventMouseWheel += (c, p) => { m_previewRenderer.zoom -= Mathf.Sign(p.wheelDelta) * 0.25f; if (m_optionPanel.m_options != null && m_optionPanel.m_options.useColorVariations) { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab, m_previewColor); } else { m_previewRenderer.RenderVehicle(m_optionPanel.m_options.prefab); } }; }
public override void Start() { name = "CCX_MainWindow"; atlas = UIUtils.GetAtlas("Ingame"); backgroundSprite = "SubcategoriesPanel"; size = new Vector2(465, 180); isVisible = false; UIDragHandle dragHandle = AddUIComponent <UIDragHandle>(); dragHandle.target = parent; dragHandle.relativePosition = Vector3.zero; UIButton close = AddUIComponent <UIButton>(); close.size = new Vector2(30f, 30f); close.text = "X"; close.textScale = 0.9f; close.textColor = new Color32(118, 123, 123, 255); close.focusedTextColor = new Color32(118, 123, 123, 255); close.hoveredTextColor = new Color32(140, 142, 142, 255); close.pressedTextColor = new Color32(99, 102, 102, 102); close.textPadding = new RectOffset(8, 8, 8, 8); close.canFocus = false; close.playAudioEvents = true; close.relativePosition = new Vector3(width - close.width, 0); close.eventClicked += (c, p) => { if (isVisible) { CameraDirector.ToggleUI(); } }; // Control panel UILabel label = AddUIComponent <UILabel>(); label.textScale = 0.9f; label.text = "Cinematic Camera Extended"; label.relativePosition = new Vector2(8, 8); label.SendToBack(); UIPanel controlPanel = AddUIComponent <UIPanel>(); controlPanel.atlas = atlas; controlPanel.backgroundSprite = "GenericPanel"; controlPanel.color = new Color32(206, 206, 206, 255); controlPanel.size = new Vector2(width - 16, 46); controlPanel.relativePosition = new Vector2(8, 28); addKnotButton = UIUtils.CreateButton(controlPanel); addKnotButton.name = "CCX_AddKnot"; addKnotButton.textScale = 1.5f; addKnotButton.text = "+"; addKnotButton.size = new Vector2(40f, 30f); addKnotButton.relativePosition = new Vector3(8, 8); addKnotButton.tooltip = "Add a new point to the path"; playButton = UIUtils.CreateButton(controlPanel); playButton.name = "CCX_Play"; playButton.textScale = 1.5f; playButton.text = ">"; playButton.size = new Vector2(40f, 30f); playButton.playAudioEvents = false; playButton.relativePosition = new Vector3(controlPanel.width - playButton.width - 8, 8); playButton.tooltip = "Play the current path"; playSpeedDropDown = UIUtils.CreateDropDown(controlPanel); playSpeedDropDown.width = 75; playSpeedDropDown.items = new string[] { "x 1/16", "x 1/8", "x 1/4", "x 1/2", "x 1", "x 2", "x 4", "x 8", "x 16" }; playSpeedDropDown.selectedValue = "x 1"; playSpeedDropDown.relativePosition = new Vector3(playButton.relativePosition.x - playSpeedDropDown.width - 8, 8); playSpeedDropDown.tooltip = "Playback speed"; timelineSlider = controlPanel.AddUIComponent <UISlider>(); timelineSlider.name = "CCX_TimelineSlider"; timelineSlider.size = new Vector2(playSpeedDropDown.relativePosition.x - addKnotButton.relativePosition.x - addKnotButton.width - 20, 18); timelineSlider.relativePosition = new Vector2(addKnotButton.relativePosition.x + addKnotButton.width + 10, 14); UISlicedSprite bgSlider = timelineSlider.AddUIComponent <UISlicedSprite>(); bgSlider.atlas = atlas; bgSlider.spriteName = "BudgetSlider"; bgSlider.size = new Vector2(timelineSlider.width, 9); bgSlider.relativePosition = new Vector2(0, 4); bgSlider.tooltip = "Drag the slider to preview the animation"; UISlicedSprite thumb = timelineSlider.AddUIComponent <UISlicedSprite>(); thumb.atlas = atlas; thumb.spriteName = "SliderBudget"; timelineSlider.thumbObject = thumb; timelineSlider.minValue = 0f; timelineSlider.maxValue = 1f; timelineSlider.stepSize = 0; timelineSlider.value = 0; // FOV panel UIPanel fovPanel = AddUIComponent <UIPanel>(); fovPanel.atlas = atlas; fovPanel.backgroundSprite = "GenericPanel"; fovPanel.color = new Color32(206, 206, 206, 255); fovPanel.size = new Vector2(width - 120 - 8 * 3, 46); fovPanel.relativePosition = new Vector2(8, controlPanel.relativePosition.y + controlPanel.height + 8); label = fovPanel.AddUIComponent <UILabel>(); label.textScale = 0.9f; label.text = "Fov:"; label.autoSize = false; label.height = 30; label.verticalAlignment = UIVerticalAlignment.Middle; label.relativePosition = new Vector2(8, 8); fovInput = UIUtils.CreateTextField(fovPanel); fovInput.name = "CCX_MainFovInput"; fovInput.size = new Vector2(45f, 26); fovInput.text = (2f * CameraDirector.camera.fieldOfView).ToString(); fovInput.numericalOnly = true; fovInput.allowFloats = true; fovInput.padding.top = 6; fovInput.relativePosition = new Vector3(fovPanel.width - fovInput.width - 8, 10); fovInput.tooltip = "Field of view in degrees"; fovSlider = fovPanel.AddUIComponent <UISlider>(); fovSlider.name = "CCX_TimelineSlider"; fovSlider.size = new Vector2(fovInput.relativePosition.x - label.relativePosition.x - label.width - 20, 18); fovSlider.relativePosition = new Vector2(label.relativePosition.x + label.width + 10, 14); bgSlider = fovSlider.AddUIComponent <UISlicedSprite>(); bgSlider.atlas = atlas; bgSlider.spriteName = "BudgetSlider"; bgSlider.size = new Vector2(fovSlider.width, 9); bgSlider.relativePosition = new Vector2(0, 4); bgSlider.tooltip = "Drag the slider to change the field of view"; thumb = fovSlider.AddUIComponent <UISlicedSprite>(); thumb.atlas = atlas; thumb.spriteName = "SliderBudget"; fovSlider.thumbObject = thumb; fovSlider.minValue = 20f; fovSlider.maxValue = 179f; fovSlider.stepSize = 1f; fovSlider.value = CameraDirector.camera.fieldOfView * 2f; // FPS panel UIPanel fpsPanel = AddUIComponent <UIPanel>(); fpsPanel.atlas = atlas; fpsPanel.backgroundSprite = "GenericPanel"; fpsPanel.color = new Color32(206, 206, 206, 255); fpsPanel.size = new Vector2(120, 46); fpsPanel.relativePosition = new Vector2(fovPanel.relativePosition.x + fovPanel.width + 8, fovPanel.relativePosition.y); fpsInput = UIUtils.CreateTextField(fpsPanel); fpsInput.name = "CCX_FpsInput"; fpsInput.size = new Vector2(45f, 26); fpsInput.text = CameraDirector.fps.ToString(); fpsInput.numericalOnly = true; fpsInput.allowFloats = true; fpsInput.padding.top = 6; fpsInput.relativePosition = new Vector3(fpsPanel.width - fpsInput.width - 8, 10); fpsInput.tooltip = "Fps"; fpsInput.tooltip = "Sync the camera and the simulation at a set frame rate"; fpsCheckBox = UIUtils.CreateCheckBox(fpsPanel); fpsCheckBox.text = "Fps:"; fpsCheckBox.isChecked = false; fpsCheckBox.width = fpsPanel.width - fpsInput.width - 24; fpsCheckBox.relativePosition = new Vector2(8, 16); fpsCheckBox.tooltip = "Sync the camera and the simulation at a set frame rate"; // Hide UI checkbox hideUICheckBox = UIUtils.CreateCheckBox(this); hideUICheckBox.name = "CCX_HideUICheckBox"; hideUICheckBox.text = "Hide UI during playback"; hideUICheckBox.isChecked = true; hideUICheckBox.width = width - 16; hideUICheckBox.relativePosition = new Vector2(8, fovPanel.relativePosition.y + fovPanel.height + 8); // Start simulation checkbox startSimCheckBox = UIUtils.CreateCheckBox(this); startSimCheckBox.name = "CCX_StartSimCheckBox"; startSimCheckBox.text = "Unpause simulation"; startSimCheckBox.isChecked = false; startSimCheckBox.width = (width - 16) / 2; startSimCheckBox.relativePosition = new Vector2(8, hideUICheckBox.relativePosition.y + hideUICheckBox.height + 8); // FastList fastList = UIFastList.Create <UIKnotsListRow>(this); fastList.backgroundSprite = "UnlockingPanel"; fastList.width = width - 16; fastList.height = 46 * 5; fastList.canSelect = true; fastList.relativePosition = new Vector3(8, startSimCheckBox.relativePosition.y + startSimCheckBox.height + 8); fastList.rowHeight = 46f; fastList.rowsData = CameraDirector.cameraPath.knots; // Load/Save saveLoadButton = UIUtils.CreateButton(this); saveLoadButton.name = "CCX_SaveLoadButton"; saveLoadButton.text = "Save/Load"; saveLoadButton.size = new Vector2(100f, 30f); saveLoadButton.relativePosition = new Vector3(width - saveLoadButton.width - 8, fastList.relativePosition.y + fastList.height + 8); saveLoadButton.tooltip = "Work in progress"; height = saveLoadButton.relativePosition.y + saveLoadButton.height + 8; dragHandle.size = size; absolutePosition = new Vector3(savedWindowX.value, savedWindowY.value); MakePixelPerfect(); addKnotButton.eventClicked += (c, p) => { int i = CameraDirector.cameraPath.AddKnot(); fastList.DisplayAt(i); timelineSlider.minValue = 0f; float duration = CameraDirector.cameraPath.CalculateTotalDuraction(); if (duration <= 0f) { duration = 1f; } timelineSlider.maxValue = duration; }; playButton.eventClicked += (c, p) => { CameraDirector.cameraPath.Play(); }; timelineSlider.eventMouseDown += (c, p) => { CameraPath.currentTransfrom = new Knot(); }; timelineSlider.eventValueChanged += (c, p) => { CameraDirector.cameraPath.SetToTime(p); }; hideUICheckBox.eventCheckChanged += (c, p) => { CameraDirector.freeCamera = p; }; startSimCheckBox.eventCheckChanged += (c, p) => { CameraDirector.startSimulation = p; }; fovSlider.eventValueChanged += (c, p) => { CameraDirector.camera.fieldOfView = p / 2f; fovInput.text = p.ToString(); }; fovInput.eventTextSubmitted += (c, p) => { float value; if (float.TryParse(p, out value)) { CameraDirector.camera.fieldOfView = Mathf.Clamp(value, 20f, 179f) / 2f; if (fovSlider.value != value) { fovSlider.value = value; } } fovInput.text = (2f * CameraDirector.camera.fieldOfView).ToString(); }; fovInput.eventMouseWheel += (c, p) => { if (!p.used) { fovSlider.value += p.wheelDelta; p.Use(); } }; fpsCheckBox.eventCheckChanged += (c, p) => { CameraDirector.useFps = p; }; fpsInput.eventTextSubmitted += (c, p) => { float value; if (float.TryParse(p, out value)) { CameraDirector.fps = Mathf.Max(0, value); } fpsInput.text = CameraDirector.fps.ToString(); }; fpsInput.eventMouseWheel += (c, p) => { if (!p.used) { CameraDirector.fps = Mathf.Max(0, CameraDirector.fps + p.wheelDelta); fpsInput.text = CameraDirector.fps.ToString(); p.Use(); } }; saveLoadButton.eventClicked += (c, p) => { if (saveLoadWindow == null) { saveLoadWindow = (UISaveLoadWindow)GetUIView().AddUIComponent(typeof(UISaveLoadWindow)); } else { Destroy(saveLoadWindow); } }; DebugUtils.Log("UIMainWindow created"); }