public SimpleQuad(String name, String materialName, float left, float top, float width, float height, ColourValue colour) { Panel = OverlayManager.Singleton.CreateOverlayElement("Panel", name) as OverlayContainer; Panel.MetricsMode = GuiMetricsMode.GMM_RELATIVE; Panel.SetDimensions(width, height); Panel.SetPosition(left, top); Panel.MaterialName = materialName; Panel.Colour = colour; }
private void stateChanged(OverlayContainer c, Visibility state) { switch (state) { case Visibility.Hidden: StateBackground.FadeOut(200); break; case Visibility.Visible: StateBackground.FadeIn(200); break; } }
public OverlayScene(Vector screenSize) { m_ScreenSize = screenSize; //note we need to load a font if we want to use a font var font = FontManager.Singleton.Create("Arial", ResourceGroupManager.DEFAULT_RESOURCE_GROUP_NAME); font.SetParameter("type", "truetype"); font.SetParameter("source", "Arial.ttf"); font.SetParameter("size", "16"); font.SetParameter("resolution", "96"); font.Load(); m_Container = (OverlayContainer)OverlayManager.Singleton.CreateOverlayElement("Panel", "PanelName"); //note positions and sizes are in relative screen space m_Container.SetPosition(0.35, 0.3); m_Container.SetDimensions(0.3, 0.5); m_Container.MaterialName = "triangle/red"; m_Overlay = OverlayManager.Singleton.Create("bob"); m_Overlay.Add2D(m_Container); m_Overlay.Show(); }
// User defined event handlers that are called when a Selection is made. // Reemplazado por Manejo de Eventos // GDZ //List<MemberFunctionSlot> mOnSelectUserEventHandlers = new List<MemberFunctionSlot>(); internal ComboBox(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, ParentWidget) { mListItemHorizontalAlignment = GuiHorizontalAlignment.GHA_CENTER; mListItemVerticalAlignment = GuiVerticalAlignment.GVA_CENTER; mWidgetType = Widget.WidgetType.QGUI_TYPE_COMBOBOX; // Create CloseButton - remember to position it relative to it's parent (TitleBar) // Height of the Title Bar float height = (mAbsoluteDimensions.w / mAbsoluteDimensions.z); // Button has same height as width - Make the button slightly smaller that the titlebar height float buttonHeight = 0.8f; float buttonWidth = (height * buttonHeight); // Make a 5 pixel buffer float buffer = 5.0f / mPixelDimensions.z; Vector4 bDimensions = new Vector4((1 - (buttonWidth + buffer)), 0.1f, buttonWidth, buttonHeight); mButton = new Button(mInstanceName + ".button", bDimensions, QGuiMetricsMode.QGUI_GMM_RELATIVE, QGuiMetricsMode.QGUI_GMM_RELATIVE, mWidgetMaterial + ".button", mChildrenContainer, this); mButton.setZOrderOffset(1); _addChildWidget(mButton); // Make a 15 pixel buffer for the Label float bigBuffer = 15.0f / mPixelDimensions.z; mLabel = new Label(mInstanceName + ".Label", new Vector4(bigBuffer, 0, (1 - (buttonWidth + bigBuffer)), 1), QGuiMetricsMode.QGUI_GMM_RELATIVE, QGuiMetricsMode.QGUI_GMM_RELATIVE, "", mChildrenContainer, this); mLabel.OnDeactivate += new DeactivateEventHandler(ComboBox_OnDeactivate); //Reemplazado por Manejo de Eventos //GDZ //mLabel.addEventHandler((int)Widget.Event.QGUI_EVENT_DEACTIVATED, this); mLabel.setZOrderOffset(1); _addChildWidget(mLabel); mList = new List(mInstanceName + ".List", new Mogre.Vector3(0, 1.0f, 1.0f), QGuiMetricsMode.QGUI_GMM_RELATIVE, QGuiMetricsMode.QGUI_GMM_RELATIVE, mWidgetMaterial + ".list", getSheet().getMenuContainer(), this); mList.setCharacterHeight(mCharacterHeight); mList.setFont(mFont); mList.setTextColor(mTextTopColor, mTextBotColor); mList.hide(); int derivedZOrder = getSheet().getMenuOverlayZOrder() + 1; Window w = getWindow(); if (w != null) { mList.setZOrderOffset(derivedZOrder - getWindow().getZOrder(), false); } else { mList.setZOrderOffset(derivedZOrder, false); } _addChildWidget(mList); OnDeactivate += new DeactivateEventHandler(ComboBox_OnDeactivate); OnMouseEnter += new MouseEnterEventHandler(ComboBox_OnMouseEnter); OnMouseLeaves += new MouseLeavesEventHandler(ComboBox_OnMouseLeaves); OnMouseButtonDown += new MouseButtonDownEventHandler(ComboBox_OnMouseButtonDown); OnMouseButtonUp += new MouseButtonUpEventHandler(ComboBox_OnMouseButtonUp); }
protected override void LoadComplete() { base.LoadComplete(); // The next time this is updated is in UpdateAfterChildren, which occurs too late and results // in the cursor being shown for a few frames during the intro. // This prevents the cursor from showing until we have a screen with CursorVisible = true MenuCursorContainer.CanShowCursor = menuScreen?.CursorVisible ?? false; // todo: all archive managers should be able to be looped here. SkinManager.PostNotification = n => notifications?.Post(n); SkinManager.GetStableStorage = GetStorageForStableInstall; BeatmapManager.PostNotification = n => notifications?.Post(n); BeatmapManager.GetStableStorage = GetStorageForStableInstall; BeatmapManager.PresentImport = items => PresentBeatmap(items.First()); ScoreManager.PostNotification = n => notifications?.Post(n); ScoreManager.PresentImport = items => PresentScore(items.First()); Container logoContainer; dependencies.CacheAs(idleTracker = new GameIdleTracker(6000)); AddRange(new Drawable[] { new VolumeControlReceptor { RelativeSizeAxes = Axes.Both, ActionRequested = action => volume.Adjust(action), ScrollActionRequested = (action, amount, isPrecise) => volume.Adjust(action, amount, isPrecise), }, screenContainer = new ScalingContainer(ScalingMode.ExcludeOverlays) { RelativeSizeAxes = Axes.Both, Children = new Drawable[] { screenStack = new OsuScreenStack { RelativeSizeAxes = Axes.Both }, logoContainer = new Container { RelativeSizeAxes = Axes.Both }, } }, overlayContent = new Container { RelativeSizeAxes = Axes.Both }, rightFloatingOverlayContent = new Container { RelativeSizeAxes = Axes.Both }, leftFloatingOverlayContent = new Container { RelativeSizeAxes = Axes.Both }, topMostOverlayContent = new Container { RelativeSizeAxes = Axes.Both }, idleTracker }); screenStack.ScreenPushed += screenPushed; screenStack.ScreenExited += screenExited; loadComponentSingleFile(osuLogo, logo => { logoContainer.Add(logo); // Loader has to be created after the logo has finished loading as Loader performs logo transformations on entering. screenStack.Push(new Loader { RelativeSizeAxes = Axes.Both }); }); loadComponentSingleFile(Toolbar = new Toolbar { OnHome = delegate { CloseAllOverlays(false); menuScreen?.MakeCurrent(); }, }, d => { topMostOverlayContent.Add(d); toolbarElements.Add(d); }); loadComponentSingleFile(volume = new VolumeOverlay(), leftFloatingOverlayContent.Add); loadComponentSingleFile(new OnScreenDisplay(), Add, true); loadComponentSingleFile(notifications = new NotificationOverlay { GetToolbarHeight = () => ToolbarOffset, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, rightFloatingOverlayContent.Add, true); loadComponentSingleFile(screenshotManager, Add); //overlay elements loadComponentSingleFile(direct = new DirectOverlay(), overlayContent.Add, true); loadComponentSingleFile(social = new SocialOverlay(), overlayContent.Add, true); loadComponentSingleFile(channelManager = new ChannelManager(), AddInternal, true); loadComponentSingleFile(chatOverlay = new ChatOverlay(), overlayContent.Add, true); loadComponentSingleFile(settings = new SettingsOverlay { GetToolbarHeight = () => ToolbarOffset }, leftFloatingOverlayContent.Add, true); var changelogOverlay = loadComponentSingleFile(new ChangelogOverlay(), overlayContent.Add, true); loadComponentSingleFile(userProfile = new UserProfileOverlay(), overlayContent.Add, true); loadComponentSingleFile(beatmapSetOverlay = new BeatmapSetOverlay(), overlayContent.Add, true); loadComponentSingleFile(new LoginOverlay { GetToolbarHeight = () => ToolbarOffset, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, rightFloatingOverlayContent.Add, true); loadComponentSingleFile(new MusicController { GetToolbarHeight = () => ToolbarOffset, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, d => { rightFloatingOverlayContent.Add(d); toolbarElements.Add(d); }, true); loadComponentSingleFile(new AccountCreationOverlay(), topMostOverlayContent.Add, true); loadComponentSingleFile(new DialogOverlay(), topMostOverlayContent.Add, true); loadComponentSingleFile(externalLinkOpener = new ExternalLinkOpener(), topMostOverlayContent.Add); chatOverlay.State.ValueChanged += state => channelManager.HighPollRate.Value = state.NewValue == Visibility.Visible; Add(externalLinkOpener = new ExternalLinkOpener()); var singleDisplaySideOverlays = new OverlayContainer[] { settings, notifications }; overlays.AddRange(singleDisplaySideOverlays); foreach (var overlay in singleDisplaySideOverlays) { overlay.State.ValueChanged += state => { if (state.NewValue == Visibility.Hidden) { return; } singleDisplaySideOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } // eventually informational overlays should be displayed in a stack, but for now let's only allow one to stay open at a time. var informationalOverlays = new OverlayContainer[] { beatmapSetOverlay, userProfile }; overlays.AddRange(informationalOverlays); foreach (var overlay in informationalOverlays) { overlay.State.ValueChanged += state => { if (state.NewValue == Visibility.Hidden) { return; } informationalOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chatOverlay, social, direct, changelogOverlay }; overlays.AddRange(singleDisplayOverlays); foreach (var overlay in singleDisplayOverlays) { overlay.State.ValueChanged += state => { // informational overlays should be dismissed on a show or hide of a full overlay. informationalOverlays.ForEach(o => o.Hide()); if (state.NewValue == Visibility.Hidden) { return; } singleDisplayOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } OverlayActivationMode.ValueChanged += mode => { if (mode.NewValue != OverlayActivation.All) { CloseAllOverlays(); } }; void updateScreenOffset() { float offset = 0; if (settings.State.Value == Visibility.Visible) { offset += ToolbarButton.WIDTH / 2; } if (notifications.State.Value == Visibility.Visible) { offset -= ToolbarButton.WIDTH / 2; } screenContainer.MoveToX(offset, SettingsPanel.TRANSITION_LENGTH, Easing.OutQuint); } settings.State.ValueChanged += _ => updateScreenOffset(); notifications.State.ValueChanged += _ => updateScreenOffset(); }
protected override void LoadComplete() { base.LoadComplete(); // hook up notifications to components. BeatmapManager.PostNotification = n => notificationOverlay?.Post(n); BeatmapManager.GetStableStorage = GetStorageForStableInstall; AddRange(new Drawable[] { new VolumeControlReceptor { RelativeSizeAxes = Axes.Both, ActionRequested = action => volume.Adjust(action) }, mainContent = new Container { RelativeSizeAxes = Axes.Both, }, volume = new VolumeControl(), overlayContent = new Container { RelativeSizeAxes = Axes.Both }, new OnScreenDisplay(), }); LoadComponentAsync(screenStack = new Loader(), d => { screenStack.ModePushed += screenAdded; screenStack.Exited += screenRemoved; mainContent.Add(screenStack); }); //overlay elements LoadComponentAsync(direct = new DirectOverlay { Depth = -1 }, mainContent.Add); LoadComponentAsync(social = new SocialOverlay { Depth = -1 }, mainContent.Add); LoadComponentAsync(chat = new ChatOverlay { Depth = -1 }, mainContent.Add); LoadComponentAsync(settings = new MainSettings { GetToolbarHeight = () => ToolbarOffset, Depth = -1 }, overlayContent.Add); LoadComponentAsync(userProfile = new UserProfileOverlay { Depth = -2 }, mainContent.Add); LoadComponentAsync(musicController = new MusicController { Depth = -3, Position = new Vector2(0, Toolbar.HEIGHT), Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); LoadComponentAsync(notificationOverlay = new NotificationOverlay { Depth = -3, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); LoadComponentAsync(dialogOverlay = new DialogOverlay { Depth = -5, }, overlayContent.Add); Logger.NewEntry += entry => { if (entry.Level < LogLevel.Important) { return; } notificationOverlay.Post(new SimpleNotification { Text = $@"{entry.Level}: {entry.Message}" }); }; dependencies.Cache(settings); dependencies.Cache(social); dependencies.Cache(direct); dependencies.Cache(chat); dependencies.Cache(userProfile); dependencies.Cache(musicController); dependencies.Cache(notificationOverlay); dependencies.Cache(dialogOverlay); // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; foreach (var overlay in singleDisplayOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } foreach (var c in singleDisplayOverlays) { if (c == overlay) { continue; } c.State = Visibility.Hidden; } }; } LoadComponentAsync(Toolbar = new Toolbar { Depth = -4, OnHome = delegate { hideAllOverlays(); intro?.ChildScreen?.MakeCurrent(); }, }, overlayContent.Add); settings.StateChanged += delegate { switch (settings.State) { case Visibility.Hidden: intro.MoveToX(0, SettingsOverlay.TRANSITION_LENGTH, Easing.OutQuint); break; case Visibility.Visible: intro.MoveToX(SettingsOverlay.SIDEBAR_WIDTH / 2, SettingsOverlay.TRANSITION_LENGTH, Easing.OutQuint); break; } }; Cursor.State = Visibility.Hidden; }
public static void ChangeContainerColour(OverlayContainer cont, ColourValue c) { ChangeContainerColour(cont, c, c); }
protected override void LoadComplete() { base.LoadComplete(); // The next time this is updated is in UpdateAfterChildren, which occurs too late and results // in the cursor being shown for a few frames during the intro. // This prevents the cursor from showing until we have a screen with CursorVisible = true CursorOverrideContainer.CanShowCursor = currentScreen?.CursorVisible ?? false; // hook up notifications to components. BeatmapManager.PostNotification = n => notifications?.Post(n); BeatmapManager.GetStableStorage = GetStorageForStableInstall; AddRange(new Drawable[] { new VolumeControlReceptor { RelativeSizeAxes = Axes.Both, ActionRequested = action => volume.Adjust(action) }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, }); loadComponentSingleFile(screenStack = new Loader(), d => { screenStack.ModePushed += screenAdded; screenStack.Exited += screenRemoved; mainContent.Add(screenStack); }); loadComponentSingleFile(Toolbar = new Toolbar { Depth = -5, OnHome = delegate { hideAllOverlays(); intro?.ChildScreen?.MakeCurrent(); }, }, overlayContent.Add); loadComponentSingleFile(volume = new VolumeControl(), Add); loadComponentSingleFile(onscreenDisplay = new OnScreenDisplay(), Add); //overlay elements loadComponentSingleFile(direct = new DirectOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(social = new SocialOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(chat = new ChatOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(settings = new MainSettings { GetToolbarHeight = () => ToolbarOffset, Depth = -1 }, overlayContent.Add); loadComponentSingleFile(userProfile = new UserProfileOverlay { Depth = -2 }, mainContent.Add); loadComponentSingleFile(beatmapSetOverlay = new BeatmapSetOverlay { Depth = -3 }, mainContent.Add); loadComponentSingleFile(musicController = new MusicController { Depth = -4, Position = new Vector2(0, Toolbar.HEIGHT), Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(notifications = new NotificationOverlay { GetToolbarHeight = () => ToolbarOffset, Depth = -4, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(dialogOverlay = new DialogOverlay { Depth = -6, }, overlayContent.Add); forwardLoggedErrorsToNotifications(); dependencies.Cache(settings); dependencies.Cache(onscreenDisplay); dependencies.Cache(social); dependencies.Cache(direct); dependencies.Cache(chat); dependencies.Cache(userProfile); dependencies.Cache(musicController); dependencies.Cache(beatmapSetOverlay); dependencies.Cache(notifications); dependencies.Cache(dialogOverlay); // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; foreach (var overlay in singleDisplayOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } foreach (var c in singleDisplayOverlays) { if (c == overlay) { continue; } c.State = Visibility.Hidden; } }; } // eventually informational overlays should be displayed in a stack, but for now let's only allow one to stay open at a time. var informationalOverlays = new OverlayContainer[] { beatmapSetOverlay, userProfile }; foreach (var overlay in informationalOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } foreach (var c in informationalOverlays) { if (c == overlay) { continue; } c.State = Visibility.Hidden; } }; } void updateScreenOffset() { float offset = 0; if (settings.State == Visibility.Visible) { offset += ToolbarButton.WIDTH / 2; } if (notifications.State == Visibility.Visible) { offset -= ToolbarButton.WIDTH / 2; } screenStack.MoveToX(offset, SettingsOverlay.TRANSITION_LENGTH, Easing.OutQuint); } settings.StateChanged += _ => updateScreenOffset(); notifications.StateChanged += _ => updateScreenOffset(); notifications.Enabled.BindTo(ShowOverlays); ShowOverlays.ValueChanged += show => { //central game screen change logic. if (!show) { hideAllOverlays(); musicController.State = Visibility.Hidden; Toolbar.State = Visibility.Hidden; } else { Toolbar.State = Visibility.Visible; } }; }
public List(string name, Vector3 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, new Vector4(dimensions.x, dimensions.y, dimensions.z, 0), positionMode, sizeMode, material, overlayContainer, ParentWidget) { mAutoNameListItemCount = 0; mAutoNameListCount = 0; mListItemHorizontalAlignment = GuiHorizontalAlignment.GHA_CENTER; mListItemVerticalAlignment = GuiVerticalAlignment.GVA_CENTER; mWidgetType = Widget.WidgetType.QGUI_TYPE_LIST; mDefaultListItemHeight = mParentWidget.getSize(QGuiMetricsMode.QGUI_GMM_ABSOLUTE).y; mHighlightMaterial = getSheet().getDefaultSkin() + ".list.highlight"; // create highlight container for the list mHighlightContainer = createOverlayContainer(mInstanceName + ".HighlightContainer", ""); mChildrenContainer.AddChildImpl(mHighlightContainer); mHighlightPanel = createPanelOverlayElement(mInstanceName + ".HighlightPanel", mPixelDimensions, mHighlightMaterial); mHighlightContainer.AddChild(mHighlightPanel); mHighlightPanel.Show(); mItems = new List <ListItem>(); mChildLists = new List <List>(); OnDeactivate += new DeactivateEventHandler(List_OnDeactivate); }
public GameEditorScreen() { editorPanel = null; }
/** Constructor * @param * name The name to be given to the widget (must be unique). * @param * dimensions The relative x Position, y Position, width and height of the widget. * @param * material Ogre material defining the widget image. * @param * overlayContainer associates the internal OverlayElement with a specified zOrder. * @param * ParentWidget parent widget which created this widget. */ public TextCursor(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, ParentWidget) { mWidgetType = Widget.WidgetType.QGUI_TYPE_TEXTCURSOR; float pixelWidth = GUIManager.Singleton.getRenderWindowWidth() * 0.01f; mPixelDimensions.z = Mogre.Math.Ceil(pixelWidth); mOverlayElement = createPanelOverlayElement(mInstanceName + "_Background", mPixelDimensions, ""); mOverlayContainer.AddChild(mOverlayElement); mOverlayElement.Show(); setMaterial(mWidgetMaterial); }
public Image(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, ParentWidget) { mWidgetType = Widget.WidgetType.QGUI_TYPE_IMAGE; mMaterialPtr = null; mOverlayElement = createPanelOverlayElement(mInstanceName + "_Background", mPixelDimensions, ""); mOverlayContainer.AddChild(mOverlayElement); mOverlayElement.Show(); setMaterial(mWidgetMaterial); }
public Button(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, ParentWidget) { mWidgetType = Widget.WidgetType.QGUI_TYPE_BUTTON; setCharacterHeight(0.5f); MaterialManager mm = MaterialManager.Singleton; mOverMaterialExists = mm.ResourceExists(mWidgetMaterial + ".over"); mDownMaterialExists = mm.ResourceExists(mWidgetMaterial + ".down"); OnMouseEnter += new MouseEnterEventHandler(Button_OnMouseEnter); OnMouseButtonDown += new MouseButtonDownEventHandler(Button_OnMouseButtonDown); OnMouseButtonUp += new MouseButtonUpEventHandler(Button_OnMouseButtonUp); OnMouseLeaves += new MouseLeavesEventHandler(Button_OnMouseLeaves); }
protected override void CreateGUI() { base.CreateGUI(); Vector2 m = GetMargin(); int h = (int)GetTextVSpacing(); guiWindow = mGui.createWindow(new Vector4(m.x, m.y, Viewport.ActualWidth / 2, Viewport.ActualHeight - m.y - h), "bgui.window", (int)wt.NONE, LanguageResources.GetString(LanguageKey.HallOfFame)); Callback cc = new Callback(this); // remember to give your program the BetaGUIListener interface float y = 0; for (int i = 0; i < highscores.Count; i++) { OverlayContainer c; c = guiWindow.createStaticText(new Vector4(105, 2 * GetTextVSpacing() + y, 100, GetTextVSpacing()), highscores[i].Score.ToString()); c = guiWindow.createStaticText(new Vector4(5, 2 * GetTextVSpacing() + y, 100, GetTextVSpacing()), highscores[i].Name); y += GetTextVSpacing(); if (i == 2) { y += GetTextVSpacing(); } foreach (OverlayElement element in c.GetChildIterator()) { if (i == 0) { // element.SetParameter("char_height", StringConverter.ToString(50f)); element.SetParameter("colour_top", "1.0 0.8 0.0"); element.SetParameter("colour_bottom", "0.9 0.7 0.0"); } else if (i == 1) { element.SetParameter("colour_top", "0.89 0.89 0.89"); element.SetParameter("colour_bottom", "1.0 1.0 0.9"); } else if (i == 2) { element.SetParameter("colour_top", "0.71 0.41 0.08"); element.SetParameter("colour_bottom", "0.80 0.50 0.25"); } } } if (survivalTime > 0) { y += 3 * GetTextVSpacing(); OverlayContainer c = guiWindow.createStaticText(new Vector4(5, y, 100, GetTextVSpacing()), LanguageResources.GetString(LanguageKey.SurvivalTime)); foreach (OverlayElement element in c.GetChildIterator()) { element.SetParameter("colour_top", "0.6 0.1 0.1"); element.SetParameter("colour_bottom", "0.6 0.2 0.2"); } c = guiWindow.createStaticText(new Vector4(275, y, 100, GetTextVSpacing()), String.Format("{0:f}s.", survivalTime)); foreach (OverlayElement element in c.GetChildIterator()) { element.SetParameter("colour_top", "0.6 0.1 0.1"); element.SetParameter("colour_bottom", "0.6 0.2 0.2"); } } y += 2 * GetTextVSpacing(); initButtons(1, 0); buttons[0] = guiWindow.createButton(new Vector4(0, y, Viewport.ActualWidth / 2, GetTextVSpacing()), "bgui.button", LanguageResources.GetString(LanguageKey.OK), cc, 0); selectButton(0); guiWindow.show(); }
protected override void LoadComplete() { base.LoadComplete(); // hook up notifications to components. BeatmapManager.PostNotification = n => notifications?.Post(n); BeatmapManager.GetStableStorage = GetStorageForStableInstall; AddRange(new Drawable[] { new VolumeControlReceptor { RelativeSizeAxes = Axes.Both, ActionRequested = action => volume.Adjust(action) }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, }); loadComponentSingleFile(screenStack = new Loader(), d => { screenStack.ModePushed += screenAdded; screenStack.Exited += screenRemoved; mainContent.Add(screenStack); }); loadComponentSingleFile(Toolbar = new Toolbar { Depth = -5, OnHome = delegate { hideAllOverlays(); intro?.ChildScreen?.MakeCurrent(); }, }, overlayContent.Add); loadComponentSingleFile(volume = new VolumeControl(), Add); loadComponentSingleFile(new OnScreenDisplay(), Add); //overlay elements loadComponentSingleFile(direct = new DirectOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(social = new SocialOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(chat = new ChatOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(settings = new MainSettings { GetToolbarHeight = () => ToolbarOffset, Depth = -1 }, overlayContent.Add); loadComponentSingleFile(userProfile = new UserProfileOverlay { Depth = -2 }, mainContent.Add); loadComponentSingleFile(beatmapSetOverlay = new BeatmapSetOverlay { Depth = -3 }, mainContent.Add); loadComponentSingleFile(musicController = new MusicController { Depth = -4, Position = new Vector2(0, Toolbar.HEIGHT), Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(notifications = new NotificationOverlay { GetToolbarHeight = () => ToolbarOffset, Depth = -4, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(dialogOverlay = new DialogOverlay { Depth = -6, }, overlayContent.Add); Logger.NewEntry += entry => { if (entry.Level < LogLevel.Important) { return; } notifications.Post(new SimpleNotification { Text = $@"{entry.Level}: {entry.Message}" }); }; dependencies.Cache(settings); dependencies.Cache(social); dependencies.Cache(direct); dependencies.Cache(chat); dependencies.Cache(userProfile); dependencies.Cache(musicController); dependencies.Cache(beatmapSetOverlay); dependencies.Cache(notifications); dependencies.Cache(dialogOverlay); // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; foreach (var overlay in singleDisplayOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } foreach (var c in singleDisplayOverlays) { if (c == overlay) { continue; } c.State = Visibility.Hidden; } }; } // eventually informational overlays should be displayed in a stack, but for now let's only allow one to stay open at a time. var informationalOverlays = new OverlayContainer[] { beatmapSetOverlay, userProfile }; foreach (var overlay in informationalOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } foreach (var c in informationalOverlays) { if (c == overlay) { continue; } c.State = Visibility.Hidden; } }; } void updateScreenOffset() { float offset = 0; if (settings.State == Visibility.Visible) { offset += ToolbarButton.WIDTH / 2; } if (notifications.State == Visibility.Visible) { offset -= ToolbarButton.WIDTH / 2; } screenStack.MoveToX(offset, SettingsOverlay.TRANSITION_LENGTH, Easing.OutQuint); } settings.StateChanged += _ => updateScreenOffset(); notifications.StateChanged += _ => updateScreenOffset(); Cursor.State = Visibility.Hidden; }
/// <summary> /// call create4LineDebugOverLay to create an Overlay with 4 text lines at the top left corrner /// </summary> protected virtual void create4LineDebugOverLay() { if (mPanel != null) { return; } // Create a panel // WTF I keep getting segmentfault when i use PanelOverlayElement, at the panel.addChild line. // prob in mono somewhere not reconizeing it derives from container? but HTF? //mPanel = OverlayManager.Instance.CreatePanelElement("Status/Panel"); OverlayElement el = OverlayManager.Instance.CreateOverlayElement("Panel", "DebugStatus/Panel"); mPanel = new OverlayContainer(OverlayElement.getCPtr(el).Handle, false); mPanel.setMetricsMode(GuiMetricsMode.GMM_PIXELS); mPanel.setPosition(10, 10); mPanel.setDimensions(500, 100); //mPanel->setMaterialName("MaterialName"); // Optional background material // Create a text area mODebugText1 = OverlayManager.Instance.CreateTextAreaElement("DebugStatus/DebugText1"); mPanel.addChild(mODebugText1); mODebugText1.setMetricsMode(GuiMetricsMode.GMM_PIXELS); mODebugText1.setPosition(0, 0); mODebugText1.setDimensions(100, 100); mODebugText1.setCaption(""); mODebugText1.setCharHeight(16); mODebugText1.setFontName("BlueHighway"); mODebugText1.setColourBottom(Converter.GetColor(0.3f, 0.5f, 0.3f)); mODebugText1.setColourTop(Converter.GetColor(0.5f, 0.7f, 0.5f)); // Create a text area mODebugText2 = OverlayManager.Instance.CreateTextAreaElement("DebugStatus/DebugText2"); mODebugText2.setMetricsMode(GuiMetricsMode.GMM_PIXELS); mODebugText2.setPosition(0, 20); mODebugText2.setDimensions(100, 100); mODebugText2.setCaption(""); mODebugText2.setCharHeight(16); mODebugText2.setFontName("BlueHighway"); mODebugText2.setColourBottom(Converter.GetColor(0.3f, 0.5f, 0.3f)); mODebugText2.setColourTop(Converter.GetColor(0.5f, 0.7f, 0.5f)); mPanel.addChild(mODebugText2); // Create a text area mODebugText3 = OverlayManager.Instance.CreateTextAreaElement("DebugStatus/DebugText3"); mODebugText3.setMetricsMode(GuiMetricsMode.GMM_PIXELS); mODebugText3.setPosition(0, 40); mODebugText3.setDimensions(100, 100); mODebugText3.setCaption(""); mODebugText3.setCharHeight(16); mODebugText3.setFontName("BlueHighway"); mODebugText3.setColourBottom(Converter.GetColor(0.3f, 0.5f, 0.3f)); mODebugText3.setColourTop(Converter.GetColor(0.5f, 0.7f, 0.5f)); mPanel.addChild(mODebugText3); // Create a text area mODebugText4 = OverlayManager.Instance.CreateTextAreaElement("DebugStatus/DebugText4"); mODebugText4.setMetricsMode(GuiMetricsMode.GMM_PIXELS); mODebugText4.setPosition(0, 60); mODebugText4.setDimensions(100, 100); mODebugText4.setCaption(""); mODebugText4.setCharHeight(16); mODebugText4.setFontName("BlueHighway"); mODebugText4.setColourBottom(Converter.GetColor(0.3f, 0.5f, 0.3f)); mODebugText4.setColourTop(Converter.GetColor(0.5f, 0.7f, 0.5f)); mPanel.addChild(mODebugText4); // Create an overlay, and add the panel mOverlay = OverlayManager.Instance.create("Status/Overlay"); mOverlay.add2D(mPanel); }
private bool initScreen(int i) { MaterialPtr overlayMaterial = null; TextureUnitState unit; animation = null; currentMaterialName = null; if (isScreenAnAd[i - 1]) // poczatkowo i = 1 { if (Mogre.Math.RangeRandom(0, 1) < (1 - C_INTRO_AD_PROBABILITY)) { return(false); } //if(adIds.Count == 0) return false; AdManager.AdStatus status = AdManager.Singleton.GetAd(C_AD_ZONE, 1.0f, out currentAd); //AdManager.AdStatus status = AdManager.Singleton.GatherAsyncResult(adIds.Dequeue(), AdManager.C_AD_DOWNLOAD_TIMEOUT, out currentAd); if (status == AdManager.AdStatus.OK) { // pobieranie OK. currentMaterialName = C_AD_MATERIAL; string path = AdManager.Singleton.LoadAdTexture(currentAd); if (path == null) { return(false); } showAdText(viewport); overlayMaterial = MaterialManager.Singleton.GetByName(currentMaterialName); overlayMaterial.Load(); unit = overlayMaterial.GetBestTechnique().GetPass(0).GetTextureUnitState(0); unit.SetTextureName(path); AdManager.Singleton.RegisterImpression(currentAd); // int count; // count = adAction.Get_Ad_Impression_Counter(currentAd.id); // Console.WriteLine("Pobrañ: " + count); } else { hideAdText(); return(false); } } else { string matName = EngineConfig.IsEnhancedVersion ? C_TEXTURE_NAME_ENHANCED : C_TEXTURE_NAME; currentMaterialName = matName + currentScreen; overlayMaterial = MaterialManager.Singleton.GetByName(currentMaterialName); unit = overlayMaterial.GetBestTechnique().GetPass(0).GetTextureUnitState(0); hideAdText(); } if (i == 1) { if (EngineConfig.SoundEnabled) { if (ravenSound == null || !ravenSound.HasSound()) { ravenSound = SoundManager3D.Instance.CreateAmbientSound(SoundManager3D.C_RAVEN, "ravenSound", false, false); // destroyed together with SoundManager3D singleton } ravenSound.Play(); } } textureDimensions = unit.GetTextureDimensions(); // Console.WriteLine(textureDimensions.first); PointD scale = new PointD(1, 1); // skaluj overlay tak aby tekstury nie zmienia³y swoich proporcji float prop = 1.0f; if (isScreenAnAd[currentScreen - 1]) { // reklamy maja zachowac oryginalna rozdzielczosc scale = AdSizeUtils.ScaleAdToDisplay(textureDimensions, new PointD(Viewport.ActualWidth, Viewport.ActualHeight), true); scale = 0.65f * scale; } else { textureDimensions = new Pair <uint, uint>(1280, 1024); // scale = AdSizeUtils.ScaleAdToDisplay(textureDimensions, new PointD(Viewport.ActualWidth, Viewport.ActualHeight), false); prop = 1.0f / ((1.0f * textureDimensions.first / textureDimensions.second) / (1.0f * Viewport.ActualWidth / Viewport.ActualHeight)); // wychodzimy poza ekran if (scale.Y * prop > 1.0f) { float scalingFactor = 1.0f / (scale.Y * prop); scale.X *= scalingFactor; scale.Y *= scalingFactor; } if (scale.X * prop > 1.0f) { float scalingFactor = 1.0f / (scale.X * prop); scale.X *= scalingFactor; scale.Y *= scalingFactor; } // scale.X *= 0.5f; scale.Y *= 0.5f; } overlay.SetScale(scale.X, scale.Y * prop); animation = new EffectTextureAnimation(null, unit, screenTimes[i - 1], "IntroAnimation", VisibilityNodeAnimation.VisibilityType.VISIBLE, VisibilityNodeAnimation.VisibilityType.VISIBLE); animation.Enabled = true; animation.Looped = true; OverlayContainer container = overlay.GetChild("Wof/IntroScreen"); container.MaterialName = currentMaterialName; EffectsManager.Singleton.AddCustomEffect(animation); lastChange = DateTime.Now; return(true); }
/** Constructor * @param * name The name to be given to the widget (must be unique). * @param * dimensions The x Position, y Position, width, and height of the widget. * @param * positionMode The GuiMetricsMode for the values given for the position. (absolute/relative/pixel) * @param * sizeMode The GuiMetricsMode for the values given for the size. (absolute/relative/pixel) * @param * material Ogre material defining the widget image. * @param * overlayContainer associates the internal OverlayElement with a specified zOrder. * @param * ParentWidget parent widget which created this widget. */ public TextBox(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, ParentWidget) { mWidgetType = Widget.WidgetType.QGUI_TYPE_TEXTBOX; mMaskUserInput = false; mBackSpaceDown = false; mBackSpaceTimer = 0.0f; mDeleteDown = false; mDeleteTimer = 0.0f; mLeftArrowDown = false; mRightArrowDown = false; mMoveCursorTimer = 0.0f; mCursorVisibilityTimer = 0.0f; mReadOnly = false; mInputMode = false; // Border Overlay gives us ability to assign material to TextBox border and Panel separately. mOverlayElement = createPanelOverlayElement(mInstanceName + ".Background", mPixelDimensions, ""); mOverlayContainer.AddChild(mOverlayElement); mOverlayElement.Show(); setMaterial(mWidgetMaterial); mCharacterHeight = 0.75f; Mogre.Vector3 textDimensions = new Mogre.Vector3(0, 0, mCharacterHeight); // Label has no material, since it directly overlaps the textbox overlay element mTextWidget = new Text(mInstanceName + ".Text", textDimensions, QGuiMetricsMode.QGUI_GMM_RELATIVE, QGuiMetricsMode.QGUI_GMM_RELATIVE, mChildrenContainer, this); mTextWidget.setTruncateMode(Text.TruncateMode.LEFT); mTextWidget.setTruncationFeedback(""); mTextWidget.setZOrderOffset(1); _addChildWidget(mTextWidget); mHorizontalAlignment = GuiHorizontalAlignment.GHA_LEFT; mVerticalAlignment = GuiVerticalAlignment.GVA_CENTER; alignText(mHorizontalAlignment, mVerticalAlignment); OnDeactivate += new DeactivateEventHandler(TextBox_OnDeactivate); OnCharacter += new CharacterEventHandler(TextBox_OnCharacter); OnKeyDown += new KeyDownEventHandler(TextBox_OnKeyDown); OnKeyUp += new KeyUpEventHandler(TextBox_OnKeyUp); OnMouseButtonDown += new MouseButtonDownEventHandler(TextBox_OnMouseButtonDown); OnTimeElapsed += new TimeElapsedHandler(TextBox_OnTimeElapsed); }
private void Initalize() { // Create the font resources // add the path to your resources.cfg // for example: // Default | ../../../Media/fonts | ../../../Media/fonts.zip Load("LiberationSans-Regular.ttf", Font.Default, 10); Load("LiberationSans-Bold.ttf", Font.DefaultBold, 15); Load("LiberationSans-Italic.ttf", Font.DefaultItalic, 10); //Load("LiberationMono-Regular.ttf", Font.Console, 26); // Create the overlay panel _OverlayPanel = OverlayManager.Singleton.CreateOverlayElement("Panel", new Guid().ToString()) as OverlayContainer; _OverlayPanel.MetricsMode = GuiMetricsMode.GMM_PIXELS; _OverlayPanel.SetPosition(0, 0); _OverlayPanel.SetDimensions(300, 120); _TextOverlay = OverlayManager.Singleton.Create(new Guid().ToString()); _TextOverlay.Add2D(_OverlayPanel); }
private bool initScreen(int i) { MaterialPtr overlayMaterial = null; TextureUnitState unit = null; animation = null; currentMaterialName = null; if (isScreenAnAd[i - 1]) // poczatkowo i = 1 { // pobierz i ustaw na bie¿ac¹ AdManager.AdStatus status = AdManager.Singleton.GetAd(C_AD_ZONE, 1.0f, out currentAd); if (status == AdManager.AdStatus.OK) { // pobieranie OK. currentMaterialName = C_AD_MATERIAL; string path = AdManager.Singleton.LoadAdTexture(currentAd); if (path == null) { return(false); } showAdText(viewport); overlayMaterial = MaterialManager.Singleton.GetByName(currentMaterialName); overlayMaterial.Load(); unit = overlayMaterial.GetBestTechnique().GetPass(0).GetTextureUnitState(0); unit.SetTextureName(path); AdManager.Singleton.RegisterImpression(currentAd); // int count; // count = adAction.Get_Ad_Impression_Counter(currentAd.id); // Console.WriteLine("Pobrañ: " + count); } else { hideAdText(); return(false); } } else { currentMaterialName = C_TEXTURE_NAME + currentScreen; overlayMaterial = MaterialManager.Singleton.GetByName(currentMaterialName); overlayMaterial.Load(); unit = overlayMaterial.GetBestTechnique().GetPass(0).GetTextureUnitState(0); hideAdText(); } textureDimensions = unit.GetTextureDimensions(); PointD scale = new PointD(1, 1); // skaluj overlay tak aby tekstury nie zmienia³y swoich proporcji float prop = 1.0f; if (isScreenAnAd[currentScreen - 1]) { // reklamy maja zachowac oryginalna rozdzielczosc scale = AdSizeUtils.ScaleAdToDisplay(textureDimensions, new PointD(Viewport.ActualWidth, Viewport.ActualHeight), true); scale = 0.65f * scale; } else { prop = 1.0f / ((1.0f * textureDimensions.first / textureDimensions.second) / (1.0f * Viewport.ActualWidth / Viewport.ActualHeight)); // wychodzimy poza ekran if (scale.Y * prop > 1.0f) { float scalingFactor = 1.0f / (scale.Y * prop); scale.X *= scalingFactor; scale.Y *= scalingFactor; } if (scale.X * prop > 1.0f) { float scalingFactor = 1.0f / (scale.X * prop); scale.X *= scalingFactor; scale.Y *= scalingFactor; } } overlay.SetScale(scale.X, scale.Y * prop); animation = new EffectTextureAnimation(null, unit, screenTimes[i - 1], "QuitAnimation", VisibilityNodeAnimation.VisibilityType.VISIBLE, VisibilityNodeAnimation.VisibilityType.VISIBLE); animation.Enabled = true; animation.Looped = true; OverlayContainer container = overlay.GetChild("Wof/QuitScreen"); container.MaterialName = currentMaterialName; EffectsManager.Singleton.AddCustomEffect(animation); lastChange = DateTime.Now; return(true); }
void IOverlayManager.ShowBlockingOverlay(OverlayContainer overlay) => Schedule(() => Stack.FadeColour(OsuColour.Gray(0.5f), 500, Easing.OutQuint));
/** Constructor * @param * name The name to be given to the widget (must be unique). * @param * dimensions The x Position, y Position, width, and height of the widget. * @param * positionMode The GuiMetricsMode for the values given for the position. (absolute/relative/pixel) * @param * sizeMode The GuiMetricsMode for the values given for the size. (absolute/relative/pixel) * @param * material Ogre material defining the widget image. * @param * overlayContainer associates the internal OverlayElement with a specified zOrder. * @param * parentWidget parent widget which created this widget. */ public Panel(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget parentWidget) : base(name, dimensions, positionMode, sizeMode, material, overlayContainer, parentWidget) { mAutoNameWidgetCounter = 0; mNumButtons = 0; mNumComboBoxes = 0; mNumImages = 0; mNumLabels = 0; mNumLists = 0; mNumMenus = 0; mNumNStateButtons = 0; mNumPanels = 0; mNumProgressBars = 0; mNumTextBoxes = 0; mNumTrackBars = 0; mWidgetType = WidgetType.QGUI_TYPE_PANEL; mZOrderValues.Clear(); if (overlayContainer == null) { mOverlayContainer = createOverlayContainer(mInstanceName + ".OverlayContainer", ""); mOverlayContainer.AddChildImpl(mChildrenContainer); mOverlayContainer.Show(); mChildrenContainer.Show(); } mOverlayElement = createPanelOverlayElement(mInstanceName + ".Background", mPixelDimensions, ""); mOverlayContainer.AddChild(mOverlayElement); mOverlayElement.Show(); setMaterial(mWidgetMaterial); OnActivate += new ActivateEventHandler(Panel_OnActivate); OnDeactivate += new DeactivateEventHandler(Panel_OnDeactivate); }
void IOverlayManager.HideBlockingOverlay(OverlayContainer overlay) => Schedule(() => Stack.FadeColour(Colour4.White, 500, Easing.OutQuint));
public ListItem(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, "", overlayContainer, ParentWidget) { mImage = null; mButton = null; mWidgetType = Widget.WidgetType.QGUI_TYPE_LISTITEM; setCharacterHeight(1.0f); OnDeactivate += new DeactivateEventHandler(ListItem_OnDeactivate); OnMouseEnter += new MouseEnterEventHandler(ListItem_OnMouseEnter); OnMouseButtonUp += new MouseButtonUpEventHandler(ListItem_OnMouseButtonUp); OnMouseLeaves += new MouseLeavesEventHandler(ListItem_OnMouseLeaves); }
// in the blocking methods below it is important to be careful about threading (e.g. use `Expire()` rather than `Remove()`, and schedule transforms), // because in the worst case the clean-up methods could be called from async disposal. IDisposable IOverlayManager.RegisterBlockingOverlay(OverlayContainer overlayContainer) { overlayContent.Add(overlayContainer); return(new InvokeOnDisposal(() => overlayContainer.Expire())); }
public void RemoveBlockingOverlay(OverlayContainer overlay) { visibleBlockingOverlays.Remove(overlay); updateBlockingOverlayFade(); }
public MenuList(string name, Vector4 dimensions, QGuiMetricsMode positionMode, QGuiMetricsMode sizeMode, string material, OverlayContainer overlayContainer, Widget ParentWidget) : base(name, dimensions, positionMode, sizeMode, material + ".button", overlayContainer, ParentWidget) { mWidgetType = Widget.WidgetType.QGUI_TYPE_MENULIST; setCharacterHeight(0.8f); // create list mList = new List(mInstanceName + ".List", new Vector3(0f, 1.0f, 1.0f), QGuiMetricsMode.QGUI_GMM_RELATIVE, QGuiMetricsMode.QGUI_GMM_RELATIVE, material + ".list", getSheet().getMenuContainer(), this); mList.setCharacterHeight(mCharacterHeight); mList.setFont(mFont); mList.setTextColor(mTextTopColor, mTextBotColor); mList.hide(); // give the list the same zOrder as the button representing this menulist. mList.setZOrderOffset(mZOrderOffset, false); _addChildWidget(mList); OnDeactivate += new DeactivateEventHandler(MenuList_OnDeactivate); }
public void RemoveBlockingOverlay(OverlayContainer overlay) => Schedule(() => { visibleBlockingOverlays.Remove(overlay); updateBlockingOverlayFade(); });
public void AddBlockingOverlay(OverlayContainer overlay) { if (!visibleBlockingOverlays.Contains(overlay)) visibleBlockingOverlays.Add(overlay); updateBlockingOverlayFade(); }
protected override void LoadComplete() { // this needs to be cached before base.LoadComplete as it is used by MenuCursorContainer. dependencies.Cache(screenshotManager = new ScreenshotManager()); base.LoadComplete(); // The next time this is updated is in UpdateAfterChildren, which occurs too late and results // in the cursor being shown for a few frames during the intro. // This prevents the cursor from showing until we have a screen with CursorVisible = true MenuCursorContainer.CanShowCursor = currentScreen?.CursorVisible ?? false; // hook up notifications to components. SkinManager.PostNotification = n => notifications?.Post(n); BeatmapManager.PostNotification = n => notifications?.Post(n); BeatmapManager.GetStableStorage = GetStorageForStableInstall; AddRange(new Drawable[] { new VolumeControlReceptor { RelativeSizeAxes = Axes.Both, ActionRequested = action => volume.Adjust(action), ScrollActionRequested = (action, amount, isPrecise) => volume.Adjust(action, amount, isPrecise), }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, }); loadComponentSingleFile(screenStack = new Loader(), d => { screenStack.ModePushed += screenAdded; screenStack.Exited += screenRemoved; mainContent.Add(screenStack); }); loadComponentSingleFile(Toolbar = new Toolbar { Depth = -5, OnHome = delegate { CloseAllOverlays(false); intro?.ChildScreen?.MakeCurrent(); }, }, overlayContent.Add); loadComponentSingleFile(volume = new VolumeOverlay(), overlayContent.Add); loadComponentSingleFile(onscreenDisplay = new OnScreenDisplay(), Add); loadComponentSingleFile(screenshotManager, Add); //overlay elements loadComponentSingleFile(direct = new DirectOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(social = new SocialOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(chat = new ChatOverlay { Depth = -1 }, mainContent.Add); loadComponentSingleFile(settings = new MainSettings { GetToolbarHeight = () => ToolbarOffset, Depth = -1 }, overlayContent.Add); loadComponentSingleFile(userProfile = new UserProfileOverlay { Depth = -2 }, mainContent.Add); loadComponentSingleFile(beatmapSetOverlay = new BeatmapSetOverlay { Depth = -3 }, mainContent.Add); loadComponentSingleFile(musicController = new MusicController { Depth = -4, Position = new Vector2(0, Toolbar.HEIGHT), Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(notifications = new NotificationOverlay { GetToolbarHeight = () => ToolbarOffset, Depth = -4, Anchor = Anchor.TopRight, Origin = Anchor.TopRight, }, overlayContent.Add); loadComponentSingleFile(dialogOverlay = new DialogOverlay { Depth = -6, }, overlayContent.Add); dependencies.Cache(settings); dependencies.Cache(onscreenDisplay); dependencies.Cache(social); dependencies.Cache(direct); dependencies.Cache(chat); dependencies.Cache(userProfile); dependencies.Cache(musicController); dependencies.Cache(beatmapSetOverlay); dependencies.Cache(notifications); dependencies.Cache(dialogOverlay); var singleDisplaySideOverlays = new OverlayContainer[] { settings, notifications }; overlays.AddRange(singleDisplaySideOverlays); foreach (var overlay in singleDisplaySideOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } singleDisplaySideOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } // eventually informational overlays should be displayed in a stack, but for now let's only allow one to stay open at a time. var informationalOverlays = new OverlayContainer[] { beatmapSetOverlay, userProfile }; overlays.AddRange(informationalOverlays); foreach (var overlay in informationalOverlays) { overlay.StateChanged += state => { if (state == Visibility.Hidden) { return; } informationalOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; overlays.AddRange(singleDisplayOverlays); foreach (var overlay in singleDisplayOverlays) { overlay.StateChanged += state => { // informational overlays should be dismissed on a show or hide of a full overlay. informationalOverlays.ForEach(o => o.Hide()); if (state == Visibility.Hidden) { return; } singleDisplayOverlays.Where(o => o != overlay).ForEach(o => o.Hide()); }; } OverlayActivationMode.ValueChanged += v => { if (v != OverlayActivation.All) { CloseAllOverlays(); } }; void updateScreenOffset() { float offset = 0; if (settings.State == Visibility.Visible) { offset += ToolbarButton.WIDTH / 2; } if (notifications.State == Visibility.Visible) { offset -= ToolbarButton.WIDTH / 2; } screenStack.MoveToX(offset, SettingsOverlay.TRANSITION_LENGTH, Easing.OutQuint); } settings.StateChanged += _ => updateScreenOffset(); notifications.StateChanged += _ => updateScreenOffset(); }
public override void Run() { type = EditType.EditAIMeshMode; state = EditState.Free; operation = EditOperation.None; float top = MARGIN_TOP; editorPanel = OverlayManager.Singleton.CreateOverlayElementFromTemplate("EditorPanel", "BorderPanel", "editorArea") as OverlayContainer; lbGeneral = GameManager.Instance.trayMgr.createStaticText(TrayLocation.TL_NONE, "lbGeneral", "General", ColourValue.Black); lbGeneral.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; lbGeneral.Left = 0.06f; lbGeneral.Top = top; top = lbGeneral.Top + lbGeneral.Height; editorPanel.AddChild(lbGeneral.getOverlayElement()); btnSave = GameManager.Instance.trayMgr.createButton(TrayLocation.TL_NONE, "btnSave", "Save", 150); btnSave.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; btnSave.Left = 0.06f; btnSave.Top = 0.02f + top; btnSave.OnClick += BtnSave_OnClick; top = btnSave.Top + btnSave.Height; editorPanel.AddChild(btnSave.getOverlayElement()); btnClose = GameManager.Instance.trayMgr.createButton(TrayLocation.TL_NONE, "btnClose", "Close", 150); btnClose.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; btnClose.Left = 0.06f; btnClose.Top = 0.02f + top; btnClose.OnClick += BtnClose_OnClick; top = btnClose.Top + btnClose.Height; editorPanel.AddChild(btnClose.getOverlayElement()); horline = OverlayManager.Singleton.CreateOverlayElementFromTemplate("AMGE/UI/HorizalLine", "Panel", "horline") as PanelOverlayElement; horline.MetricsMode = GuiMetricsMode.GMM_RELATIVE; horline.Left = 0.01f; horline.Width = 0.28f; horline.Top = 0.02f + top; top = horline.Top + horline.Height; editorPanel.AddChild(horline); lbAIMesh = GameManager.Instance.trayMgr.createStaticText(TrayLocation.TL_NONE, "lbAIMesh", "AIMesh", ColourValue.Black); lbAIMesh.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; lbAIMesh.Left = 0.06f; lbAIMesh.Top = 0.02f + top; top = lbAIMesh.Top + lbAIMesh.Height; editorPanel.AddChild(lbAIMesh.getOverlayElement()); btnAIMeshCreateVertex = GameManager.Instance.trayMgr.createButton(TrayLocation.TL_NONE, "btnCreateVertex", "Create Vertex", 150); btnAIMeshCreateVertex.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; btnAIMeshCreateVertex.Left = 0.06f; btnAIMeshCreateVertex.Top = 0.02f + top; btnAIMeshCreateVertex.OnClick += BtnAIMeshCreateVertex_OnClick; top = btnAIMeshCreateVertex.Top + btnAIMeshCreateVertex.Height; editorPanel.AddChild(btnAIMeshCreateVertex.getOverlayElement()); btnAIMeshCreateLine = GameManager.Instance.trayMgr.createButton(TrayLocation.TL_NONE, "btnCreateLine", "Create Line", 150); btnAIMeshCreateLine.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; btnAIMeshCreateLine.Left = 0.06f; btnAIMeshCreateLine.Top = 0.02f + top; btnAIMeshCreateLine.OnClick += BtnAIMeshCreateLine_OnClick; top = btnAIMeshCreateLine.Top + btnAIMeshCreateLine.Height; editorPanel.AddChild(btnAIMeshCreateLine.getOverlayElement()); horline2 = OverlayManager.Singleton.CreateOverlayElementFromTemplate("AMGE/UI/HorizalLine", "Panel", "horline2") as PanelOverlayElement; horline2.MetricsMode = GuiMetricsMode.GMM_RELATIVE; horline2.Left = 0.01f; horline2.Width = 0.28f; horline2.Top = 0.02f + top; top = horline2.Top + horline2.Height; editorPanel.AddChild(horline2); lbObjects = GameManager.Instance.trayMgr.createStaticText(TrayLocation.TL_NONE, "lbObjects", "Objects", ColourValue.Black); lbObjects.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; lbObjects.Left = 0.06f; lbObjects.Top = 0.02f + top; top = lbObjects.Top + lbObjects.Height; editorPanel.AddChild(lbObjects.getOverlayElement()); lsvObjects = GameManager.Instance.trayMgr.createListView(TrayLocation.TL_NONE, "lsvObjects", 0.3f, 0.22f, new List <string>() { "ObjectName" }); lsvObjects.Left = 0.03f; lsvObjects.Width = 0.24f; lsvObjects.Height = 0.3f; lsvObjects.Top = 0.02f + top; top = lsvObjects.Top + lsvObjects.Height; editorPanel.AddChild(lsvObjects.getOverlayElement()); btnAddObject = GameManager.Instance.trayMgr.createButton(TrayLocation.TL_NONE, "btnAddObject", "Add Object", 100); btnAddObject.WidgetMetricMode = GuiMetricsMode.GMM_RELATIVE; btnAddObject.Left = 0.14f; btnAddObject.Top = 0.02f + top; btnAddObject.OnClick += BtnAddObject_OnClick; top = btnAddObject.Top + btnAddObject.Height; editorPanel.AddChild(btnAddObject.getOverlayElement()); GameManager.Instance.trayMgr.getTraysLayer().Add2D(editorPanel); }
public OverlayGUI() { //setup the colours top = new ColourValue(0.9f, 0.9f, 0.9f); bot = new ColourValue(0.8f, 0.8f, 0.8f); seltop = new ColourValue(0.9f, 0.7f, 0.7f); selbot = new ColourValue(0.8f, 0.6f, 0.6f); //Overlay overlayManager = OverlayManager.Singleton; // Create a panel panel = (OverlayContainer)overlayManager.CreateOverlayElement("Panel", "PanelName"); panel.MetricsMode = GuiMetricsMode.GMM_PIXELS; panel.SetPosition(0, 0); panel.SetDimensions(Program.Instance.rWindow.Width, Program.Instance.rWindow.Height); panel.MaterialName = "fsO/Blank"; // Optional background material // Create a text area messageArea = (TextAreaOverlayElement)overlayManager.CreateOverlayElement("TextArea", "TextArea"); messageArea.MetricsMode = GuiMetricsMode.GMM_PIXELS; messageArea.SetPosition(0, 0); messageArea.SetDimensions(Program.Instance.rWindow.Width, 100); messageArea.CharHeight = 24; messageArea.FontName = "damn"; messageArea.ColourTop = top; messageArea.ColourBottom = bot; messageArea.Caption = ""; // Status text area statArea = (TextAreaOverlayElement)overlayManager.CreateOverlayElement("TextArea", "StatTextArea"); statArea.MetricsMode = GuiMetricsMode.GMM_PIXELS; statArea.SetPosition(0, Program.Instance.rWindow.Height - 50); statArea.SetDimensions(Program.Instance.rWindow.Width, 50); statArea.CharHeight = 24; statArea.FontName = "damn"; statArea.ColourTop = top; statArea.ColourBottom = bot; statArea.Caption = "this is a test" + Environment.NewLine + "This is the test's second line"; //Menus Text Areas titleArea = (TextAreaOverlayElement)overlayManager.CreateOverlayElement("TextArea", "TitleTextArea"); titleArea.MetricsMode = GuiMetricsMode.GMM_PIXELS; titleArea.SetPosition(64, 16); titleArea.SetDimensions(Program.Instance.rWindow.Width, 32); titleArea.CharHeight = 32; titleArea.FontName = "damn"; titleArea.ColourTop = top; titleArea.ColourBottom = bot; titleArea.Caption = "Title"; for (int i = 0; i < 10; i++) { optionAreas[i] = (TextAreaOverlayElement)overlayManager.CreateOverlayElement("TextArea", i+"TextArea"); optionAreas[i].MetricsMode = GuiMetricsMode.GMM_PIXELS; optionAreas[i].SetPosition(32, 64 + (i*26)); optionAreas[i].SetDimensions(Program.Instance.rWindow.Width, 24); optionAreas[i].CharHeight = 24; optionAreas[i].FontName = "damn"; optionAreas[i].ColourTop = top; optionAreas[i].ColourBottom = bot; optionAreas[i].Caption = "Option " + i.ToString(); } maxOptions = 10; // Create an overlay, and add the panel overlay = overlayManager.Create("OverlayName"); overlay.Add2D(panel); // Add the text area to the panel panel.AddChild(messageArea); panel.AddChild(titleArea); panel.AddChild(statArea); for (int i = 0; i < 10; i++) { panel.AddChild(optionAreas[i]); } // Show the overlay overlay.Show(); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(OverlayContainer obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }