protected override async Task LoadContent() { await base.LoadContent(); Sprites = Asset.Load<SpriteSheet>("UIImages"); var lifeBar = new ImageElement { Source = Sprites["Logo"], HorizontalAlignment = HorizontalAlignment.Center }; lifeBar.DependencyProperties.Set(GridBase.ColumnSpanPropertyKey, 3); var quitGameButton = new Button { Content = new TextBlock { Text = "Quit Game", Font = Asset.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 = Asset.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 = Asset.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 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 nullList = new SpriteSheet { Sprites = null }; var fromnullListSheet = new SpriteFromSheet { Sheet = nullList }; Assert.AreEqual(0, fromnullListSheet.SpritesCount); Assert.IsNull(fromnullListSheet.GetSprite(0)); var emptyList = new SpriteSheet { Sprites = new List<Sprite>() }; var fromEmptyListSheet = new SpriteFromSheet { Sheet = emptyList }; Assert.AreEqual(0, fromEmptyListSheet.SpritesCount); Assert.IsNull(fromEmptyListSheet.GetSprite(0)); var validSheet = new SpriteSheet() { Sprites = new List<Sprite> { 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); } }
public override void Start() { var virtualResolution = new Vector3(GraphicsDevice.BackBuffer.Width, GraphicsDevice.BackBuffer.Height, 20f); // Create Parallax Background pal0SpriteSheet = Asset.Load<SpriteSheet>("pal0_sprite"); pal1SpriteSheet = Asset.Load<SpriteSheet>("pal1_sprite"); pal2SpriteSheet = Asset.Load<SpriteSheet>("pal2_sprite"); backgroundParallax.Add(new BackgroundSection(pal0SpriteSheet.Sprites[0], virtualResolution, GameScript.GameSpeed / 4f, Pal0Depth)); backgroundParallax.Add(new BackgroundSection(pal1SpriteSheet.Sprites[0], virtualResolution, GameScript.GameSpeed / 3f, Pal1Depth)); backgroundParallax.Add(new BackgroundSection(pal2SpriteSheet.Sprites[0], virtualResolution, GameScript.GameSpeed / 1.5f, Pal2Depth)); // For pal3Sprite: Ground, move it downward so that its bottom edge is at the bottom screen. var screenHeight = virtualResolution.Y; pal3SpriteSheet = Asset.Load<SpriteSheet>("pal3_sprite"); var pal3Height = pal3SpriteSheet.Sprites[0].Region.Height; backgroundParallax.Add(new BackgroundSection(pal3SpriteSheet.Sprites[0], virtualResolution, GameScript.GameSpeed, Pal3Depth, Vector2.UnitY * (screenHeight - pal3Height) / 2)); // allocate the sprite batch in charge of drawing the backgrounds. spriteBatch = new SpriteBatch(GraphicsDevice) { VirtualResolution = virtualResolution }; // register the renderer in the pipeline var scene = SceneSystem.SceneInstance.Scene; var compositor = ((SceneGraphicsCompositorLayers)scene.Settings.GraphicsCompositor); compositor.Master.Renderers.Insert(1, delegateRenderer = new SceneDelegateRenderer(DrawParallax)); }
public RectangleF GetBoundingBox() { if (beamNormalSprite == null) beamNormalSprite = Asset.Load<SpriteSheet>("bullet"); var result = beamNormalSprite.Sprites.First().Region; result.Width *= LogicScript.ScreenScale; result.Height *= LogicScript.ScreenScale; return result; }
private Entity CreateSpriteEntity(SpriteSheet sheet, string frameName) { return new Entity(frameName) { new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = sheet }, CurrentFrame = sheet.FindImageIndex(frameName) } }; }
/// <summary> /// Load resource and construct ui components /// </summary> public override void Start() { // Load resources shared by different UI screens spriteFont = Asset.Load<SpriteFont>("Font"); uiImages = Asset.Load<SpriteSheet>("UIImages"); buttonImage = uiImages["button"]; // Load and create specific UI screens. CreateMainMenuUI(); CreateGameUI(); CreateGameOverUI(); }
public override void Start() { enemyNormalSprite = Asset.Load<SpriteSheet>("enemy_active"); enemyExplosionSprite = Asset.Load<SpriteSheet>("enemy_blowup"); // Register ourself to the logic to detect collision Logic.WatchEnemy(Entity); enemySpriteComponent = Entity.Get<SpriteComponent>(); Reset(); }
protected override async Task LoadContent() { await base.LoadContent(); sliderImages = Asset.Load<SpriteSheet>("DebugSlider"); slider = new Slider { TrackStartingOffsets = new Vector2(10, 6), TickOffset = 10 }; SetSliderImages(isRotatedImages); grid = new UniformGrid { Children = { slider } }; UIComponent.RootElement = grid; }
public override void Start() { playerController = Entity.Get<PhysicsComponent>().Elements[0].Character; //Please remember that in the GameStudio element the parameter Step Height is extremely important, it not set properly it will cause the entity to snap fast to the ground playerController.JumpSpeed = 5.0f; playerController.Gravity = -10.0f; playerController.FallSpeed = 10.0f; playerController.FirstContactStart += playerController_OnFirstContactBegin; idleGroup = Asset.Load<SpriteSheet>("player_idle"); runGroup = Asset.Load<SpriteSheet>("player_run"); playerSprite = Entity.Get<SpriteComponent>(); PlayIdle(); }
private Entity CreateSpriteEntity(SpriteSheet sheet, string frameName, bool addToScene = true) { var entity = new Entity(frameName) { new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = sheet }, CurrentFrame = sheet.FindImageIndex(frameName) } }; if (addToScene) entities.Add(entity); return entity; }
protected override async Task LoadContent() { await base.LoadContent(); // sets the virtual resolution areaSize = new Vector2(GraphicsDevice.BackBuffer.Width, GraphicsDevice.BackBuffer.Height); // Creates the camera CameraComponent.UseCustomProjectionMatrix = true; CameraComponent.ProjectionMatrix = Matrix.OrthoRH(areaSize.X, areaSize.Y, -2, 2); // Load assets groundSprites = Asset.Load<SpriteSheet>("GroundSprite"); ballSprite1 = Asset.Load<SpriteSheet>("BallSprite1"); ballSprite2 = Asset.Load<SpriteSheet>("BallSprite2"); ball = new Entity { new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = Asset.Load<SpriteSheet>("BallSprite1") } } }; // create fore/background entities foreground = new Entity(); background = new Entity(); foreground.Add(new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = groundSprites }, CurrentFrame = 1 }); background.Add(new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = groundSprites }, CurrentFrame = 0 }); Scene.AddChild(ball); Scene.AddChild(foreground); Scene.AddChild(background); spriteComponent = ball.Get(SpriteComponent.Key); transfoComponent = ball.Get(TransformComponent.Key); var decorationScalings = new Vector3(areaSize.X, areaSize.Y, 1); background.Get(TransformComponent.Key).Scale = decorationScalings; foreground.Get(TransformComponent.Key).Scale = decorationScalings/2; background.Get(TransformComponent.Key).Position = new Vector3(0, 0, -1); foreground.Get(TransformComponent.Key).Position = new Vector3(0, 0, 1); SpriteAnimation.Play(spriteComponent, 0, spriteComponent.SpriteProvider.SpritesCount-1, AnimationRepeatMode.LoopInfinite, 30); }
protected override void LoadScene() { mainScreneImages = LoadAsset<SpriteSheet>("MainSceneImages"); westernFont = LoadAsset<SpriteFont>("WesternFont"); popupWindowImage = mainScreneImages["popup_window"]; // Preload stars starSprites.Add(mainScreneImages["star0"]); starSprites.Add(mainScreneImages["star1"]); starSprites.Add(mainScreneImages["star2"]); starSprites.Add(mainScreneImages["star3"]); borderStarImages.Add(mainScreneImages["bstar0"]); borderStarImages.Add(mainScreneImages["bstar1"]); borderStarImages.Add(mainScreneImages["bstar2"]); borderStarImages.Add(mainScreneImages["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 = mainScreneImages["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 static SpriteComponent CreateSpriteComponent(int nbOfFrames) { var spriteGroup = new SpriteSheet { Sprites = new List<Sprite>() }; var sprite = new SpriteComponent { SpriteProvider = new SpriteFromSheet { Sheet = spriteGroup } }; // add a few sprites for (int i = 0; i < nbOfFrames; i++) { spriteGroup.Sprites.Add(new Sprite(Guid.NewGuid().ToString())); } return sprite; }
private void SetSpriteImage(SpriteSheet sprite) { spriteComponent.SpriteProvider = new SpriteFromSheet { Sheet = sprite }; }
public override async Task Execute() { agentIdle = Asset.Load<SpriteSheet>("character_idle"); agentRun = Asset.Load<SpriteSheet>("character_run"); agentShoot = Asset.Load<SpriteSheet>("character_shoot"); agentSpriteRegion = agentIdle.Sprites.First().Region; var bulletSpriteSheet = Asset.Load<SpriteSheet>("bullet"); agentSpriteComponent = Entity.Get<SpriteComponent>(); // Calculate offset of the bullet from the Agent if he is facing left and right side // TODO fix this var bulletOffset = new Vector3(1f, 0.2f, 0f); //new Vector3(agentSpriteRegion.Width * 0.5f, -14f, 0); // Initialize game entities CurrentAgentAnimation = AgentAnimation.Idle; var isAgentFacingRight = true; var shootDelayCounter = 0f; 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 agentSpriteComponent.SpriteProvider = new SpriteFromSheet { Sheet = agentRun }; 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 = new SpriteFromSheet { Sheet = bulletSpriteSheet } }, // Will make the beam move along a direction at each frame new ScriptComponent { Scripts = { new BeamScript { DirectionX = isAgentFacingRight? 1f : -1f } } } }; bullet.Transform.Position = (isAgentFacingRight) ? Entity.Transform.Position + bulletOffset : Entity.Transform.Position + (bulletOffset * new Vector3(-1, 1, 1)); SceneSystem.SceneInstance.Scene.AddChild(bullet); Logic.WatchBullet(bullet); // Start animation for shooting agentSpriteComponent.SpriteProvider = new SpriteFromSheet { Sheet = agentShoot }; CurrentAgentAnimation = AgentAnimation.Shoot; } else { agentSpriteComponent.SpriteProvider = new SpriteFromSheet { Sheet = agentIdle }; CurrentAgentAnimation = AgentAnimation.Idle; } } }