protected override async Task LoadContent() { await base.LoadContent(); var sprites = Content.Load <SpriteSheet>("UIImages"); element1 = new Button { Name = "1", Width = 300, Height = 150 }; element1.PressedImage = SpriteFromSheet.Create(sprites, "Logo"); element1.NotPressedImage = SpriteFromSheet.Create(sprites, "BorderButton"); element1.DependencyProperties.Set(Canvas.AbsolutePositionPropertyKey, new Vector3(350, 300, 0)); element1.DependencyProperties.Set(Panel.ZIndexPropertyKey, 1); element2 = new Button { Name = "2", Width = 600, Height = 300 }; element2.DependencyProperties.Set(Canvas.AbsolutePositionPropertyKey, new Vector3(200, 100, -50)); element2.DependencyProperties.Set(Panel.ZIndexPropertyKey, 0); element2.PressedImage = (SpriteFromTexture) new Sprite(Content.Load <Texture>("ImageButtonPressed")); element2.NotPressedImage = (SpriteFromTexture) new Sprite(Content.Load <Texture>("ImageButtonNotPressed")); var canvas = new Canvas(); canvas.Children.Add(element1); canvas.Children.Add(element2); UIComponent.Page = new Engine.UIPage { RootElement = canvas }; }
public void SpriteFromSheetTests() { var fromNullSheet = new SpriteFromSheet(); Assert.Equal(0, fromNullSheet.SpritesCount); Assert.Null(fromNullSheet.GetSprite()); var emptySheet = new SpriteSheet(); var fromEmptySheet = new SpriteFromSheet { Sheet = emptySheet }; Assert.Equal(0, fromEmptySheet.SpritesCount); Assert.Null(fromEmptySheet.GetSprite()); var validSheet = new SpriteSheet { Sprites = { new Sprite("0"), new Sprite("1") } }; var fromValidSheet = new SpriteFromSheet { Sheet = validSheet }; Assert.Equal(2, fromValidSheet.SpritesCount); for (var i = 0; i < fromValidSheet.SpritesCount; i++) { fromValidSheet.CurrentFrame = i; Assert.Equal(i.ToString(), fromValidSheet.GetSprite().Name); } }
public void SpriteFromSheetTests() { var fromNullSheet = new SpriteFromSheet(); Assert.AreEqual(0, fromNullSheet.SpritesCount); Assert.IsNull(fromNullSheet.GetSprite(0)); var emptySheet = new SpriteSheet(); var fromEmptySheet = new SpriteFromSheet { Sheet = emptySheet }; Assert.AreEqual(0, fromEmptySheet.SpritesCount); Assert.IsNull(fromEmptySheet.GetSprite(0)); var validSheet = new SpriteSheet() { Sprites = { new Sprite("0"), new Sprite("1") } }; var fromValidSheet = new SpriteFromSheet { Sheet = validSheet }; Assert.AreEqual(2, fromValidSheet.SpritesCount); for (int i = 0; i < fromValidSheet.SpritesCount; i++) { Assert.AreEqual(i.ToString(), fromValidSheet.GetSprite(i).Name); } }
protected override async Task LoadContent() { await base.LoadContent(); var sprites = Content.Load <SpriteSheet>("RotatedImages"); var img1 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "NRNR"), StretchType = StretchType.Fill }; var img2 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "RNR"), StretchType = StretchType.Fill }; var img3 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "NRR"), StretchType = StretchType.Fill }; var img4 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "RR"), StretchType = StretchType.Fill }; img1.SetGridColumnSpan(2); img2.SetGridColumnSpan(2); img2.SetGridRow(1); img3.SetGridRowSpan(2); img3.SetGridColumn(2); img4.SetGridRowSpan(2); img4.SetGridColumn(3); var grid = new UniformGrid { Rows = 2, Columns = 4, Children = { img1, img2, img3, img4 } }; UIComponent.RootElement = grid; }
protected override async Task LoadContent() { await base.LoadContent(); var sprites = Content.Load <SpriteSheet>("UIImages"); var img1 = new ImageElement { Name = "UV 1 stack panel", Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; var img2 = new ImageElement { Name = "UV 2 stack panel", Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; img3 = new ImageElement { Name = "UV 3 stack panel", Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; stackPanel = new StackPanel { Orientation = Orientation.Vertical }; stackPanel.Children.Add(img1); stackPanel.Children.Add(img2); stackPanel.Children.Add(img3); var img4 = new ImageElement { Name = "UV grid", Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; var img5 = new ImageElement { Name = "UV grid 2", Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; var img6 = new ImageElement { Name = "Game screen grid", Source = SpriteFromSheet.Create(sprites, "GameScreen") }; img4.DependencyProperties.Set(GridBase.ColumnPropertyKey, 0); img4.DependencyProperties.Set(GridBase.RowPropertyKey, 0); img5.DependencyProperties.Set(GridBase.ColumnPropertyKey, 1); img5.DependencyProperties.Set(GridBase.RowPropertyKey, 0); img6.DependencyProperties.Set(GridBase.ColumnPropertyKey, 0); img6.DependencyProperties.Set(GridBase.RowPropertyKey, 1); img6.DependencyProperties.Set(GridBase.ColumnSpanPropertyKey, 2); grid = new UniformGrid { Columns = 2, Rows = 2 }; grid.Children.Add(img4); grid.Children.Add(img5); grid.Children.Add(img6); scrollViewer = new ScrollViewer { Content = grid, ScrollMode = ScrollingMode.HorizontalVertical }; contentDecorator = new ContentDecorator { Content = scrollViewer }; UIComponent.RootElement = contentDecorator; }
protected override async Task LoadContent() { await base.LoadContent(); var random = new Random(0); var sprites = Content.Load <SpriteSheet>("UIImages"); var img1 = new ImageElement { Source = (SpriteFromTexture) new Sprite(Content.Load <Texture>("uv")) }; var img2 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "GameScreenLeft") }; var img3 = new ImageElement { Source = SpriteFromSheet.Create(sprites, "GameScreenRight") }; stackPanel1 = new StackPanel { Orientation = Orientation.Vertical, ItemVirtualizationEnabled = true }; stackPanel1.Children.Add(img1); stackPanel1.Children.Add(img2); stackPanel1.Children.Add(img3); stackPanel2 = new StackPanel { Orientation = Orientation.Vertical, ItemVirtualizationEnabled = true }; for (var i = 0; i < 1000; i++) { stackPanel2.Children.Add(CreateButton("" + i, 75, "button number " + i)); } stackPanel3 = new StackPanel { Orientation = Orientation.Vertical, ItemVirtualizationEnabled = true, VerticalAlignment = VerticalAlignment.Center }; for (var i = 0; i < 103; i++) { stackPanel3.Children.Add(CreateButton("" + i, 50 + 500 * random.NextFloat(), "random button number " + i)); } stackPanel4 = new StackPanel { Orientation = Orientation.Vertical, ItemVirtualizationEnabled = true }; for (var i = 0; i < 5; i++) { stackPanel4.Children.Add(CreateButton("" + i, i * 30, "random button number ")); } currentStackPanel = stackPanel1; scrollViewer = new ScrollViewer { Name = "sv", Content = currentStackPanel, ScrollMode = ScrollingMode.Vertical }; UIComponent.Page = new Engine.UIPage { RootElement = scrollViewer }; }
protected override async Task LoadContent() { await base.LoadContent(); var uiGroup = Content.Load <SpriteSheet>("UIImages"); element4 = new ContentDecorator { Name = "4", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Width = 200, Height = 100, LocalMatrix = Matrix.Translation(-50, -50, 0), BackgroundImage = SpriteFromSheet.Create(uiGroup, "uvNotRotated") }; element3 = new ContentDecorator { Name = "3", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Width = 300, Height = 150, Content = element4, LocalMatrix = Matrix.Translation(-200, -100, 0), BackgroundImage = SpriteFromSheet.Create(uiGroup, "uvRotated90") }; element2 = new ContentDecorator { Name = "2", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Width = 600, Height = 300, Content = element3, BackgroundImage = SpriteFromSheet.Create(uiGroup, "BorderButton") }; element2.DependencyProperties.Set(Canvas.AbsolutePositionPropertyKey, new Vector3(400, 200, 0)); element2.DependencyProperties.Set(Panel.ZIndexPropertyKey, 1); element1 = new ContentDecorator { Name = "1", HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top, Width = 600, Height = 300, BackgroundImage = SpriteFromSheet.Create(uiGroup, "GameScreen") }; var canvas = new Canvas(); canvas.Children.Add(element1); canvas.Children.Add(element2); UIComponent.Page = new Engine.UIPage { RootElement = canvas }; }
protected override void LoadScene() { popupWindowImage = SpriteFromSheet.Create(MainSceneImages, "popup_window"); // Preload stars starSprites.Add(MainSceneImages["star0"]); starSprites.Add(MainSceneImages["star1"]); starSprites.Add(MainSceneImages["star2"]); starSprites.Add(MainSceneImages["star3"]); borderStarImages.Add(MainSceneImages["bstar0"]); borderStarImages.Add(MainSceneImages["bstar1"]); borderStarImages.Add(MainSceneImages["bstar2"]); borderStarImages.Add(MainSceneImages["bstar3"]); // Create space ships var random = new Random(); for (var i = 0; i < ShipNameList.Count; i++) { shipList.Add(new SpaceShip { Name = ShipNameList[i], Power = random.Next(4), Control = random.Next(4), Speed = random.Next(4), IsLocked = (i % 3) == 2, }); } var mainStackPanel = CreateMainScene(); CreateWelcomePopup(); CreateShipSelectionPopup(); // Create the background var background = new ImageElement { Source = SpriteFromSheet.Create(MainSceneImages, "background_uiimage"), StretchType = StretchType.Fill }; background.SetPanelZIndex(-1); // Overlay pop-ups and the main screen var overlay = new UniformGrid(); overlay.Children.Add(background); overlay.Children.Add(mainStackPanel); overlay.Children.Add(welcomePopup); overlay.Children.Add(shipSelectPopup); // Set the root element to the overall overlay var uiComponent = Entity.Get <UIComponent>(); uiComponent.RootElement = overlay; Script.AddTask(FillLifeBar); }
private void SetSliderImages(bool setRotatedImages) { var suffix = setRotatedImages ? "Rotated" : ""; slider.TrackBackgroundImage = SpriteFromSheet.Create(sliderImages, "Background" + suffix); slider.TrackForegroundImage = SpriteFromSheet.Create(sliderImages, "Foreground" + suffix); slider.ThumbImage = SpriteFromSheet.Create(sliderImages, "Thumb" + suffix); slider.MouseOverThumbImage = SpriteFromSheet.Create(sliderImages, "ThumbOverred" + suffix); slider.TickImage = SpriteFromSheet.Create(sliderImages, "Tick" + suffix); }
/// <summary> /// Load resource and construct ui components /// </summary> public override void Start() { // Load resources shared by different UI screens buttonImage = SpriteFromSheet.Create(UIImages, "button"); // Load and create specific UI screens. CreateMainMenuUI(); CreateGameUI(); CreateGameOverUI(); }
private static Entity CreateSpriteEntity(SpriteSheet sheet, string frameName) { return(new Entity(frameName) { new SpriteComponent { SpriteProvider = SpriteFromSheet.Create(sheet, frameName) } }); }
public override void Start() { physics = Entity.Get <RigidbodyComponent>(); robotLight = Entity.Get <RobotLight>(); robotHolder = Entity.Get <RobotHolder>(); robotLaser = Entity.Get <RobotLaser>(); spriteProvider = Entity.Get <SpriteComponent>().SpriteProvider as SpriteFromSheet; robotLight.UpdateTransform(direction); UpdateSprite(direction); }
private UIElement CreateMainSceneShipStatusStars(string imageName, UIElement content, int rowIndex) { var item = new ContentDecorator { Content = content, BackgroundImage = SpriteFromSheet.Create(MainSceneImages, imageName), HorizontalAlignment = HorizontalAlignment.Center }; item.SetGridRow(rowIndex); return(item); }
public override void Start() { _characterSpriteSheet = Entity.Get <SpriteComponent>().SpriteProvider as SpriteFromSheet; _characterSpriteComponent = Entity.Get <SpriteComponent>(); _characterEntity = SceneSystem.SceneInstance.Scene.Entities.First(e => e.Name == "Character"); //_characterEntity.Transform.Scale = new Vector3(1f, 1f, 1); _bufferWidth = GraphicsDevice.Presenter.Description.BackBufferWidth; _bufferHeight = GraphicsDevice.Presenter.Description.BackBufferHeight; Initialize(); }
private Entity CreateSpriteEntity(SpriteSheet sheet, string frameName) { var entity = new Entity(frameName) { new SpriteComponent { SpriteProvider = SpriteFromSheet.Create(sheet, frameName) } }; entities.Add(entity); return(entity); }
private void CreateMainMenuUI() { var strideLogo = new ImageElement { Source = SpriteFromSheet.Create(UIImages, "sd_logo") }; strideLogo.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 1f)); strideLogo.SetCanvasRelativeSize(new Vector3(0.75f, 0.5f, 1f)); strideLogo.SetCanvasRelativePosition(new Vector3(0.5f, 0.3f, 1f)); var startButton = new Button { Content = new TextBlock { Font = Font, Text = "Touch to Start", TextColor = Color.Black, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, NotPressedImage = buttonImage, PressedImage = buttonImage, MouseOverImage = buttonImage, Padding = new Thickness(77, 30, 25, 30), MinimumWidth = 250f, }; startButton.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 1f)); startButton.SetCanvasRelativePosition(new Vector3(0.5f, 0.7f, 0f)); startButton.Click += (sender, args) => { GameGlobals.GameStartedEventKey.Broadcast(); StartGameMode(); }; var mainMenuCanvas = new Canvas(); mainMenuCanvas.Children.Add(strideLogo); mainMenuCanvas.Children.Add(startButton); mainMenuRoot = new ModalElement { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Content = mainMenuCanvas }; }
private Entity CreateSpriteEntity(SpriteSheet sheet, string frameName, bool addToScene = true) { var entity = new Entity(frameName) { new SpriteComponent { SpriteProvider = SpriteFromSheet.Create(sheet, frameName) } }; if (addToScene) { entities.Add(entity); } return(entity); }
private Button CreateTextButton(string text) { var buttonImage = SpriteFromSheet.Create(MainSceneImages, "button0"); return(new Button { NotPressedImage = buttonImage, PressedImage = buttonImage, MouseOverImage = buttonImage, Content = new TextBlock { Font = WesternFont, TextColor = Color.White, Text = text, }, Padding = new Thickness(90, 30, 25, 35), }); }
private void CreateGameUI() { distanceTextBlock = new TextBlock { Font = Font, TextColor = Color.Gold, VerticalAlignment = VerticalAlignment.Center }; distanceTextBlock.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 1f)); distanceTextBlock.SetCanvasRelativePosition(new Vector3(0.2f, 0.05f, 0f)); var scoreBoard = new ContentDecorator { BackgroundImage = SpriteFromSheet.Create(UIImages, "distance_bg"), Content = distanceTextBlock, Padding = new Thickness(60, 31, 25, 35), MinimumWidth = 290f // Set the minimum width of score button so that it wont modify when the content (text) changes, and less than minimum. }; gameRoot = new Canvas(); gameRoot.Children.Add(scoreBoard); }
private UIElement CreateBottomBar() { // Create Life bar lifeBarGaugeImage = ButtonsImages["rope_small"]; gaugeBarRegion = lifeBarGaugeImage.Region; var lifebarGauge = new ImageElement { Name = "LifeBarBackground", Source = SpriteFromSheet.Create(ButtonsImages, "rope_small"), StretchType = StretchType.Fill, }; lifebarGauge.SetGridColumn(1); lifeBarGrid = new Grid(); lifeBarGrid.Children.Add(lifebarGauge); lifeBarGrid.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 8)); lifeBarGrid.ColumnDefinitions.Add(new StripDefinition(StripType.Star, 0)); lifeBarGrid.ColumnDefinitions.Add(new StripDefinition(StripType.Star, 100)); lifeBarGrid.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 8)); lifeBarGrid.RowDefinitions.Add(new StripDefinition()); lifeBarGrid.LayerDefinitions.Add(new StripDefinition()); lifeBarGrid.SetCanvasRelativePosition(new Vector3(0f, 0.185f, 0f)); lifeBarGrid.SetCanvasRelativeSize(new Vector3(1f, 1f, 1f)); lifeBarGrid.SetPanelZIndex(-1); // the main grid of the top bar var mainLayer = new Canvas { VerticalAlignment = VerticalAlignment.Top, MaximumHeight = 10 }; mainLayer.Children.Add(lifeBarGrid); return(mainLayer); }
private void CreateMainMenuUI() { var xenkoLogo = new ImageElement { Source = SpriteFromSheet.Create(UIImages, "xk_logo") }; xenkoLogo.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 1f)); xenkoLogo.SetCanvasRelativeSize(new Vector3(0.75f, 0.5f, 1f)); xenkoLogo.SetCanvasRelativePosition(new Vector3(0.5f, 0.3f, 1f)); StartButton = new Button { Content = new TextBlock { Font = Font, Text = "Touch to Start", TextColor = Color.Black, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, NotPressedImage = buttonImage, PressedImage = buttonImage, MouseOverImage = buttonImage, Padding = new Thickness(77, 30, 25, 30), MinimumWidth = 250f, }; StartButton.SetCanvasPinOrigin(new Vector3(0.5f, 0.5f, 1f)); StartButton.SetCanvasRelativePosition(new Vector3(0.5f, 0.7f, 0f)); var mainMenuCanvas = new Canvas(); mainMenuCanvas.Children.Add(xenkoLogo); mainMenuCanvas.Children.Add(StartButton); mainMenuRoot = new ModalElement { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, Content = mainMenuCanvas }; }
private Button CreateIncreaseStatusButton(string text, int rowIndex, int columnIndex, int moneyCost, int bonuscost, Func <int> getProperty, Action setProperty) { var button = new Button { NotPressedImage = SpriteFromSheet.Create(MainSceneImages, "small_display_element"), MouseOverImage = SpriteFromSheet.Create(MainSceneImages, "small_display_element"), PressedImage = SpriteFromSheet.Create(MainSceneImages, "small_display_element_pressed"), MinimumWidth = 80, Name = text, Content = new TextBlock { Font = WesternFont, TextColor = Color.Black, Text = text, TextSize = 54, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }, Padding = new Thickness(22, 11, 22, 15) }; button.SetGridColumn(columnIndex); button.SetGridRow(rowIndex); button.Click += delegate { if (!CanPurchase(moneyCost, bonuscost) || getProperty() >= MaximumStar) { return; } setProperty(); PurchaseWithBonus(bonuscost); PurchaseWithMoney(moneyCost); }; return(button); }
public override async Task Execute() { spriteSheet = BulletSheet; agentSpriteComponent = Entity.Get <SpriteComponent>(); var animComponent = Entity.Get <AnimationComponent>(); PlayingAnimation playingAnimation = null; // Calculate offset of the bullet from the Agent if he is facing left and right side // TODO improve this var bulletOffset = new Vector3(1.3f, 1.65f, 0f); // Initialize game entities if (!IsLiveReloading) { shootDelayCounter = 0f; isAgentFacingRight = true; currentAgentAnimation = AgentAnimation.Idle; } CurrentAgentAnimation = currentAgentAnimation; var normalScaleX = Entity.Transform.Scale.X; var bulletCS = BulletColliderShape; Task animTask = null; while (Game.IsRunning) { await Script.NextFrame(); var inputState = GetKeyboardInputState(); if (inputState == InputState.None) { inputState = GetPointerInputState(); } if (inputState == InputState.RunLeft || inputState == InputState.RunRight) { // Update Agent's position var dt = (float)Game.UpdateTime.Elapsed.TotalSeconds; Entity.Transform.Position.X += ((inputState == InputState.RunRight) ? AgentMoveDistance : -AgentMoveDistance) * dt; if (Entity.Transform.Position.X < -gameWidthHalfX) { Entity.Transform.Position.X = -gameWidthHalfX; } if (Entity.Transform.Position.X > gameWidthHalfX) { Entity.Transform.Position.X = gameWidthHalfX; } isAgentFacingRight = inputState == InputState.RunRight; // If agent face left, flip the sprite Entity.Transform.Scale.X = isAgentFacingRight ? normalScaleX : -normalScaleX; // Update the sprite animation and state CurrentAgentAnimation = AgentAnimation.Run; if (playingAnimation == null || playingAnimation.Name != "Run") { playingAnimation = animComponent.Play("Run"); } } else if (inputState == InputState.Shoot) { if (animTask != null && !animTask.IsCompleted) { continue; } if (animTask != null && animTask.IsCompleted) { playingAnimation = null; } animTask = null; var rb = new RigidbodyComponent { CanCollideWith = CollisionFilterGroupFlags.CustomFilter1, CollisionGroup = CollisionFilterGroups.DefaultFilter }; rb.ColliderShapes.Add(new ColliderShapeAssetDesc { Shape = bulletCS }); // Spawns a new bullet var bullet = new Entity { new SpriteComponent { SpriteProvider = SpriteFromSheet.Create(spriteSheet, "bullet") }, rb, new BeamScript() }; bullet.Name = "bullet"; bullet.Transform.Position = (isAgentFacingRight) ? Entity.Transform.Position + bulletOffset : Entity.Transform.Position + (bulletOffset * new Vector3(-1, 1, 1)); bullet.Transform.UpdateWorldMatrix(); SceneSystem.SceneInstance.RootScene.Entities.Add(bullet); rb.LinearFactor = new Vector3(1, 0, 0); rb.AngularFactor = new Vector3(0, 0, 0); rb.ApplyImpulse(isAgentFacingRight ? new Vector3(25, 0, 0) : new Vector3(-25, 0, 0)); // Start animation for shooting CurrentAgentAnimation = AgentAnimation.Shoot; if (playingAnimation == null || playingAnimation.Name != "Attack") { playingAnimation = animComponent.Play("Attack"); animTask = animComponent.Ended(playingAnimation); } } else { CurrentAgentAnimation = AgentAnimation.Idle; if (playingAnimation == null || playingAnimation.Name != "Stance") { playingAnimation = animComponent.Play("Stance"); } } } }
/// <summary> /// Creates a new instance of <see cref="SpriteComponent"/> /// </summary> public SpriteComponent() { SpriteProvider = new SpriteFromSheet(); PremultipliedAlpha = true; }
private UIElement CreateMainScene() { // the top life bar var topBar = CreateMainScreneTopBar(); // Create Name label nameTextBlock = new TextBlock { Font = WesternFont, TextSize = 52, TextColor = Color.LightGreen, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, Margin = new Thickness(50, 0, 50, 0) }; var nameLabel = new ContentDecorator { BackgroundImage = SpriteFromSheet.Create(MainSceneImages, "tex_edit_inactivated_background"), Content = nameTextBlock, Padding = new Thickness(20, 15, 20, 20), HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center }; nameLabel.SetGridRow(1); // Create Character image var characterImage = new ImageElement { Name = "HeroImage", Source = SpriteFromSheet.Create(MainSceneImages, "character"), HorizontalAlignment = HorizontalAlignment.Center, }; characterImage.SetGridRow(2); // Create Explanation TextBlock var explanationLabel = new ContentDecorator { BackgroundImage = SpriteFromSheet.Create(MainSceneImages, "description_frame"), HorizontalAlignment = HorizontalAlignment.Center, Content = new TextBlock { Font = JapaneseFont, TextSize = 28, TextColor = Color.White, Text = "Pictogram-based alphabets are easily supported.\n日本語も簡単に入れることが出来ます。", HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, WrapText = true }, Padding = new Thickness(50, 30, 50, 40), }; explanationLabel.SetGridRow(3); // The ship status panel var shipStatusPanel = CreateMainSceneShipStatusPanel(); shipStatusPanel.SetGridRow(4); // Create quit button (Last element) var quitButton = CreateTextButton("Quit Sample"); quitButton.HorizontalAlignment = HorizontalAlignment.Center; quitButton.VerticalAlignment = VerticalAlignment.Center; quitButton.Click += delegate { UIGame.Exit(); }; quitButton.SetGridRow(5); // Put region together in the main grid var mainLayout = new Grid(); mainLayout.ColumnDefinitions.Add(new StripDefinition()); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 15)); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 10)); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 20)); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 20)); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 25)); mainLayout.RowDefinitions.Add(new StripDefinition(StripType.Star, 10)); mainLayout.LayerDefinitions.Add(new StripDefinition()); // set minimal and maximal size of rows mainLayout.RowDefinitions[0].MaximumSize = topBar.MaximumHeight; mainLayout.RowDefinitions[1].MinimumSize = 100; mainLayout.RowDefinitions[3].MinimumSize = 120; mainLayout.RowDefinitions[5].MinimumSize = 90; mainLayout.Children.Add(topBar); mainLayout.Children.Add(nameLabel); mainLayout.Children.Add(characterImage); mainLayout.Children.Add(explanationLabel); mainLayout.Children.Add(shipStatusPanel); mainLayout.Children.Add(quitButton); return(mainLayout); }
protected override void LoadScene() { // Allow user to resize the window with the mouse. Game.Window.AllowUserResizing = true; // Create and initialize "Stride Samples" Text var strideSampleTextBlock = new ContentDecorator { BackgroundImage = SpriteFromSheet.Create(SplashScreenImages, "stride_sample_text_bg"), Content = new TextBlock { Font = WesternFont, TextSize = 60, Text = "Stride UI Particles", TextColor = Color.White, }, Padding = new Thickness(35, 15, 35, 25), HorizontalAlignment = HorizontalAlignment.Center }; strideSampleTextBlock.SetPanelZIndex(1); //********************************* // Confetti button var buttonImage = SpriteFromSheet.Create(SplashScreenImages, "button_long"); var strideButtonConfetti = new Button { NotPressedImage = buttonImage, PressedImage = buttonImage, MouseOverImage = buttonImage, Content = new TextBlock { Font = WesternFont, TextColor = Color.White, Text = "Click here to start the game over", TextSize = 24 }, HorizontalAlignment = HorizontalAlignment.Right, Padding = new Thickness(90, 22, 25, 35), // BackgroundColor = Color.DarkOrchid }; strideButtonConfetti.SetPanelZIndex(1); strideButtonConfetti.SetGridRow(1); strideButtonConfetti.Click += delegate { fusePercentage = 1f; desiredState = GameState.NewGame; var effectOffset = new Vector3(45 - strideButtonConfetti.RenderSize.X / 2, -5, 0); SpawnParticles(strideButtonConfetti.WorldMatrix.TranslationVector + effectOffset, Prefab, 2f); }; //********************************* //********************************* // Stars button var buttonStars = SpriteFromSheet.Create(SplashScreenImages, "button_short"); var strideButtonStars = new Button { NotPressedImage = buttonStars, PressedImage = buttonStars, MouseOverImage = buttonStars, Content = new TextBlock { Font = WesternFont, TextColor = Color.White, Text = "Congratulations", TextSize = 24 }, HorizontalAlignment = HorizontalAlignment.Right, Padding = new Thickness(90, 22, 25, 35), // BackgroundColor = Color.DarkOrchid }; strideButtonStars.SetPanelZIndex(1); strideButtonStars.SetGridRow(4); strideButtonStars.Click += delegate { desiredState = GameState.EndGame; var effectOffset = new Vector3(45 - strideButtonStars.RenderSize.X / 2, -5, 0); SpawnParticles(strideButtonStars.WorldMatrix.TranslationVector + effectOffset, Prefab, 2f); }; //********************************* var bottomBar = CreateBottomBar(); bottomBar.SetPanelZIndex(1); bottomBar.SetGridRow(6); var grid = new Grid { MaximumWidth = virtualWidth, MaximumHeight = virtualHeight, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, }; grid.RowDefinitions.Add(new StripDefinition(StripType.Auto)); // 0 grid.RowDefinitions.Add(new StripDefinition(StripType.Auto)); // 1 grid.RowDefinitions.Add(new StripDefinition(StripType.Auto)); // 2 grid.RowDefinitions.Add(new StripDefinition(StripType.Auto)); // 3 grid.RowDefinitions.Add(new StripDefinition(StripType.Auto)); // 4 grid.RowDefinitions.Add(new StripDefinition(StripType.Fixed, 100)); // 5 grid.RowDefinitions.Add(new StripDefinition(StripType.Fixed, 50)); // 5 grid.ColumnDefinitions.Add(new StripDefinition()); grid.LayerDefinitions.Add(new StripDefinition()); grid.Children.Add(strideSampleTextBlock); grid.Children.Add(strideButtonConfetti); grid.Children.Add(strideButtonStars); grid.Children.Add(bottomBar); // Add the background var background = new ImageElement { Source = SpriteFromSheet.Create(SplashScreenImages, "background_uiimage"), StretchType = StretchType.Fill }; background.SetPanelZIndex(-1); Entity.Get <UIComponent>().Page = new UIPage { RootElement = new UniformGrid { Children = { background, grid } } }; }
protected override async Task LoadContent() { await base.LoadContent(); sprites = Content.Load <SpriteSheet>("UIImages"); // Also draw a texture during the clear renderer // TODO: Use a custom compositor as soon as we have visual scripting? var topChildRenderer = ((SceneCameraRenderer)SceneSystem.GraphicsCompositor.Game).Child; var forwardRenderer = (topChildRenderer as SceneRendererCollection)?.Children.OfType <ForwardRenderer>().FirstOrDefault() ?? (ForwardRenderer)topChildRenderer; forwardRenderer.Clear = new ClearAndDrawTextureRenderer { Color = forwardRenderer.Clear.Color, Texture = sprites["GameScreen"].Texture }; var lifeBar = new ImageElement { Source = SpriteFromSheet.Create(sprites, "Logo"), HorizontalAlignment = HorizontalAlignment.Center }; lifeBar.DependencyProperties.Set(GridBase.ColumnSpanPropertyKey, 3); var quitText = new TextBlock { Text = "Quit Game", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }; ApplyTextBlockDefaultStyle(quitText); var quitGameButton = new Button { Content = quitText, VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Left, Padding = Thickness.UniformRectangle(10), }; ApplyButtonDefaultStyle(quitGameButton); quitGameButton.DependencyProperties.Set(GridBase.ColumnPropertyKey, 0); quitGameButton.DependencyProperties.Set(GridBase.RowPropertyKey, 2); quitGameButton.Click += (sender, args) => Exit(); modalButton1Text = new TextBlock { Text = "Close Modal window 1", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }; ApplyTextBlockDefaultStyle(modalButton1Text); var modalButton1 = new Button { Name = "Button Modal 1", Content = modalButton1Text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Padding = Thickness.UniformRectangle(10), }; ApplyButtonDefaultStyle(modalButton1); modalButton1.Click += ModalButton1OnClick; modal1 = new ModalElement { Content = modalButton1, Name = "Modal 1" }; modal1.DependencyProperties.Set(Panel.ZIndexPropertyKey, 1); modal1.DependencyProperties.Set(GridBase.ColumnPropertyKey, 1); modal1.DependencyProperties.Set(GridBase.RowPropertyKey, 1); modal1.OutsideClick += Modal1OnOutsideClick; modalButton2Text = new TextBlock { Text = "Close Modal window 2", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }; ApplyTextBlockDefaultStyle(modalButton2Text); var modalButton2 = new Button { Name = "Button Modal 2", Content = modalButton2Text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Padding = Thickness.UniformRectangle(10), }; ApplyButtonDefaultStyle(modalButton2); modalButton2.Click += ModalButton2OnClick; modal2 = new ModalElement { Content = modalButton2, Name = "Modal 2" }; modal2.DependencyProperties.Set(Panel.ZIndexPropertyKey, 2); modal2.DependencyProperties.Set(GridBase.ColumnPropertyKey, 1); modal2.DependencyProperties.Set(GridBase.RowPropertyKey, 2); modal2.OutsideClick += Modal2OnOutsideClick; uniformGrid = new UniformGrid { Columns = 3, Rows = 3 }; uniformGrid.Children.Add(modal1); uniformGrid.Children.Add(modal2); uniformGrid.Children.Add(lifeBar); uniformGrid.Children.Add(quitGameButton); UIComponent.Page = new Engine.UIPage { RootElement = uniformGrid }; }
private UIElement CreateMainSceneShipStatusPanel() { // Status star bars {Power, Life, Speed} var powerStatusDecorator = CreateMainSceneShipStatusStars("power", powerStatusStar, 0); var controlStatusDecorator = CreateMainSceneShipStatusStars("control", controlStatusStar, 1); var speedStatusDecorator = CreateMainSceneShipStatusStars("speed", speedStatusStar, 2); PowerStatus = shipList[activeShipIndex].Power; ControlStatus = shipList[activeShipIndex].Control; SpeedStatus = shipList[activeShipIndex].Speed; // Put the stats (Stars) in 3x1 uniform grid var statusPanel = new UniformGrid { Rows = 3 }; statusPanel.Children.Add(powerStatusDecorator); statusPanel.Children.Add(controlStatusDecorator); statusPanel.Children.Add(speedStatusDecorator); statusPanel.SetGridColumn(1); // SpaceShip Button currentShipImage = new ImageElement { Source = SpriteFromSheet.Create(MainSceneImages, shipList[activeShipIndex].Name) }; currentShipImage.SetGridRow(1); var shipImageSpacerGrid = new Grid { HorizontalAlignment = HorizontalAlignment.Center }; shipImageSpacerGrid.Children.Add(currentShipImage); shipImageSpacerGrid.RowDefinitions.Add(new StripDefinition(StripType.Star, 2)); shipImageSpacerGrid.RowDefinitions.Add(new StripDefinition(StripType.Star, 6)); shipImageSpacerGrid.RowDefinitions.Add(new StripDefinition(StripType.Star, 2)); shipImageSpacerGrid.ColumnDefinitions.Add(new StripDefinition()); shipImageSpacerGrid.LayerDefinitions.Add(new StripDefinition()); var shipButtonDesign = SpriteFromSheet.Create(MainSceneImages, "display_element"); var currentShipButton = new Button { NotPressedImage = shipButtonDesign, PressedImage = shipButtonDesign, MouseOverImage = shipButtonDesign, Content = shipImageSpacerGrid, Padding = new Thickness(45, 20, 10, 25), VerticalAlignment = VerticalAlignment.Center }; currentShipButton.Click += delegate { // Once click, update the SpaceShip status pop-up and show it. UpdateShipStatus(); ShowShipSelectionPopup(); }; currentShipButton.SetGridColumn(3); // Status upgrade buttons var powerUpgradeButton = CreateIncreaseStatusButton("P", 0, 0, 2, 0, () => PowerStatus, () => PowerStatus++); var controlUpgradeButton = CreateIncreaseStatusButton("C", 0, 1, 2, 0, () => ControlStatus, () => ControlStatus++); var speedUpgradeButton = CreateIncreaseStatusButton("S", 1, 0, 2, 0, () => SpeedStatus, () => SpeedStatus++); var lifeUpgradeButton = CreateIncreaseStatusButton("L", 1, 1, 1, 1, () => 0, () => LifeStatus++); // Arrange the status up buttons in a 2x2 Uniform grid. var statusUpgradeGridPanel = new UniformGrid { Rows = 2, Columns = 2, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center }; statusUpgradeGridPanel.Children.Add(powerUpgradeButton); statusUpgradeGridPanel.Children.Add(controlUpgradeButton); statusUpgradeGridPanel.Children.Add(speedUpgradeButton); statusUpgradeGridPanel.Children.Add(lifeUpgradeButton); statusUpgradeGridPanel.SetGridColumn(5); // Put together bottom region in horizontal Stack panel, arranging it from left to right var mainPanel = new Grid(); mainPanel.RowDefinitions.Add(new StripDefinition()); mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 10)); // space mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Star, 4)); mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 25)); // space mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Star, 4)); mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 25)); // space mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Star, 3)); mainPanel.ColumnDefinitions.Add(new StripDefinition(StripType.Fixed, 10)); // space mainPanel.LayerDefinitions.Add(new StripDefinition()); mainPanel.Children.Add(statusPanel); mainPanel.Children.Add(currentShipButton); mainPanel.Children.Add(statusUpgradeGridPanel); return(mainPanel); }
protected override async Task LoadContent() { await base.LoadContent(); sprites = Content.Load <SpriteSheet>("UIImages"); var lifeBar = new ImageElement { Source = SpriteFromSheet.Create(sprites, "Logo"), HorizontalAlignment = HorizontalAlignment.Center }; lifeBar.DependencyProperties.Set(GridBase.ColumnSpanPropertyKey, 3); var quitGameButton = new Button { Content = new TextBlock { Text = "Quit Game", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }, VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Left, Padding = Thickness.UniformRectangle(10), }; quitGameButton.DependencyProperties.Set(GridBase.ColumnPropertyKey, 0); quitGameButton.DependencyProperties.Set(GridBase.RowPropertyKey, 2); quitGameButton.Click += (sender, args) => Exit(); modalButton1Text = new TextBlock { Text = "Close Modal window 1", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }; var modalButton1 = new Button { Name = "Button Modal 1", Content = modalButton1Text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Padding = Thickness.UniformRectangle(10), }; modalButton1.Click += ModalButton1OnClick; modal1 = new ModalElement { Content = modalButton1, Name = "Modal 1" }; modal1.DependencyProperties.Set(Panel.ZIndexPropertyKey, 1); modal1.DependencyProperties.Set(GridBase.ColumnPropertyKey, 1); modal1.DependencyProperties.Set(GridBase.RowPropertyKey, 1); modal1.OutsideClick += Modal1OnOutsideClick; modalButton2Text = new TextBlock { Text = "Close Modal window 2", Font = Content.Load <SpriteFont>("MicrosoftSansSerif15") }; var modalButton2 = new Button { Name = "Button Modal 2", Content = modalButton2Text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, Padding = Thickness.UniformRectangle(10), }; modalButton2.Click += ModalButton2OnClick; modal2 = new ModalElement { Content = modalButton2, Name = "Modal 2" }; modal2.DependencyProperties.Set(Panel.ZIndexPropertyKey, 2); modal2.DependencyProperties.Set(GridBase.ColumnPropertyKey, 1); modal2.DependencyProperties.Set(GridBase.RowPropertyKey, 2); modal2.OutsideClick += Modal2OnOutsideClick; uniformGrid = new UniformGrid { Columns = 3, Rows = 3 }; uniformGrid.Children.Add(modal1); uniformGrid.Children.Add(modal2); uniformGrid.Children.Add(lifeBar); uniformGrid.Children.Add(quitGameButton); UIComponent.RootElement = uniformGrid; }
public override async Task Execute() { spriteSheet = SpriteSheet; agentSpriteComponent = Entity.Get <SpriteComponent>(); // Calculate offset of the bullet from the Agent if he is facing left and right side // TODO improve this var bulletOffset = new Vector3(1f, 0.2f, 0f); // Initialize game entities if (!IsLiveReloading) { shootDelayCounter = 0f; isAgentFacingRight = true; currentAgentAnimation = AgentAnimation.Idle; } CurrentAgentAnimation = currentAgentAnimation; while (Game.IsRunning) { await Script.NextFrame(); var inputState = GetKeyboardInputState(); if (inputState == InputState.None) { inputState = GetPointerInputState(); } // Reset the shoot delay, if state changes if (inputState != InputState.Shoot && CurrentAgentAnimation == AgentAnimation.Shoot) { shootDelayCounter = 0; } if (inputState == InputState.RunLeft || inputState == InputState.RunRight) { // Update Agent's position var dt = (float)Game.UpdateTime.Elapsed.TotalSeconds; Entity.Transform.Position.X += ((inputState == InputState.RunRight) ? AgentMoveDistance : -AgentMoveDistance) * dt; if (Entity.Transform.Position.X < -gameWidthHalfX) { Entity.Transform.Position.X = -gameWidthHalfX; } if (Entity.Transform.Position.X > gameWidthHalfX) { Entity.Transform.Position.X = gameWidthHalfX; } isAgentFacingRight = inputState == InputState.RunRight; // If agent face left, flip the sprite Entity.Transform.Scale.X = isAgentFacingRight ? 1f : -1f; // Update the sprite animation and state CurrentAgentAnimation = AgentAnimation.Run; } else if (inputState == InputState.Shoot) { // Update shootDelayCounter, and check whether it is time to create a new bullet shootDelayCounter -= (float)Game.UpdateTime.Elapsed.TotalSeconds; if (shootDelayCounter > 0) { continue; } // Reset shoot delay shootDelayCounter = AgentShootDelay; // Spawns a new bullet var bullet = new Entity { new SpriteComponent { SpriteProvider = SpriteFromSheet.Create(spriteSheet, "bullet") }, // Will make the beam move along a direction at each frame new BeamScript { DirectionX = isAgentFacingRight ? 1f : -1f, SpriteSheet = SpriteSheet }, }; bullet.Transform.Position = (isAgentFacingRight) ? Entity.Transform.Position + bulletOffset : Entity.Transform.Position + (bulletOffset * new Vector3(-1, 1, 1)); SceneSystem.SceneInstance.Scene.Entities.Add(bullet); Logic.WatchBullet(bullet); // Start animation for shooting CurrentAgentAnimation = AgentAnimation.Shoot; } else { CurrentAgentAnimation = AgentAnimation.Idle; } } }