public HUDTextButton(int depth = 0) { Depth = depth; internalLabel = new HUDLabel { Alignment = HUDAlignment.TOPLEFT, TextAlignment = HUDAlignment.CENTERLEFT, }; }
private void CreateKeys() { var builder = new KeyboardLayout(this, 12.5f, 0.1f, 0.1f, 0.28f, 0.84f); _prevLabel = builder.AddPreviewLine(); builder.Add('q', 'Q', '1', 1f, HUDKeyboardButtonType.Normal); builder.Add('w', 'W', '2', 1f, HUDKeyboardButtonType.Normal); builder.Add('e', 'E', '3', 1f, HUDKeyboardButtonType.Normal); builder.Add('r', 'R', '4', 1f, HUDKeyboardButtonType.Normal); builder.Add('t', 'T', '5', 1f, HUDKeyboardButtonType.Normal); builder.Add('y', 'Y', '6', 1f, HUDKeyboardButtonType.Normal); builder.Add('u', 'U', '7', 1f, HUDKeyboardButtonType.Normal); builder.Add('i', 'I', '8', 1f, HUDKeyboardButtonType.Normal); builder.Add('o', 'O', '9', 1f, HUDKeyboardButtonType.Normal); builder.Add('p', 'P', '0', 1f, HUDKeyboardButtonType.Normal); builder.Add(null, null, null, null, HUDKeyboardButtonType.Backspace); builder.NextRow(); builder.Offset(0.5f); builder.Add('a', 'A', '@', 1f, HUDKeyboardButtonType.Normal); builder.Add('s', 'S', '#', 1f, HUDKeyboardButtonType.Normal); builder.Add('d', 'D', '&', 1f, HUDKeyboardButtonType.Normal); builder.Add('f', 'F', '*', 1f, HUDKeyboardButtonType.Normal); builder.Add('g', 'G', '-', 1f, HUDKeyboardButtonType.Normal); builder.Add('h', 'H', '+', 1f, HUDKeyboardButtonType.Normal); builder.Add('j', 'J', '=', 1f, HUDKeyboardButtonType.Normal); builder.Add('k', 'K', '(', 1f, HUDKeyboardButtonType.Normal); builder.Add('l', 'L', ')', 1f, HUDKeyboardButtonType.Normal); builder.Add(null, null, null, null, HUDKeyboardButtonType.Enter); builder.NextRow(); builder.Add(null, null, null, 1f, HUDKeyboardButtonType.Caps); builder.Add('z', 'Z', '_', 1f, HUDKeyboardButtonType.Normal); builder.Add('x', 'X', '$', 1f, HUDKeyboardButtonType.Normal); builder.Add('c', 'C', '"', 1f, HUDKeyboardButtonType.Normal); builder.Add('v', 'V', '\'', 1f, HUDKeyboardButtonType.Normal); builder.Add('b', 'B', '/', 1f, HUDKeyboardButtonType.Normal); builder.Add('n', 'N', '\\', 1f, HUDKeyboardButtonType.Normal); builder.Add('m', 'M', '%', 1f, HUDKeyboardButtonType.Normal); builder.Add(',', null, '.', 1f, HUDKeyboardButtonType.Normal); builder.Add('!', null, '?', 1f, HUDKeyboardButtonType.Normal); builder.Add(null, null, null, null, HUDKeyboardButtonType.Caps); builder.NextRow(); builder.Add(null, null, null, 3.2f, HUDKeyboardButtonType.Alt); builder.Add(' ', null, null, 6.5f, HUDKeyboardButtonType.Normal); builder.Add(null, null, null, null, HUDKeyboardButtonType.Alt); builder.Finish(); }
public HUDCharacterControl(int depth = 0) { Depth = depth; internalLabel = new HUDLabel { Text = "", Alignment = HUDAlignment.CENTER, TextAlignment = HUDAlignment.CENTER, RelativePosition = new FPoint(0, 0), }; }
public HUDMessageBox(int depth = 0) { Depth = depth; Alignment = HUDAlignment.CENTER; internalLabel = new HUDLabel { Alignment = HUDAlignment.CENTER, TextAlignment = HUDAlignment.CENTER, FontSize = 64, WordWrap = HUDWordWrap.WrapByWordTrusted, }; }
public HUDIconMessageBox(int depth = 0) { Depth = depth; Alignment = HUDAlignment.CENTER; internalImage = new HUDImage { Alignment = HUDAlignment.CENTERLEFT, ImageAlignment = HUDImageAlignment.UNDERSCALE, Size = new FSize(96, 96), }; internalLabel = new HUDLabel { Alignment = HUDAlignment.CENTERLEFT, TextAlignment = HUDAlignment.CENTER, FontSize = 96, }; }
public HUDLabel AddPreviewLine() { var scale = _target.HUD.Width / _virtualWidth; var x = currentVirtualX; var y = _padNS + currentRow * _rowHeight + currentRow * _padKey; var w = _virtualWidth - x - _padEW; var h = _rowHeight; var pnl = new HUDRectangle(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(x * scale, y * scale), Size = new FSize(w * scale, h * scale), Definition = HUDBackgroundDefinition.CreateRounded(HUDKeyboard.COLOR_PREVIEW_BG, scale * 0.1f), }; _target.AddElement(pnl); var padH = h * 0.25f; var padV = h * 0.1f; var lbl = new HUDLabel(2) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((x + padH) * scale, (y + padV) * scale), Size = new FSize((w - 2 * padH) * scale, (h - 2 * padV) * scale), TextColor = HUDKeyboard.COLOR_PREVIEW_TEXT, FontSize = (h - 2 * padV) * scale, TextAlignment = HUDAlignment.CENTERLEFT, }; _target.AddElement(lbl); NextRow(); return(lbl); }
public override void OnInitialize() { base.OnInitialize(); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTER, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 96), Font = Textures.HUDFontBold, FontSize = 64, L10NText = _server.ConnType == MultiplayerConnectionType.PROXY ? L10NImpl.STR_MENU_CAP_CGAME_PROX : L10NImpl.STR_MENU_CAP_CGAME_P2P, TextColor = FlatColors.Clouds, }); AddElement(new MultiplayerConnectionStateControl(_server) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(16, 16) }); var screen = new GDGameScreen_Display(MainGame.Inst, MainGame.Inst.Graphics, _currentLevel); AddElement(_displayScreen = new HUDSubScreenProxyRenderer(screen) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((2 / 3f) * GDConstants.TILE_WIDTH, 3.25f * GDConstants.TILE_WIDTH), Size = new FSize(6 * GDConstants.TILE_WIDTH, 3.75f * GDConstants.TILE_WIDTH), }); AddElement(new HUDImageButton { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((5 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(32, 48), Image = Textures.TexHUDIconChevronLeft, ImagePadding = 4, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 8f, true, false, true, false), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 8f, true, false, true, false), Click = (s, a) => ChangeID1(-1), }); AddElement(_lblLevelID1 = new HUDClickableLabel { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((8 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(96, 48), FontSize = 48, Font = Textures.HUDFontRegular, Text = "?", TextAlignment = HUDAlignment.CENTER, TextColor = FlatColors.Clouds, Background = HUDBackgroundDefinition.CreateSimple(FlatColors.BackgroundHUD2), Click = (s, a) => ChangeID1(+1), ClickSound = true, }); AddElement(new HUDImageButton { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((17 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(32, 48), Image = Textures.TexHUDIconChevronRight, ImagePadding = 4, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 8f, false, true, false, true), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 8f, false, true, false, true), Click = (s, a) => ChangeID1(+1), }); AddElement(new HUDImageButton { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((24 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(32, 48), Image = Textures.TexHUDIconChevronLeft, ImagePadding = 4, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 8f, true, false, true, false), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 8f, true, false, true, false), Click = (s, a) => ChangeID2(-1), }); AddElement(_lblLevelID2 = new HUDClickableLabel { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((27 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(96, 48), FontSize = 48, Font = Textures.HUDFontRegular, Text = "?", TextAlignment = HUDAlignment.CENTER, TextColor = FlatColors.Clouds, Background = HUDBackgroundDefinition.CreateSimple(FlatColors.BackgroundHUD2), Click = (s, a) => ChangeID2(+1), ClickSound = true, }); AddElement(new HUDImageButton { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint((36 / 6f) * GDConstants.TILE_WIDTH, 2.25f * GDConstants.TILE_WIDTH), Size = new FSize(32, 48), Image = Textures.TexHUDIconChevronRight, ImagePadding = 4, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 8f, false, true, false, true), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 8f, false, true, false, true), Click = (s, a) => ChangeID2(+1), }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(100 + 8, 375), Size = new FSize(200, 32), Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => L10N.TF(L10NImpl.STR_MENU_MP_LOBBY_USER_FMT, _levelUserCount), TextColor = Color.White, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(100 + 8, 331), Size = new FSize(200, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_MUSIC, TextColor = Color.White, }); int initialMusic = FloatMath.GetRangedIntRandom(5); AddElement(_music1 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(37, 261), Size = new FSize(62, 62), MusicIndex = 0, Selected = initialMusic == 0, }); AddElement(_music2 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(109, 261), Size = new FSize(62, 62), MusicIndex = 1, Selected = initialMusic == 1, }); AddElement(_music3 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(179, 261), Size = new FSize(62, 62), MusicIndex = 2, Selected = initialMusic == 2, }); AddElement(_music4 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(249, 261), Size = new FSize(62, 62), MusicIndex = 3, Selected = initialMusic == 3, }); AddElement(_music5 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(319, 261), Size = new FSize(62, 62), MusicIndex = 4, Selected = initialMusic == 4, }); AddElement(_music6 = new HUDRadioMusicButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(389, 261), Size = new FSize(62, 62), MusicIndex = 5, Selected = initialMusic == 5, }); _music1.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; _music2.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; _music3.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; _music4.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; _music5.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; _music6.RadioGroup = new List <HUDRadioMusicButton> { _music1, _music2, _music3, _music4, _music5, _music6 }; var initialSpeed = MainGame.Inst.Profile.LastMultiplayerHostedSpeed; AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(100 + 8, 221), Size = new FSize(200, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_GAMESPEED, TextColor = Color.White, }); AddElement(_speed1 = new HUDRadioSpeedButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(37, 150), Size = new FSize(62, 62), Speed = GameSpeedModes.SUPERSLOW, Selected = initialSpeed == GameSpeedModes.SUPERSLOW, }); AddElement(_speed2 = new HUDRadioSpeedButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(109, 150), Size = new FSize(62, 62), Speed = GameSpeedModes.SLOW, Selected = initialSpeed == GameSpeedModes.SLOW, }); AddElement(_speed3 = new HUDRadioSpeedButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(179, 150), Size = new FSize(62, 62), Speed = GameSpeedModes.NORMAL, Selected = initialSpeed == GameSpeedModes.NORMAL, }); AddElement(_speed4 = new HUDRadioSpeedButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(249, 150), Size = new FSize(62, 62), Speed = GameSpeedModes.FAST, Selected = initialSpeed == GameSpeedModes.FAST, }); AddElement(_speed5 = new HUDRadioSpeedButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(319, 150), Size = new FSize(62, 62), Speed = GameSpeedModes.SUPERFAST, Selected = initialSpeed == GameSpeedModes.SUPERFAST, }); _speed1.RadioGroup = new List <HUDRadioSpeedButton> { _speed1, _speed2, _speed3, _speed4, _speed5 }; _speed2.RadioGroup = new List <HUDRadioSpeedButton> { _speed1, _speed2, _speed3, _speed4, _speed5 }; _speed3.RadioGroup = new List <HUDRadioSpeedButton> { _speed1, _speed2, _speed3, _speed4, _speed5 }; _speed4.RadioGroup = new List <HUDRadioSpeedButton> { _speed1, _speed2, _speed3, _speed4, _speed5 }; _speed5.RadioGroup = new List <HUDRadioSpeedButton> { _speed1, _speed2, _speed3, _speed4, _speed5 }; AddElement(new HUDRectangle(0) { Alignment = HUDAlignment.BOTTOMRIGHT, Size = new FSize(WIDTH, FOOTER_HEIGHT), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD2, 16, false, false, true, true), }); AddElement(_btnCreate = new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0.5f * GDConstants.TILE_WIDTH, 0.5f * GDConstants.TILE_WIDTH), Size = new FSize(5.5f * GDConstants.TILE_WIDTH, 1.0f * GDConstants.TILE_WIDTH), Icon = null, IconRotationSpeed = 0.25f, L10NText = L10NImpl.STR_MENU_MP_CREATE, TextColor = Color.White, Font = Textures.HUDFontBold, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.PeterRiver, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.BelizeHole, 16), Click = OnClickCreateLobby, }); AddElement(new HUDTextButton(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0.5f * GDConstants.TILE_WIDTH, 0.5f * GDConstants.TILE_WIDTH), Size = new FSize(5.5f * GDConstants.TILE_WIDTH, 1.0f * GDConstants.TILE_WIDTH), L10NText = L10NImpl.STR_MENU_CANCEL, TextColor = Color.White, Font = Textures.HUDFontBold, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.Asbestos, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.MidnightBlue, 16), Click = OnClickCancel, }); //--------------------- if (!Levels.LEVELS.TryGetValue(MainGame.Inst.Profile.LastMultiplayerHostedLevel, out _currentLevel)) { _currentLevel = Levels.LEVELS[Levels.LEVELID_1_3]; } _currentWorld = Levels.WORLDS_MULTIPLAYER.FirstOrDefault(w => w.AllNodes.Any(n => n.ConnectionID == _currentLevel.UniqueID)); if (_currentWorld == null) { _currentWorld = Levels.WORLD_001; _currentLevel = Levels.LEVELS[Levels.LEVELID_1_3]; } UpdateLabels(); }
public override void OnInitialize() { RelativePosition = new FPoint(GDConstants.TILE_WIDTH, 0); Size = new FSize(HUD.Width - 6 * GDConstants.TILE_WIDTH, HUD.Height - 2 * GDConstants.TILE_WIDTH); Alignment = HUDAlignment.CENTERLEFT; AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 0)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_ID, TextColor = FlatColors.Clouds, }); AddElement(_ctrlID = new HUDLabel(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 0)), Size = new FSize(512, 64), Text = "000000000000", TextColor = Color.Black, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, Background = HUDBackgroundDefinition.CreateSimpleOutline(Color.White, Color.Black, HUD.PixelWidth), }); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 1)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_NAME, TextColor = FlatColors.Clouds, }); AddElement(_ctrlName = new HUDSimpleTextBox(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 1)), Size = new FSize(512, 64), ColorText = Color.Black, Font = Textures.HUDFontRegular, FontSize = 48, MaxLength = SCCMLevelData.MaxNameLength, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(Color.White, Color.Black, HUD.PixelWidth), BackgroundFocused = HUDBackgroundDefinition.CreateSimpleOutline(Color.White, Color.Black, HUD.PixelWidth), Changed = UpdateText, }); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 2)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_SIZE, TextColor = FlatColors.Clouds, }); AddElement(_ctrlSize = new HUDTextButton(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 2)), Size = new FSize(512, 64), TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonHUD, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonPressedHUD, Color.Black, HUD.PixelWidth), Click = ToggleSize, }); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 3)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_VIEW, TextColor = FlatColors.Clouds, }); AddElement(_ctrlView = new HUDTextButton(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 3)), Size = new FSize(512, 64), TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonHUD, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonPressedHUD, Color.Black, HUD.PixelWidth), Click = ToggleView, }); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 4)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_GEOMETRY, TextColor = FlatColors.Clouds, }); AddElement(_ctrlGeometry = new HUDTextButton(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 4)), Size = new FSize(512, 64), TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonHUD, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonPressedHUD, Color.Black, HUD.PixelWidth), Click = ToggleGeometry, }); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(32, 32 + (96 * 5)), Size = new FSize(384, 64), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_LVLED_CFG_MUSIC, TextColor = FlatColors.Clouds, }); AddElement(_ctrlMusic = new HUDTextButton(1) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(416, 32 + (96 * 5)), Size = new FSize(512, 64), TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonHUD, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.ButtonPressedHUD, Color.Black, HUD.PixelWidth), Click = ToggleMusic, }); //------ AddElement(new HUDTextButton(1) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24 + 384 + 24, 16 + 75 * 0), Size = new FSize(384, 64), L10NText = L10NImpl.STR_MENU_CANCEL, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.Pomegranate, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.Alizarin, Color.Black, HUD.PixelWidth), Click = Abort, }); AddElement(new HUDTextButton(1) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24, 16 + 75 * 0), Size = new FSize(384, 64), L10NText = L10NImpl.STR_BTN_OK, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 48, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.Emerald, Color.Black, HUD.PixelWidth), BackgroundPressed = HUDBackgroundDefinition.CreateSimpleOutline(FlatColors.Nephritis, Color.Black, HUD.PixelWidth), Click = Close, }); RefreshControls(); }
public void Initialize(Cockpit cockpit) { cockpit.Name = "modelCockpit"; // Configure how the cockpit moves //cockpit.PositionMode = Cockpit.MovementMode.TrackPosition; // [RMS] use orientation mode to make cockpit follow view orientation. // (however default widgets below are off-screen!) //cockpit.PositionMode = Cockpit.MovementMode.TrackOrientation; var tracker = SmoothCockpitTracker.Enable(cockpit); //cockpit.TiltAngle = 10.0f; cockpit.TiltAngle = 0.0f; tracker.ShowIndicator = false; FScene Scene = cockpit.Scene; //ISurfaceBoxRegion region = new CylinderBoxRegion() { Radius = 1.0f, MinHeight = -1.0f, MaxHeight = 0.3f, HorzDegreeLeft = 50, HorzDegreeRight = 50 }; ISurfaceBoxRegion region = new SphereBoxRegion() { Radius = 1.0f, VertDegreeBottom = 30, VertDegreeTop = 10, HorzDegreeLeft = 55, HorzDegreeRight = 55 }; //Frame3f f = new Frame3f(new Vector3f(0, 0, 1), Vector3f.AxisZ); //f.RotateAround(Vector3f.Zero, Quaternionf.AxisAngleD(Vector3f.AxisX, 10)); //f.RotateAround(Vector3f.Zero, Quaternionf.AxisAngleD(Vector3f.AxisY, -50)); //ISurfaceBoxRegion region = new PlaneBoxRegion() { // Frame = f, Dimensions = new AxisAlignedBox2f(-0.15f, -0.5f, 0.5f, 0.2f) //}; BoxContainer leftPanelContainer = new BoxContainer(new BoxRegionContainerProvider(cockpit, region)); PinnedBoxes3DLayoutSolver leftPanelLayout = new PinnedBoxes3DLayoutSolver(leftPanelContainer, region); PinnedBoxesLayout layout = new PinnedBoxesLayout(cockpit, leftPanelLayout) { StandardDepth = 0.0f }; cockpit.AddLayout(layout, "3D", true); ISurfaceBoxRegion cylregion = new CylinderBoxRegion() { Radius = 1.0f, MinHeight = -1.0f, MaxHeight = 0.2f, HorzDegreeLeft = 55, HorzDegreeRight = 50 }; BoxContainer cylPanelContainer = new BoxContainer(new BoxRegionContainerProvider(cockpit, cylregion)); PinnedBoxes3DLayoutSolver cylPanelLayout = new PinnedBoxes3DLayoutSolver(cylPanelContainer, cylregion); PinnedBoxesLayout cyl_layout = new PinnedBoxesLayout(cockpit, cylPanelLayout) { StandardDepth = 0.0f }; cockpit.AddLayout(cyl_layout, "cylinder", true); float button_width = 0.32f; float button_height = 0.075f; float button_spacing = 0.015f; float text_height = button_height * 0.6f; float row_y_shift = button_height + button_spacing; Func <string, float, HUDLabel> MakeButtonF = (label, buttonW) => { HUDLabel button = new HUDLabel() { Shape = OrthogenUI.MakeMenuButtonRect(buttonW, button_height), TextHeight = text_height, AlignmentHorz = HorizontalAlignment.Center, BackgroundColor = OrthogenUI.ButtonBGColor, TextColor = OrthogenUI.ButtonTextColor, DisabledTextColor = OrthogenUI.DisabledButtonTextColor, Text = label, EnableBorder = false, BorderWidth = OrthogenUI.StandardButtonBorderWidth, BorderColor = OrthogenUI.ButtonTextColor }; button.Create(); button.Name = label; button.Enabled = true; return(button); }; /* * Scan UI */ HUDElementList scan_buttons_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Vertical }; HUDLabel trim_scan_button = MakeButtonF("Trim Scan", button_width); trim_scan_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.TrimScanStartT); }; scan_buttons_list.AddListItem(trim_scan_button); HUDLabel align_scan_button = MakeButtonF("Align Scan", button_width); align_scan_button.OnClicked += (sender, e) => { OG.Transition(OGVRWorkflow.VRAlignScanStartT); }; scan_buttons_list.AddListItem(align_scan_button); HUDLabel accept_scan_button = MakeButtonF("Done Scan", button_width); accept_scan_button.OnClicked += (sender, e) => { OG.TransitionToState(RectifyState.Identifier); }; scan_buttons_list.AddListItem(accept_scan_button); scan_buttons_list.Create(); scan_buttons_list.Name = "scan_buttons_list"; cyl_layout.Add(scan_buttons_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(scan_buttons_list, BoxPosition.CenterTop), PinTargetPoint2D = LayoutUtil.BoxPointF(cylPanelContainer, BoxPosition.TopLeft) }); /* * Model UI UI */ HUDElementList model_buttons_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Vertical }; HUDLabel draw_offset_area_button = MakeButtonF("Offset Area", button_width); draw_offset_area_button.OnClicked += (sender, e) => { OGActions.CurrentLegDeformType = LegModel.LegDeformationTypes.Offset; OG.Transition(OGWorkflow.DrawAreaStartT); }; model_buttons_list.AddListItem(draw_offset_area_button); HUDLabel draw_smooth_area_button = MakeButtonF("Smooth Area", button_width); draw_smooth_area_button.OnClicked += (sender, e) => { OGActions.CurrentLegDeformType = LegModel.LegDeformationTypes.Smooth; OG.Transition(OGWorkflow.DrawAreaStartT); }; model_buttons_list.AddListItem(draw_smooth_area_button); HUDLabel add_plane_button = MakeButtonF("Add Plane", button_width); add_plane_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.AddDeformRingStartT); }; model_buttons_list.AddListItem(add_plane_button); HUDLabel add_lengthen_button = MakeButtonF("Add Lengthen", button_width); add_lengthen_button.OnClicked += (sender, e) => { if (OGActions.CanAddLengthenOp()) { OGActions.AddLengthenOp(); } }; model_buttons_list.AddListItem(add_lengthen_button); HUDLabel sculpt_curve_model_button = MakeButtonF("Sculpt Curve", button_width); WorkflowRouter sculpt_router = WorkflowRouter.Build(new[] { OGWorkflow.RectifyState, OGWorkflow.SculptAreaStartT, OGWorkflow.SocketState, OGWorkflow.SculptTrimlineStartT }); sculpt_curve_model_button.OnClicked += (sender, e) => { sculpt_router.Apply(OG.Model.Workflow); }; model_buttons_list.AddListItem(sculpt_curve_model_button); HUDLabel accept_rectify_button = MakeButtonF("Begin Socket", button_width); accept_rectify_button.OnClicked += (sender, e) => { OG.TransitionToState(SocketDesignState.Identifier); OG.Leg.SetOpWidgetVisibility(false); }; model_buttons_list.AddListItem(accept_rectify_button); model_buttons_list.Create(); model_buttons_list.Name = "model_buttons_list"; cyl_layout.Add(model_buttons_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(model_buttons_list, BoxPosition.CenterTop), PinTargetPoint2D = LayoutUtil.BoxPointF(cylPanelContainer, BoxPosition.TopLeft) }); /* * Model UI UI */ HUDElementList socket_buttons_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Vertical }; HUDLabel draw_trim_line_button = MakeButtonF("Draw Trimline", button_width); draw_trim_line_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.DrawTrimlineStartT); }; socket_buttons_list.AddListItem(draw_trim_line_button); HUDLabel plane_trim_line_button = MakeButtonF("Plane Trimline", button_width); plane_trim_line_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.PlaneTrimlineStartT); }; socket_buttons_list.AddListItem(plane_trim_line_button); HUDLabel sculpt_trimline_button = MakeButtonF("Sculpt Trimline", button_width); sculpt_trimline_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.SculptTrimlineStartT); }; socket_buttons_list.AddListItem(sculpt_trimline_button); HUDLabel add_socket_button = MakeButtonF("Add Socket", button_width); add_socket_button.OnClicked += (sender, e) => { if (OGActions.CanAddSocket()) { OGActions.AddSocket(); } }; socket_buttons_list.AddListItem(add_socket_button); HUDLabel export_socket_button = MakeButtonF("Export", button_width); export_socket_button.OnClicked += (sender, e) => { if (OGActions.CanExportSocket()) { OGActions.ExportSocket(); } }; socket_buttons_list.AddListItem(export_socket_button); // align button list top top-left of ui socket_buttons_list.Create(); socket_buttons_list.Name = "socket_buttons"; cyl_layout.Add(socket_buttons_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(socket_buttons_list, BoxPosition.CenterTop), PinTargetPoint2D = LayoutUtil.BoxPointF(cylPanelContainer, BoxPosition.TopLeft) }); HUDElementList ok_cancel_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Horizontal }; HUDLabel accept_button = MakeButtonF("Accept", button_width * 0.75f); accept_button.OnClicked += (sender, e) => { OGActions.AcceptCurrentTool(); }; HUDLabel cancel_button = MakeButtonF("Cancel", button_width * 0.75f); cancel_button.OnClicked += (sender, e) => { OGActions.CancelCurrentTool(); }; ok_cancel_list.AddListItem(accept_button); ok_cancel_list.AddListItem(cancel_button); // align button list top top-left of ui ok_cancel_list.Create(); ok_cancel_list.Name = "ok_cancel_list"; layout.Add(ok_cancel_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(ok_cancel_list, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(leftPanelContainer, BoxPosition.BottomLeft) }); HUDElementList size_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Horizontal }; HUDLabel size_1to1 = MakeButtonF("Real Size", button_width * 0.75f); size_1to1.OnClicked += (sender, e) => { OGActions.SetSizeMode(OGActions.SizeModes.RealSize); OGActions.RecenterVRView(false); }; HUDLabel size_medium = MakeButtonF("Zoom Size", button_width * 0.75f); size_medium.OnClicked += (sender, e) => { OGActions.SetSizeMode(OGActions.SizeModes.DemoSize); OGActions.RecenterVRView(false); }; size_list.AddListItem(size_1to1); size_list.AddListItem(size_medium); size_list.Create(); size_list.Name = "size_list"; layout.Add(size_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(size_list, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(leftPanelContainer, BoxPosition.BottomLeft), FrameAxesShift = new Vector3f(0, -row_y_shift, 0) }); HUDElementList view_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Horizontal }; HUDLabel recenter_button = MakeButtonF("Recenter", 2 * button_width * 0.75f); recenter_button.OnClicked += (sender, e) => { OGActions.RecenterVRView(true); }; view_list.AddListItem(recenter_button); view_list.Create(); view_list.Name = "view_list"; layout.Add(view_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(view_list, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(leftPanelContainer, BoxPosition.BottomLeft), FrameAxesShift = new Vector3f(0, -2 * row_y_shift, 0) }); HUDElementList capture_list = new HUDElementList() { Width = button_width, Height = button_height, Spacing = button_spacing, SizeMode = HUDElementList.SizeModes.AutoSizeToFit, Direction = HUDElementList.ListDirection.Horizontal }; HUDLabel capture_button = MakeButtonF("Capture", button_width * 0.75f); capture_button.OnClicked += (sender, e) => { if (FBCapture.CaptureOption.Active != null) { if (capture_button.Text == "Capture") { DebugUtil.Log("Starting 2D Capture..."); FBCapture.CaptureOption.Active.doSurroundCaptureOption = false; cockpit.Context.RegisterNextFrameAction(() => { //FBCapture.CaptureOption.Active.videoWidth = 4096; //FBCapture.CaptureOption.Active.videoHeight = 2048; FBCapture.CaptureOption.Active.StartCaptureVideo(); capture_button.Text = "Stop"; }); } else { FBCapture.CaptureOption.Active.StopCaptureVideo(); capture_button.Text = "Capture"; } } }; HUDLabel vrcapture_button = MakeButtonF("VRCapture", button_width * 0.75f); vrcapture_button.OnClicked += (sender, e) => { if (FBCapture.CaptureOption.Active != null) { if (vrcapture_button.Text == "VRCapture") { // [RMS] when we set this flag, we need to give CaptureOption.Update() a chance to see // it, which means we need to wait up to 2 frames FBCapture.CaptureOption.Active.doSurroundCaptureOption = true; cockpit.Context.RegisterNextFrameAction(() => { cockpit.Context.RegisterNextFrameAction(() => { GameObject encoderObj = GameObject.Find("EncoderObject"); encoderObj.transform.position = Camera.main.transform.position; encoderObj.transform.rotation = Quaternionf.Identity; GameObject head = UnityUtil.FindGameObjectByName("VRHead"); head.SetVisible(false); FBCapture.CaptureOption.Active.StartCaptureVideo(); vrcapture_button.Text = "Stop"; }); }); } else { FBCapture.CaptureOption.Active.StopCaptureVideo(); vrcapture_button.Text = "VRCapture"; } } }; capture_list.AddListItem(capture_button); capture_list.AddListItem(vrcapture_button); // align button list top top-left of ui capture_list.Create(); capture_list.Name = "capture_list"; layout.Add(capture_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.LocalBoxPointF(capture_list, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(leftPanelContainer, BoxPosition.BottomLeft), FrameAxesShift = new Vector3f(0, -3 * row_y_shift, 0) }); leftPanelLayout.RecomputeLayout(); leftPanelLayout.RecomputeLayout(); leftPanelLayout.RecomputeLayout(); leftPanelLayout.RecomputeLayout(); leftPanelLayout.RecomputeLayout(); cylPanelLayout.RecomputeLayout(); // Configure interaction behaviors // - below we add behaviors for mouse, gamepad, and spatial devices (oculus touch, etc) // - keep in mind that Tool objects will register their own behaviors when active // setup key handlers (need to move to behavior...) cockpit.AddKeyHandler(new OrthoVRKeyHandler(cockpit.Context)); // these behaviors let us interact with UIElements (ie left-click/trigger, or either triggers for Touch) if (cockpit.Context.Use2DCockpit) { cockpit.InputBehaviors.Add(new Mouse2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); } cockpit.InputBehaviors.Add(new VRSpatialDeviceUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context) { Priority = 1 }); cockpit.InputBehaviors.Add(new SpatialDeviceGrabViewBehavior(cockpit) { Priority = 2 }); //cockpit.InputBehaviors.Add(new TwoHandViewManipBehavior(cockpit) { Priority = 1 }); //cockpit.InputBehaviors.Add(new SpatialDeviceViewManipBehavior(cockpit) { Priority = 2 }); // selection / multi-selection behaviors cockpit.InputBehaviors.Add(new MouseMultiSelectBehavior(cockpit.Context) { Priority = 10 }); cockpit.InputBehaviors.Add(new SpatialDeviceMultiSelectBehavior(cockpit.Context) { Priority = 10 }); cockpit.InputBehaviors.Add(new MouseDeselectBehavior(cockpit.Context) { Priority = 999 }); cockpit.InputBehaviors.Add(new SpatialDeviceDeselectBehavior(cockpit.Context) { Priority = 999 }); // update buttons enable/disable on state transitions, selection changes string main_state = ""; Action updateStateChangeButtons = () => { if (OG.IsInState(OGWorkflow.ScanState)) { main_state = OGWorkflow.ScanState; } else if (OG.IsInState(OGWorkflow.RectifyState)) { main_state = OGWorkflow.RectifyState; } else if (OG.IsInState(OGWorkflow.SocketState)) { main_state = OGWorkflow.SocketState; } scan_buttons_list.IsVisible = (main_state == OGWorkflow.ScanState); model_buttons_list.IsVisible = (main_state == OGWorkflow.RectifyState); socket_buttons_list.IsVisible = (main_state == OGWorkflow.SocketState); trim_scan_button.Enabled = OG.CanTransition(OGWorkflow.TrimScanStartT); align_scan_button.Enabled = OG.CanTransition(OGVRWorkflow.VRAlignScanStartT); accept_scan_button.Enabled = OG.IsInState(ScanState.Identifier) && OG.CanTransitionToState(RectifyState.Identifier); draw_offset_area_button.Enabled = OG.CanTransition(OGWorkflow.DrawAreaStartT); draw_smooth_area_button.Enabled = OG.CanTransition(OGWorkflow.DrawAreaStartT); add_plane_button.Enabled = OG.CanTransition(OGWorkflow.AddDeformRingStartT); add_lengthen_button.Enabled = OGActions.CanAddLengthenOp(); accept_rectify_button.Enabled = OG.IsInState(RectifyState.Identifier) && OG.CanTransitionToState(SocketDesignState.Identifier); draw_trim_line_button.Enabled = OG.CanTransition(OGWorkflow.DrawTrimlineStartT); plane_trim_line_button.Enabled = OG.CanTransition(OGWorkflow.PlaneTrimlineStartT); add_socket_button.Enabled = OGActions.CanAddSocket(); export_socket_button.Enabled = OGActions.CanExportSocket(); sculpt_curve_model_button.Enabled = sculpt_router.CanApply(OG.Model.Workflow); sculpt_trimline_button.Enabled = OG.CanTransition(OGWorkflow.SculptTrimlineStartT); }; OG.OnWorfklowInitialized += (o, e) => { updateStateChangeButtons(); }; OG.OnStateTransition += (from, to) => { updateStateChangeButtons(); }; OG.OnDataModelModified += (from, to) => { updateStateChangeButtons(); }; cockpit.Scene.SelectionChangedEvent += (o, e) => { if (OG.WorkflowInitialized) { updateStateChangeButtons(); } }; cockpit.Scene.ChangedEvent += (scene, so, type) => { if (OG.WorkflowInitialized) { updateStateChangeButtons(); } }; // accept/cancel buttons need to be checked every frame because the CanApply state // could change at any time, and there is no event about it cockpit.Context.RegisterEveryFrameAction("update_buttons", () => { if (cockpit.Context.ToolManager.ActiveRightTool != null) { cancel_button.Enabled = true; accept_button.Enabled = cockpit.Context.ToolManager.ActiveRightTool.CanApply; } else { cancel_button.Enabled = accept_button.Enabled = false; } // [RMS] currently this state changes outside workflow state changes... add_socket_button.Enabled = OGActions.CanAddSocket(); }); }
public override void OnInitialize() { base.OnInitialize(); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTER, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 100), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_MENU_CAP_LOBBY, TextColor = FlatColors.Clouds, }); AddElement(new MultiplayerConnectionStateControl(_server) { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(16, 16) }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 0 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_PING, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 1 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_USER, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 2 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_LEVEL, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 3 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_MUSIC, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 4 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_SPEED, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C1_LEFT, 208 + 5 * 32), Size = new FSize(INFO_C1_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, L10NText = L10NImpl.STR_MENU_MP_LOBBY_COLOR, TextColor = FlatColors.Clouds, }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 0 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => $"{(int)(_server.ProxyPing.Value * 1000)}ms", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 1 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => $"{_server.SessionCount} / {_server.SessionCapacity}", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 2 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => _server.LevelID != null ? Levels.LEVELS[_server.LevelID.Value].FullName : ("?"), WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 3 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => _server.MusicIndex != null ? (_server.MusicIndex.Value + 1).ToString() : "?", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 4 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => _server.Speed != null ? Fmt(_server.Speed.Value) : "?", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(_lblFraction = new HUDLambdaLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(INFO_C2_LEFT, 208 + 5 * 32), Size = new FSize(INFO_C2_WIDTH, 32), MaxWidth = INFO_C2_WIDTH, Font = Textures.HUDFontRegular, FontSize = 32, Lambda = () => fracName != null ? fracName : "?", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDImage { Image = Textures.CannonCogBig, RotationSpeed = 0.3f, Color = FlatColors.BackgroundHUD2, Size = new FSize(196, 196), Alignment = HUDAlignment.CENTER, RelativePosition = new FPoint(WIDTH / 4f, -64) }); AddElement(new HUDRectangle(0) { Alignment = HUDAlignment.BOTTOMRIGHT, Size = new FSize(WIDTH, FOOTER_HEIGHT), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD2, 16, false, false, true, true), }); AddElement(new HUDTextButton(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0.5f * GDConstants.TILE_WIDTH, 0.5f * GDConstants.TILE_WIDTH), Size = new FSize(6.5f * GDConstants.TILE_WIDTH, 1.0f * GDConstants.TILE_WIDTH), L10NText = L10NImpl.STR_MENU_DISCONNECT, TextColor = Color.White, Font = Textures.HUDFontBold, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, BackgroundNormal = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.Asbestos, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRoundedBlur(FlatColors.MidnightBlue, 16), Click = OnClickCancel, }); }
public override void OnInitialize() { base.OnInitialize(); AddElement(new HUDLabel(1) { TextAlignment = HUDAlignment.CENTER, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 96), Font = Textures.HUDFontBold, FontSize = 64, L10NText = L10NImpl.STR_CREDPNL_HEADER, TextColor = FlatColors.SunFlower, }); for (int i = 0; i < Attributions.CREDITS.Length; i++) { var dd = Attributions.CREDITS[i]; if (dd == null) { continue; } var btn = new HUDTextButton(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(LINE_OFFSET, 96 + i * 38), Size = new FSize(LINE_WIDTH, 32), Font = Textures.HUDFontRegular, FontSize = 32, Text = dd.Item1, TextColor = FlatColors.Clouds, TextPadding = 16, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.MidnightBlue, 8), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.Wisteria, 8), ClickMode = HUDButton.HUDButtonClickMode.Single, }; var lbl = new HUDLabel(1) { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPRIGHT, RelativePosition = new FPoint(LINE_OFFSET, 96 + i * 38), Size = new FSize(LINE_WIDTH, 32), Font = Textures.HUDFontBold, FontSize = 32, Text = dd.Item3, TextColor = FlatColors.Clouds, }; if (!string.IsNullOrWhiteSpace(dd.Item2)) { btn.ButtonClick += (s, a) => { HUD.ShowToast(null, dd.Item2, 32, FlatColors.Silver, FlatColors.Foreground, 3f); MainGame.Inst.GDBridge.OpenURL(dd.Item2); }; } AddElement(lbl); AddElement(btn); } if (MainGame.Inst.Profile.EffectsEnabled) { AddParticles(); } }
public void Initialize(Cockpit cockpit) { cockpit.Name = "modelCockpit"; // Configure how the cockpit moves //cockpit.PositionMode = Cockpit.MovementMode.TrackPosition; // [RMS] use orientation mode to make cockpit follow view orientation. // (however default widgets below are off-screen!) cockpit.PositionMode = Cockpit.MovementMode.TrackOrientation; BoxContainer screenContainer = new BoxContainer(new Cockpit2DContainerProvider(cockpit)); PinnedBoxes2DLayoutSolver screenLayout = new PinnedBoxes2DLayoutSolver(screenContainer); PinnedBoxesLayout layout = new PinnedBoxesLayout(cockpit, screenLayout) { StandardDepth = 2.0f }; cockpit.AddLayout(layout, "2D", true); Func <string, float, HUDLabel> MakeButtonF = (label, buttonW) => { HUDLabel button = new HUDLabel() { Shape = CotangentUI.MakeMenuButtonRect(buttonW, CotangentUI.MenuButtonHeight), TextHeight = CotangentUI.MenuButtonTextHeight, AlignmentHorz = HorizontalAlignment.Center, BackgroundColor = CotangentUI.ButtonBGColor, TextColor = CotangentUI.ButtonTextColor, Text = label, EnableBorder = true, BorderWidth = CotangentUI.StandardButtonBorderWidth, BorderColor = CotangentUI.ButtonTextColor }; button.Create(); button.Name = label; button.Enabled = true; return(button); }; Vector2f progressOffsetY = 4 * CotangentUI.PixelScale * Vector2f.AxisY; HUDRadialProgress slicerProgress = new HUDRadialProgress() { Radius = 18 * CotangentUI.PixelScale }; slicerProgress.Create(); slicerProgress.Name = "slicer_progress"; int MAX_PROGRESS = 1000; slicerProgress.MaxProgress = MAX_PROGRESS; CC.SlicingProgressEvent += (status) => { if (status.bFailed) { double t = 0.5 * (double)status.curProgress / (double)status.maxProgress; slicerProgress.Progress = (int)(t * MAX_PROGRESS); slicerProgress.CompletedColor = Colorf.VideoRed; } else { double t = 0.5 * (double)status.curProgress / (double)status.maxProgress; slicerProgress.Progress = (int)(t * MAX_PROGRESS); slicerProgress.CompletedColor = Colorf.BlueMetal; } }; CC.ToolpathProgressEvent += (status) => { if (status.bFailed) { double t = 0.5 + 0.5 * (double)status.curProgress / (double)status.maxProgress; slicerProgress.Progress = (int)(t * MAX_PROGRESS); slicerProgress.CompletedColor = Colorf.VideoRed; } else { double t = 0.5 + 0.5 * (double)status.curProgress / (double)status.maxProgress; if (status.curProgress == 0 && status.maxProgress == 1) { t = 0; } slicerProgress.Progress = (int)(t * MAX_PROGRESS); slicerProgress.CompletedColor = (status.curProgress == status.maxProgress) ? Colorf.LightGreen : Colorf.BlueMetal; } }; layout.Add(slicerProgress, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.BoxPointF(slicerProgress, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(screenContainer, BoxPosition.CenterBottom, progressOffsetY) }); HUDButton progressClick = new HUDButton() { Shape = new HUDShape(HUDShapeType.Disc, slicerProgress.Radius) }; fMaterial normalMaterial = MaterialUtil.CreateFlatMaterialF(Colorf.White, 0); fMaterial pauseMaterial = MaterialUtil.CreateTransparentImageMaterialF("icons/progress_pause"); fMaterial pausedMaterial = MaterialUtil.CreateTransparentImageMaterialF("icons/progress_play"); if (CCPreferences.ActiveSlicingUpdateMode == CCPreferences.SlicingUpdateModes.ImmediateSlicing) { progressClick.Create(normalMaterial, null, pauseMaterial); } else { progressClick.Create(pausedMaterial, null, null); } progressClick.Name = "progress_click"; layout.Add(progressClick, new LayoutOptions() { Flags = LayoutFlags.None, DepthShift = -0.1f, PinSourcePoint2D = LayoutUtil.BoxPointF(progressClick, BoxPosition.CenterBottom), PinTargetPoint2D = LayoutUtil.BoxPointF(screenContainer, BoxPosition.CenterBottom, progressOffsetY) }); progressClick.OnClicked += (o, e) => { if (CCPreferences.ActiveSlicingUpdateMode == CCPreferences.SlicingUpdateModes.ImmediateSlicing) { CCPreferences.ActiveSlicingUpdateMode = CCPreferences.SlicingUpdateModes.SliceOnDemand; progressClick.StandardMaterial = pausedMaterial; progressClick.HoverMaterial = null; } else { CCPreferences.ActiveSlicingUpdateMode = CCPreferences.SlicingUpdateModes.ImmediateSlicing; progressClick.StandardMaterial = normalMaterial; progressClick.HoverMaterial = pauseMaterial; } if (CC.Toolpather.ToolpathsValid == false) { // not sure why we have to invalidate slicing here, but if we don't toolpath // computation will not stop when we pause... CC.Slicer.InvalidateSlicing(); //CC.InvalidateToolPaths(); } }; CotangentUI.PrintViewHUDItems = new List <HUDStandardItem>() { slicerProgress, progressClick }; screenLayout.RecomputeLayout(); // Configure interaction behaviors // - below we add behaviors for mouse, gamepad, and spatial devices (oculus touch, etc) // - keep in mind that Tool objects will register their own behaviors when active // setup key handlers (need to move to behavior...) cockpit.AddKeyHandler(new CotangentKeyHandler(cockpit.Context)); // these behaviors let us interact with UIElements (ie left-click/trigger, or either triggers for Touch) cockpit.InputBehaviors.Add(new Mouse2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context) { Priority = 1 }); // selection / multi-selection behaviors // Note: this custom behavior implements some selection redirects that we use in various parts of Archform cockpit.InputBehaviors.Add(new MouseMultiSelectBehavior(cockpit.Context) { Priority = 10 }); // left click-drag to tumble, and left click-release to de-select cockpit.InputBehaviors.Add(new MouseClickDragSuperBehavior() { Priority = 100, DragBehavior = new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f }, ClickBehavior = new MouseDeselectBehavior(cockpit.Context) { Priority = 999 } }); // also right-click-drag to tumble cockpit.InputBehaviors.Add(new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f, ActivateF = MouseBehaviors.RightButtonPressedF, ContinueF = MouseBehaviors.RightButtonDownF }); // middle-click-drag to pan cockpit.InputBehaviors.Add(new MouseViewPanBehavior(cockpit.Context) { Priority = 100, PanSpeed = 0.01f, Adaptive = true, ActivateF = MouseBehaviors.MiddleButtonPressedF, ContinueF = MouseBehaviors.MiddleButtonDownF }); cockpit.OverrideBehaviors.Add(new MouseWheelZoomBehavior(cockpit) { Priority = 100, ZoomScale = 0.2f, Adaptive = true }); // touch input cockpit.InputBehaviors.Add(new TouchUIBehavior(cockpit.Context) { Priority = 1 }); cockpit.InputBehaviors.Add(new Touch2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new TouchViewManipBehavior(cockpit.Context) { Priority = 999, TouchZoomSpeed = 0.1f, TouchPanSpeed = 0.03f }); }
public override void OnInitialize() { base.OnInitialize(); #region Footer AddElement(new HUDRectangle(0) { Alignment = HUDAlignment.BOTTOMRIGHT, Size = new FSize(WIDTH, FOOTER_HEIGHT - 10), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD2, 16, false, false, true, true), }); AddElement(new HUDRectangle(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 3f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.Nephritis), }); AddElement(new HUDRectangle(1) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 2f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.PeterRiver), }); AddElement(new HUDRectangle(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 3f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.Pomegranate), }); AddElement(new HUDSeperator(HUDOrientation.Vertical, 3) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(WIDTH / 3f, 0), Size = new FSize(1, FOOTER_HEIGHT), Color = FlatColors.SeperatorHUD, }); AddElement(new HUDSeperator(HUDOrientation.Vertical, 3) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(WIDTH / 3f, 0), Size = new FSize(1, FOOTER_HEIGHT), Color = FlatColors.SeperatorHUD, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_LEVEL, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_POINTS, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(LabelTime1 = new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_TIME_NOW, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), Text = _level.Name, TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, }); AddElement(new HUDIncrementIndicatorLabel(_profile.TotalPoints.ToString(), _increasePoints == 0 ? "" : "+" + _increasePoints, 2) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, }); AddElement(LabelTime2 = new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), Text = TimeExtension.FormatMilliseconds(_leveltime, false), TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, }); #endregion #region Buttons AddElement(new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(24, FOOTER_HEIGHT + 24), Size = new FSize(3.5f * GDConstants.TILE_WIDTH, 60), L10NText = L10NImpl.STR_HSP_BACK, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconBack, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 16), Click = (s, a) => GDScreen.ExitToMap(false), }); if (_successScreen) { var next = GetNextNode(); if (next != null) { AddElement(new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24, FOOTER_HEIGHT + 24), Size = new FSize(3.5f * GDConstants.TILE_WIDTH, 60), L10NText = L10NImpl.STR_HSP_NEXT, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconNext, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.Nephritis, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.Emerald, 16), Click = (s, a) => MainGame.Inst.SetLevelScreen(next.Item1, next.Item2, GDScreen.WorldBlueprint), }); } } else { var w = L10N.LANGUAGE == L10N.LANG_EN_US ? 3.5f : 5.0f; AddElement(new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24, FOOTER_HEIGHT + 24), Size = new FSize(w * GDConstants.TILE_WIDTH, 60), L10NText = L10NImpl.STR_HSP_AGAIN, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconRedo, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.Orange, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.SunFlower, 16), Click = (s, a) => ((GDGameScreen)HUD.Screen).RestartLevel(false), }); } #endregion #region Icons var finDiff0 = _profile.GetLevelData(this.GDHUD().GDOwner.Blueprint.UniqueID).HasCompletedOrBetter(FractionDifficulty.KI_EASY); var finDiff1 = _profile.GetLevelData(this.GDHUD().GDOwner.Blueprint.UniqueID).HasCompletedOrBetter(FractionDifficulty.KI_NORMAL); var finDiff2 = _profile.GetLevelData(this.GDHUD().GDOwner.Blueprint.UniqueID).HasCompletedOrBetter(FractionDifficulty.KI_HARD); var finDiff3 = _profile.GetLevelData(this.GDHUD().GDOwner.Blueprint.UniqueID).HasCompletedOrBetter(FractionDifficulty.KI_IMPOSSIBLE); var modeDiff0 = finDiff0 ? (_gainLevel.Contains(FractionDifficulty.KI_EASY) ? HUDDifficultyButton.HUDDifficultyButtonMode.UNLOCKANIMATION : HUDDifficultyButton.HUDDifficultyButtonMode.ACTIVATED) : HUDDifficultyButton.HUDDifficultyButtonMode.DEACTIVATED; var modeDiff1 = finDiff1 ? (_gainLevel.Contains(FractionDifficulty.KI_NORMAL) ? HUDDifficultyButton.HUDDifficultyButtonMode.UNLOCKANIMATION : HUDDifficultyButton.HUDDifficultyButtonMode.ACTIVATED) : HUDDifficultyButton.HUDDifficultyButtonMode.DEACTIVATED; var modeDiff2 = finDiff2 ? (_gainLevel.Contains(FractionDifficulty.KI_HARD) ? HUDDifficultyButton.HUDDifficultyButtonMode.UNLOCKANIMATION : HUDDifficultyButton.HUDDifficultyButtonMode.ACTIVATED) : HUDDifficultyButton.HUDDifficultyButtonMode.DEACTIVATED; var modeDiff3 = finDiff3 ? (_gainLevel.Contains(FractionDifficulty.KI_IMPOSSIBLE) ? HUDDifficultyButton.HUDDifficultyButtonMode.UNLOCKANIMATION : HUDDifficultyButton.HUDDifficultyButtonMode.ACTIVATED) : HUDDifficultyButton.HUDDifficultyButtonMode.DEACTIVATED; AddElement(new HUDDifficultyButton(2, FractionDifficulty.KI_EASY, modeDiff0) { Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(1 * ICON_MARGIN + 0 * ICON_SIZE, ICON_MARGIN) }); AddElement(new HUDDifficultyButton(2, FractionDifficulty.KI_NORMAL, modeDiff1) { Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(3 * ICON_MARGIN + 1 * ICON_SIZE, ICON_MARGIN) }); AddElement(new HUDDifficultyButton(2, FractionDifficulty.KI_HARD, modeDiff2) { Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(5 * ICON_MARGIN + 2 * ICON_SIZE, ICON_MARGIN) }); AddElement(new HUDDifficultyButton(2, FractionDifficulty.KI_IMPOSSIBLE, modeDiff3) { Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(7 * ICON_MARGIN + 3 * ICON_SIZE, ICON_MARGIN) }); #endregion if (_successScreen) { AddHUDOperation(new HUDScorePanelTimeDisplayOperation( L10NImpl.STR_HSP_TIME_NOW, TimeExtension.FormatMilliseconds(_leveltime, false), L10NImpl.STR_HSP_TIME_BEST, _profile.GetLevelData(_level.UniqueID).GetTimeString(_levelDifficulty, false))); } else { LabelTime1.L10NText = L10NImpl.STR_HSP_TIME_BEST; LabelTime2.Text = _profile.GetLevelData(_level.UniqueID).GetTimeString(_levelDifficulty, false); } }
public override void OnInitialize() { base.OnInitialize(); #region Header AddElement(new HUDLabel { Alignment = HUDAlignment.TOPCENTER, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 48), TextAlignment = HUDAlignment.CENTER, Text = LevelMeta.LevelName, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 48, }); #endregion #region Icons AddElement(_diffButton0 = new EnhancedHUDDifficultyButton(2, FractionDifficulty.DIFF_0, () => SelectDiff(FractionDifficulty.DIFF_0)) { Active = MainGame.Inst.Profile.HasCustomLevelBeaten(LevelMeta.OnlineID, FractionDifficulty.DIFF_0), Selected = FractionDifficulty.DIFF_0 == SelectedDifficulty, Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(1 * ICON_MARGIN + 0 * ICON_SIZE, ICON_MARGIN + 32) }); AddElement(_diffButton1 = new EnhancedHUDDifficultyButton(2, FractionDifficulty.DIFF_1, () => SelectDiff(FractionDifficulty.DIFF_1)) { Active = MainGame.Inst.Profile.HasCustomLevelBeaten(LevelMeta.OnlineID, FractionDifficulty.DIFF_1), Selected = FractionDifficulty.DIFF_1 == SelectedDifficulty, Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(3 * ICON_MARGIN + 1 * ICON_SIZE, ICON_MARGIN + 32) }); AddElement(_diffButton2 = new EnhancedHUDDifficultyButton(2, FractionDifficulty.DIFF_2, () => SelectDiff(FractionDifficulty.DIFF_2)) { Active = MainGame.Inst.Profile.HasCustomLevelBeaten(LevelMeta.OnlineID, FractionDifficulty.DIFF_2), Selected = FractionDifficulty.DIFF_2 == SelectedDifficulty, Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(5 * ICON_MARGIN + 2 * ICON_SIZE, ICON_MARGIN + 32) }); AddElement(_diffButton3 = new EnhancedHUDDifficultyButton(2, FractionDifficulty.DIFF_3, () => SelectDiff(FractionDifficulty.DIFF_3)) { Active = MainGame.Inst.Profile.HasCustomLevelBeaten(LevelMeta.OnlineID, FractionDifficulty.DIFF_3), Selected = FractionDifficulty.DIFF_3 == SelectedDifficulty, Alignment = HUDAlignment.TOPLEFT, Size = new FSize(ICON_SIZE, ICON_SIZE), RelativePosition = new FPoint(7 * ICON_MARGIN + 3 * ICON_SIZE, ICON_MARGIN + 32) }); #endregion #region Buttons AddElement(new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(24, FOOTER_HEIGHT + 24), Size = new FSize(3.5f * TW, 60), L10NText = L10NImpl.STR_HSP_BACK, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconBack, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonHUD, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.ButtonPressedHUD, 16), Click = (s, a) => MainGame.Inst.SetOverworldScreenWithSCCM(SCCMMainPanel.SCCMTab.Hot), }); AddElement(_btnReplay = new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24, FOOTER_HEIGHT + 24), Size = new FSize(3.5f * TW, 60), L10NText = L10NImpl.STR_HSP_AGAIN, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconRedo, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.Nephritis, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.Emerald, 16), Click = (s, a) => Replay(SelectedDifficulty), }); #endregion #region Star AddElement(_btnStar = new HUDEllipseImageButton { Alignment = HUDAlignment.CENTER, RelativePosition = new FPoint(0, 4.25f), Size = new FSize(3f * TW, 3f * TW), Image = Textures.TexIconStar, ImageColor = (MainGame.Inst.Profile.HasCustomLevelStarred(LevelMeta.OnlineID) || LevelMeta.UserID == MainGame.Inst.Profile.OnlineUserID) ? FlatColors.SunFlower : FlatColors.BackgroundHUD, ImagePadding = 16f, BackgroundNormal = FlatColors.ButtonHUD, BackgroundPressed = FlatColors.ButtonPressedHUD, IsEnabled = (LevelMeta.UserID != MainGame.Inst.Profile.OnlineUserID), Click = (s, a) => ToggleStar(), }); AddElement(_lblStarCount = new HUDLabel(4) { Alignment = HUDAlignment.CENTER, RelativePosition = new FPoint(0, 4), Size = new FSize(4 * TW, 4 * TW), TextAlignment = HUDAlignment.CENTER, Text = LevelMeta.Stars.ToString(), TextColor = FlatColors.Foreground, Font = Textures.HUDFontBold, FontSize = 48, }); #endregion #region Footer AddElement(new HUDRectangle(0) { Alignment = HUDAlignment.BOTTOMRIGHT, Size = new FSize(WIDTH, FOOTER_HEIGHT - 10), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD2, 16, false, false, true, true), }); AddElement(new HUDRectangle(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 3f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.Nephritis), }); AddElement(new HUDRectangle(1) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 2f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.PeterRiver), }); AddElement(new HUDRectangle(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, FOOTER_HEIGHT - FOOTER_COLBAR_HEIGHT), Size = new FSize(WIDTH / 3f, FOOTER_COLBAR_HEIGHT), Definition = HUDBackgroundDefinition.CreateSimple(FlatColors.Pomegranate), }); AddElement(new HUDSeperator(HUDOrientation.Vertical, 3) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(WIDTH / 3f, 0), Size = new FSize(1, FOOTER_HEIGHT), Color = FlatColors.SeperatorHUD, }); AddElement(new HUDSeperator(HUDOrientation.Vertical, 3) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(WIDTH / 3f, 0), Size = new FSize(1, FOOTER_HEIGHT), Color = FlatColors.SeperatorHUD, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_AUTHOR, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_POINTS, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(LabelTimeHeader = new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, 77), Size = new FSize(WIDTH / 3f, 40), TextAlignment = HUDAlignment.BOTTOMCENTER, L10NText = L10NImpl.STR_HSP_TIME_NOW, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontRegular, FontSize = 35, }); AddElement(new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), Text = LevelMeta.Username ?? "Unknown", WordWrap = HUDWordWrap.Ellipsis, TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, AutoFontSizeShrink = true, }); AddElement(new HUDIncrementIndicatorLabel(MainGame.Inst.Profile.ScoreSCCM.ToString(), _scoreGain == 0 ? "" : "+" + _scoreGain, 2) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, }); AddElement(LabelTimeValue = new HUDLabel(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(0, 15), Size = new FSize(WIDTH / 3f, 60), Text = TimeExtension.FormatMilliseconds(PersonalTimes[(int)SelectedDifficulty] ?? -1, false), TextAlignment = HUDAlignment.BOTTOMCENTER, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 57, }); #endregion AddOperation(new HUDSCCMScorePanelTimeDisplayOperation()); UpdateTDMLabels(); }
public override void OnInitialize() { base.OnInitialize(); AddElement(new HUDLabel { Alignment = HUDAlignment.TOPCENTER, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 48), TextAlignment = HUDAlignment.CENTER, Text = _level.FullName, TextColor = FlatColors.TextHUD, Font = Textures.HUDFontBold, FontSize = 48, }); AddElement(_cannonCog = new HUDImage(1) { Alignment = HUDAlignment.CENTER, Size = new FSize(4.5f * TW, 4.5f * TW), RelativePosition = FPoint.Zero, Rotation = 0f, RotationSpeed = 0.5f, Image = Textures.CannonCogBig, Color = FlatColors.BackgroundHUD.Lighten(0.9f), }); AddElement(_centerLabel = new HUDLabel(3) { Alignment = HUDAlignment.CENTER, Size = new FSize(WIDTH, 2 * TW), RelativePosition = FPoint.Zero, TextAlignment = HUDAlignment.CENTER, FontSize = 128, L10NText = L10NImpl.STR_LVLED_UPLOADING, TextColor = FlatColors.Clouds, Font = Textures.HUDFontBold, }); AddElement(new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMLEFT, RelativePosition = new FPoint(24, 24), Size = new FSize(3.5f * TW, 60), L10NText = L10NImpl.STR_LVLED_BTN_ABORT, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconError, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.Alizarin, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.Pomegranate, 16), Click = (s, a) => MainGame.Inst.SetOverworldScreen(), }); AddElement(_btnReupload = new HUDIconTextButton(2) { Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(24, 24), Size = new FSize(3.5f * TW, 60), L10NText = L10NImpl.STR_LVLED_BTN_RETRY, TextColor = Color.White, Font = Textures.HUDFontRegular, FontSize = 55, TextAlignment = HUDAlignment.CENTER, TextPadding = 8, Icon = Textures.TexIconError, BackgroundNormal = HUDBackgroundDefinition.CreateRounded(FlatColors.Orange, 16), BackgroundPressed = HUDBackgroundDefinition.CreateRounded(FlatColors.SunFlower, 16), IsVisible = false, Click = (s, a) => StartUpload(), }); StartUpload(); }
public void Initialize(Cockpit cockpit) { cockpit.Name = "modelCockpit"; // Configure how the cockpit moves cockpit.PositionMode = Cockpit.MovementMode.TrackPosition; // [RMS] use orientation mode to make cockpit follow view orientation. // (however default widgets below are off-screen!) //cockpit.PositionMode = Cockpit.MovementMode.TrackOrientation; FScene Scene = cockpit.Scene; BoxContainer screenContainer = new BoxContainer(new Cockpit2DContainerProvider(cockpit)); PinnedBoxes2DLayoutSolver screenLayout = new PinnedBoxes2DLayoutSolver(screenContainer); PinnedBoxesLayout layout = new PinnedBoxesLayout(cockpit, screenLayout) { StandardDepth = 1.5f }; cockpit.AddLayout(layout, "2D", true); Func <string, float, HUDLabel> MakeButtonF = (label, buttonW) => { HUDLabel button = new HUDLabel() { Shape = OrthogenUI.MakeMenuButtonRect(buttonW, OrthogenUI.MenuButtonHeight), TextHeight = OrthogenUI.MenuButtonTextHeight, AlignmentHorz = HorizontalAlignment.Center, BackgroundColor = OrthogenUI.ButtonBGColor, TextColor = OrthogenUI.ButtonTextColor, DisabledTextColor = OrthogenUI.DisabledButtonTextColor, Text = label, EnableBorder = true, BorderWidth = OrthogenUI.StandardButtonBorderWidth, BorderColor = OrthogenUI.ButtonTextColor }; button.Create(); button.Name = label; button.Enabled = true; return(button); }; Func <string, float, float, HUDSpacer> MakeSpacerF = (label, spacerw, spacerh) => { HUDSpacer spacer = new HUDSpacer() { Shape = new HUDShape(HUDShapeType.Rectangle, spacerw, spacerh) }; spacer.Create(); spacer.Name = label; return(spacer); }; HUDElementList button_list = new HUDElementList() { Width = OrthogenUI.MenuButtonWidth, Height = 5 * OrthogenUI.MenuButtonHeight, Spacing = 10 * OrthogenUI.PixelScale, Direction = HUDElementList.ListDirection.Vertical }; HUDLabel trim_scan_button = MakeButtonF("Trim Scan", OrthogenUI.MenuButtonWidth); trim_scan_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.TrimScanStartT); }; button_list.AddListItem(trim_scan_button); HUDLabel align_scan_button = MakeButtonF("Align Scan", OrthogenUI.MenuButtonWidth); align_scan_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.AlignScanStartT); }; button_list.AddListItem(align_scan_button); HUDLabel accept_scan_button = MakeButtonF("Done Scan", OrthogenUI.MenuButtonWidth); accept_scan_button.OnClicked += (sender, e) => { OG.TransitionToState(RectifyState.Identifier); }; button_list.AddListItem(accept_scan_button); button_list.AddListItem(MakeSpacerF("space", OrthogenUI.MenuButtonWidth, 0.5f * OrthogenUI.MenuButtonHeight)); HUDLabel draw_offset_area_button = MakeButtonF("Offset Area", OrthogenUI.MenuButtonWidth); draw_offset_area_button.OnClicked += (sender, e) => { OGActions.CurrentLegDeformType = LegModel.LegDeformationTypes.Offset; OG.Transition(OGWorkflow.DrawAreaStartT); }; button_list.AddListItem(draw_offset_area_button); HUDLabel draw_smooth_area_button = MakeButtonF("Smooth Area", OrthogenUI.MenuButtonWidth); draw_smooth_area_button.OnClicked += (sender, e) => { OGActions.CurrentLegDeformType = LegModel.LegDeformationTypes.Smooth; OG.Transition(OGWorkflow.DrawAreaStartT); }; button_list.AddListItem(draw_smooth_area_button); HUDLabel add_plane_button = MakeButtonF("Add Plane", OrthogenUI.MenuButtonWidth); add_plane_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.AddDeformRingStartT); }; button_list.AddListItem(add_plane_button); HUDLabel add_lengthen_button = MakeButtonF("Add Lengthen", OrthogenUI.MenuButtonWidth); add_lengthen_button.OnClicked += (sender, e) => { if (OGActions.CanAddLengthenOp()) { OGActions.AddLengthenOp(); } }; button_list.AddListItem(add_lengthen_button); HUDLabel sculpt_curve_button = MakeButtonF("Sculpt Curve", OrthogenUI.MenuButtonWidth); WorkflowRouter sculpt_router = WorkflowRouter.Build(new[] { OGWorkflow.RectifyState, OGWorkflow.SculptAreaStartT, OGWorkflow.SocketState, OGWorkflow.SculptTrimlineStartT }); sculpt_curve_button.OnClicked += (sender, e) => { sculpt_router.Apply(OG.Model.Workflow); }; button_list.AddListItem(sculpt_curve_button); HUDLabel accept_rectify_button = MakeButtonF("Begin Socket", OrthogenUI.MenuButtonWidth); accept_rectify_button.OnClicked += (sender, e) => { OG.Leg.SetOpWidgetVisibility(false); OG.TransitionToState(SocketDesignState.Identifier); }; button_list.AddListItem(accept_rectify_button); button_list.AddListItem(MakeSpacerF("space", OrthogenUI.MenuButtonWidth, 0.5f * OrthogenUI.MenuButtonHeight)); HUDLabel draw_trim_line_button = MakeButtonF("Draw Trimline", OrthogenUI.MenuButtonWidth); draw_trim_line_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.DrawTrimlineStartT); }; button_list.AddListItem(draw_trim_line_button); HUDLabel plane_trim_line_button = MakeButtonF("Plane Trimline", OrthogenUI.MenuButtonWidth); plane_trim_line_button.OnClicked += (sender, e) => { OG.Transition(OGWorkflow.PlaneTrimlineStartT); }; button_list.AddListItem(plane_trim_line_button); HUDLabel add_socket_button = MakeButtonF("Add Socket", OrthogenUI.MenuButtonWidth); add_socket_button.OnClicked += (sender, e) => { if (OGActions.CanAddSocket()) { OGActions.AddSocket(); } }; button_list.AddListItem(add_socket_button); HUDLabel export_socket_button = MakeButtonF("Export", OrthogenUI.MenuButtonWidth); export_socket_button.OnClicked += (sender, e) => { if (OGActions.CanExportSocket()) { OGActions.ExportSocket(); } }; button_list.AddListItem(export_socket_button); button_list.AddListItem(MakeSpacerF("space", OrthogenUI.MenuButtonWidth, 1.0f * OrthogenUI.MenuButtonHeight)); HUDLabel accept_button = MakeButtonF("Accept", OrthogenUI.MenuButtonWidth); accept_button.OnClicked += (sender, e) => { OGActions.AcceptCurrentTool(); }; HUDLabel cancel_button = MakeButtonF("Cancel", OrthogenUI.MenuButtonWidth); cancel_button.OnClicked += (sender, e) => { OGActions.CancelCurrentTool(); }; button_list.AddListItem(accept_button); button_list.AddListItem(cancel_button); button_list.Create(); button_list.Name = "button_bar"; // align button list to center of timeline layout.Add(button_list, new LayoutOptions() { Flags = LayoutFlags.None, PinSourcePoint2D = LayoutUtil.BoxPointF(button_list, BoxPosition.TopLeft), PinTargetPoint2D = LayoutUtil.BoxPointF(screenContainer, BoxPosition.TopLeft, 10 * OrthogenUI.PixelScale * (Vector2f.AxisX - Vector2f.AxisY)) }); screenLayout.RecomputeLayout(); // Configure interaction behaviors // - below we add behaviors for mouse, gamepad, and spatial devices (oculus touch, etc) // - keep in mind that Tool objects will register their own behaviors when active // setup key handlers (need to move to behavior...) cockpit.AddKeyHandler(new OrthoGenKeyHandler(cockpit.Context)); // these behaviors let us interact with UIElements (ie left-click/trigger, or either triggers for Touch) cockpit.InputBehaviors.Add(new Mouse2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context) { Priority = 1 }); // selection / multi-selection behaviors // Note: this custom behavior implements some selection redirects that we use in various parts of Archform cockpit.InputBehaviors.Add(new MouseMultiSelectBehavior(cockpit.Context) { Priority = 10 }); // left click-drag to tumble, and left click-release to de-select cockpit.InputBehaviors.Add(new MouseClickDragSuperBehavior() { Priority = 100, DragBehavior = new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f }, ClickBehavior = new MouseDeselectBehavior(cockpit.Context) { Priority = 999 } }); // also right-click-drag to tumble cockpit.InputBehaviors.Add(new MouseViewRotateBehavior(cockpit.Context) { Priority = 100, RotateSpeed = 3.0f, ActivateF = MouseBehaviors.RightButtonPressedF, ContinueF = MouseBehaviors.RightButtonDownF }); // middle-click-drag to pan cockpit.InputBehaviors.Add(new MouseViewPanBehavior(cockpit.Context) { Priority = 100, PanSpeed = 10.0f, ActivateF = MouseBehaviors.MiddleButtonPressedF, ContinueF = MouseBehaviors.MiddleButtonDownF }); cockpit.OverrideBehaviors.Add(new MouseWheelZoomBehavior(cockpit) { Priority = 100, ZoomScale = 100.0f }); // touch input cockpit.InputBehaviors.Add(new TouchUIBehavior(cockpit.Context) { Priority = 1 }); cockpit.InputBehaviors.Add(new Touch2DCockpitUIBehavior(cockpit.Context) { Priority = 0 }); cockpit.InputBehaviors.Add(new TouchViewManipBehavior(cockpit.Context) { Priority = 999, TouchZoomSpeed = 1.0f, TouchPanSpeed = 0.3f }); // update buttons enable/disable on state transitions, selection changes Action updateStateChangeButtons = () => { trim_scan_button.Enabled = OG.CanTransition(OGWorkflow.TrimScanStartT); align_scan_button.Enabled = OG.CanTransition(OGWorkflow.AlignScanStartT); accept_scan_button.Enabled = OG.IsInState(ScanState.Identifier) && OG.CanTransitionToState(RectifyState.Identifier); draw_offset_area_button.Enabled = OG.CanTransition(OGWorkflow.DrawAreaStartT); draw_smooth_area_button.Enabled = OG.CanTransition(OGWorkflow.DrawAreaStartT); add_plane_button.Enabled = OG.CanTransition(OGWorkflow.AddDeformRingStartT); add_lengthen_button.Enabled = OGActions.CanAddLengthenOp(); accept_rectify_button.Enabled = OG.IsInState(RectifyState.Identifier) && OG.CanTransitionToState(SocketDesignState.Identifier); draw_trim_line_button.Enabled = OG.CanTransition(OGWorkflow.DrawTrimlineStartT); plane_trim_line_button.Enabled = OG.CanTransition(OGWorkflow.PlaneTrimlineStartT); add_socket_button.Enabled = OGActions.CanAddSocket(); export_socket_button.Enabled = OGActions.CanExportSocket(); sculpt_curve_button.Enabled = sculpt_router.CanApply(OG.Model.Workflow); }; OG.OnWorfklowInitialized += (o, e) => { updateStateChangeButtons(); }; OG.OnStateTransition += (from, to) => { updateStateChangeButtons(); }; OG.OnDataModelModified += (from, to) => { updateStateChangeButtons(); }; cockpit.Scene.SelectionChangedEvent += (o, e) => { if (OG.WorkflowInitialized) { updateStateChangeButtons(); } }; cockpit.Scene.ChangedEvent += (scene, so, type) => { if (OG.WorkflowInitialized) { updateStateChangeButtons(); } }; // accept/cancel buttons need to be checked every frame because the CanApply state // could change at any time, and there is no event about it cockpit.Context.RegisterEveryFrameAction("update_buttons", () => { if (cockpit.Context.ToolManager.ActiveRightTool != null) { cancel_button.Enabled = true; accept_button.Enabled = cockpit.Context.ToolManager.ActiveRightTool.CanApply; } else { cancel_button.Enabled = accept_button.Enabled = false; } // [RMS] currently this state changes outside workflow state changes... add_socket_button.Enabled = OGActions.CanAddSocket(); }); }
public override void OnInitialize() { #region Header AddElement(new HUDRectangle(-99) { Alignment = HUDAlignment.TOPCENTER, RelativePosition = FPoint.Zero, Size = new FSize(WIDTH, 1.40f * TW), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD.Darken(0.9f), 16, true, true, false, false), }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTER, Alignment = HUDAlignment.TOPCENTER, RelativePosition = new FPoint(0, 0), Size = new FSize(WIDTH, 1.40f * TW), Font = Textures.HUDFontBold, FontSize = TW, Text = _meta?.LevelName ?? _blueprint.FullName, WordWrap = HUDWordWrap.Ellipsis, TextColor = Color.White, }); var starred = MainGame.Inst.Profile.HasCustomLevelStarred(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID); var mylevel = ((_meta?.UserID ?? _blueprint.CustomMeta_UserID) == MainGame.Inst.Profile.OnlineUserID); AddElement(_btnStar = new HUDEllipseImageButton { Alignment = HUDAlignment.TOPRIGHT, RelativePosition = new FPoint(0, 0), Size = new FSize(64, 64), Image = Textures.TexIconStar, BackgroundNormal = Color.Transparent, BackgroundPressed = FlatColors.ButtonPressedHUD, ImageColor = (starred || mylevel) ? FlatColors.SunFlower : FlatColors.Silver, ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, Click = (s, a) => ToggleStar(), IsEnabled = ((_meta?.UserID ?? _blueprint.CustomMeta_UserID) != MainGame.Inst.Profile.OnlineUserID) && (MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID)), }); AddElement(_lblStar = new HUDLabel { Alignment = HUDAlignment.TOPRIGHT, RelativePosition = new FPoint(0, 55), Size = new FSize(64, 32), Font = Textures.HUDFontRegular, FontSize = 24, Text = (_meta == null) ? "?" : _meta.Stars.ToString(), WordWrap = HUDWordWrap.NoWrap, TextColor = (starred || mylevel) ? FlatColors.SunFlower : FlatColors.Silver, TextAlignment = HUDAlignment.TOPCENTER, }); #endregion #region Tab Header AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(1 * TW, 1 * TW), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontBold, FontSize = 32, L10NText = L10NImpl.STR_INF_YOU, WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(4 * TW, 1 * TW), Size = new FSize(6 * TW, TW), Font = Textures.HUDFontBold, FontSize = 32, L10NText = L10NImpl.STR_INF_HIGHSCORE, WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(10 * TW, 1 * TW), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontBold, FontSize = 32, L10NText = L10NImpl.STR_INF_CLEARS, WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.Clouds, }); #endregion #region Tab Col Images AddElement(new HUDImage { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(8, 2 * TW + 16 + (48 + 16) * 0 + 8), Size = new FSize(48, 48), Image = Textures.TexDifficultyLine0, Color = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_0) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_0) : FlatColors.Silver, ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, }); AddElement(new HUDImage { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(8, 2 * TW + 16 + (48 + 16) * 1 + 8), Size = new FSize(48, 48), Image = Textures.TexDifficultyLine1, Color = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_1) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_1) : FlatColors.Silver, ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, }); AddElement(new HUDImage { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(8, 2 * TW + 16 + (48 + 16) * 2 + 8), Size = new FSize(48, 48), Image = Textures.TexDifficultyLine2, Color = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_2) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_2) : FlatColors.Silver, ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, }); AddElement(new HUDImage { Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(8, 2 * TW + 16 + (48 + 16) * 3 + 8), Size = new FSize(48, 48), Image = Textures.TexDifficultyLine3, Color = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_3) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_3) : FlatColors.Silver, ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, }); #endregion #region Tab Col 1 AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(1 * TW, 2 * TW + 16 + (48 + 16) * 0), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = MainGame.Inst.Profile.GetCustomLevelTimeString(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_0), WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_0) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_0) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(1 * TW, 2 * TW + 16 + (48 + 16) * 1), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = MainGame.Inst.Profile.GetCustomLevelTimeString(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_1), WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_1) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_1) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(1 * TW, 2 * TW + 16 + (48 + 16) * 2), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = MainGame.Inst.Profile.GetCustomLevelTimeString(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_2), WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_2) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_2) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(1 * TW, 2 * TW + 16 + (48 + 16) * 3), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = MainGame.Inst.Profile.GetCustomLevelTimeString(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_3), WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_3) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_3) : FlatColors.TextHUD, }); #endregion #region Tab Col 2 AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(4 * TW, 2 * TW + 16 + (48 + 16) * 0), Size = new FSize(6 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_0].FormatHighscoreCell() ?? "", WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_0) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_0) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(4 * TW, 2 * TW + 16 + (48 + 16) * 1), Size = new FSize(6 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_1].FormatHighscoreCell() ?? "", WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_1) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_1) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(4 * TW, 2 * TW + 16 + (48 + 16) * 2), Size = new FSize(6 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_2].FormatHighscoreCell() ?? "", WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_2) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_2) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(4 * TW, 2 * TW + 16 + (48 + 16) * 3), Size = new FSize(6 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_3].FormatHighscoreCell() ?? "", WordWrap = HUDWordWrap.Ellipsis, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_3) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_3) : FlatColors.TextHUD, }); #endregion #region Tab Col 3 AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(10 * TW, 2 * TW + 16 + (48 + 16) * 0), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_0].FormatGlobalClearsCell() ?? "", WordWrap = HUDWordWrap.NoWrap, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_0) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_0) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(10 * TW, 2 * TW + 16 + (48 + 16) * 1), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_1].FormatGlobalClearsCell() ?? "", WordWrap = HUDWordWrap.NoWrap, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_1) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_1) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(10 * TW, 2 * TW + 16 + (48 + 16) * 2), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_2].FormatGlobalClearsCell() ?? "", WordWrap = HUDWordWrap.NoWrap, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_2) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_2) : FlatColors.TextHUD, }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.CENTERLEFT, Alignment = HUDAlignment.TOPLEFT, RelativePosition = new FPoint(10 * TW, 2 * TW + 16 + (48 + 16) * 3), Size = new FSize(3 * TW, TW), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Highscores[(int)FractionDifficulty.DIFF_3].FormatGlobalClearsCell() ?? "", WordWrap = HUDWordWrap.NoWrap, TextColor = MainGame.Inst.Profile.HasCustomLevelBeaten(_meta?.OnlineID ?? _blueprint.CustomMeta_LevelID, FractionDifficulty.DIFF_3) ? FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_3) : FlatColors.TextHUD, }); #endregion #region Footer AddElement(new HUDRectangle { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = FPoint.Zero, Size = new FSize(WIDTH, 1.5f * TW), Definition = HUDBackgroundDefinition.CreateRounded(FlatColors.BackgroundHUD2, 16, false, false, true, true), }); AddElement(new HUDSeperator(HUDOrientation.Horizontal, 3) { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(0, 1.5f * TW), Size = new FSize(WIDTH, HUD.PixelWidth), Color = FlatColors.SeperatorHUD, }); AddElement(_btnPlay0 = new HUDEllipseImageButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(-84 / 2 - 16 - 84 - 32, 6), Size = new FSize(84, 84), Image = Textures.TexDifficultyLine0, BackgroundNormal = FlatColors.ButtonHUD, BackgroundPressed = FlatColors.ButtonPressedHUD, ImageColor = FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_0), ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, Click = (s, a) => Play(FractionDifficulty.DIFF_0), }); AddElement(_btnPlay1 = new HUDEllipseImageButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(-84 / 2 - 16, 6), Size = new FSize(84, 84), Image = Textures.TexDifficultyLine1, BackgroundNormal = FlatColors.ButtonHUD, BackgroundPressed = FlatColors.ButtonPressedHUD, ImageColor = FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_1), ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, Click = (s, a) => Play(FractionDifficulty.DIFF_1), }); AddElement(_btnPlay2 = new HUDEllipseImageButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(+84 / 2 + 16, 6), Size = new FSize(84, 84), Image = Textures.TexDifficultyLine2, BackgroundNormal = FlatColors.ButtonHUD, BackgroundPressed = FlatColors.ButtonPressedHUD, ImageColor = FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_2), ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, Click = (s, a) => Play(FractionDifficulty.DIFF_2), }); AddElement(_btnPlay3 = new HUDEllipseImageButton { Alignment = HUDAlignment.BOTTOMCENTER, RelativePosition = new FPoint(+84 / 2 + 16 + 84 + 32, 6), Size = new FSize(84, 84), Image = Textures.TexDifficultyLine3, BackgroundNormal = FlatColors.ButtonHUD, BackgroundPressed = FlatColors.ButtonPressedHUD, ImageColor = FractionDifficultyHelper.GetColor(FractionDifficulty.DIFF_3), ImageAlignment = HUDImageAlignmentAlgorithm.CENTER, ImageScale = HUDImageScaleAlgorithm.STRETCH, Click = (s, a) => Play(FractionDifficulty.DIFF_3), }); AddElement(new HUDLabel { TextAlignment = HUDAlignment.BOTTOMRIGHT, Alignment = HUDAlignment.BOTTOMRIGHT, RelativePosition = new FPoint(4, 4), Size = new FSize(236, 32), Font = Textures.HUDFontRegular, FontSize = 32, Text = _meta?.Username ?? "???", WordWrap = HUDWordWrap.Ellipsis, TextColor = FlatColors.GreenSea, }); #endregion if (_blueprint == null && _meta != null) { StartDownload(); } else if (_blueprint != null && _meta == null) { StartMetaUpdate(); } else if (_blueprint != null && _meta != null) { _downloadState = DownloadState.Finished; } else { SAMLog.Error("SCCMLPD::EnumSwitch_OI", $"_blueprint: '{_blueprint}' | _meta = '{_meta}'"); } }