Пример #1
0
        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;
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
 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;
 }
Пример #5
0
 private Entity CreateSpriteEntity(SpriteSheet sheet, string frameName)
 {
     return new Entity(frameName)
     {
         new SpriteComponent
         {
             SpriteProvider = new SpriteFromSheet { Sheet = sheet },
             CurrentFrame = sheet.FindImageIndex(frameName)
         }
     };
 }
Пример #6
0
        /// <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();
        }
Пример #7
0
        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();
        }
Пример #8
0
        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;
        }
Пример #9
0
        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();
        }
Пример #10
0
        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;
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }
Пример #13
0
        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;
        }
Пример #14
0
 private void SetSpriteImage(SpriteSheet sprite)
 {
     spriteComponent.SpriteProvider = new SpriteFromSheet { Sheet = sprite };
 }
Пример #15
0
        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;
                }
            }
        }