public override void RemoveSprite(SosEngine.Sprite sprite)
        {
            Pickup pickup = (Pickup)sprite;

            if (IsRevealingItem(pickup.Block))
            {
                RevealHiddenItems();
            }
            base.RemoveSprite(sprite);
        }
Exemplo n.º 2
0
        public MenuScene(Game game)
            : base(game, "Level01")
        {
            /*
             * var assembly = System.Reflection.Assembly.GetExecutingAssembly();
             * using (System.IO.Stream stream = assembly.GetManifestResourceStream("Mario.Resources.mario.rec"))
             * {
             *  replay = new SosEngine.Replay(stream);
             * }
             */

            BackgroundColor = new Color(0, 0, 80);

            SosEngine.Sprite logo = new SosEngine.Sprite(game, "logo");
            // Set origin of logo to its center and center horizontally
            logo.Origin = new Vector2(logo.BoundingBox.Width / 2, logo.BoundingBox.Height / 2);
            logo.CenterHorizontally(40);

            gameComponents.Add(logo);
        }
Exemplo n.º 3
0
        public override void Update(GameTime gameTime)
        {
            Core.UpdateInput();

            lastKeyboardState    = currentKeyboardState;
            currentKeyboardState = Keyboard.GetState();

            if (mouseEnabled || SosEngine.Core.Debug)
            {
                currentMouseState = Mouse.GetState();
                mouseX            = (int)(Core.RenderWidth / (float)Game.GraphicsDevice.Viewport.Bounds.Width * currentMouseState.X);
                mouseY            = (int)(Core.RenderHeight / (float)Game.GraphicsDevice.Viewport.Bounds.Height * currentMouseState.Y);
                if (mouseEnabled)
                {
                    mouseCursor.Position = new Vector2(mouseX, mouseY);
                    mouseCursor.SetState(currentMouseState.LeftButton == ButtonState.Pressed);
                }

                leftMouseButtonClicked   = currentMouseState.LeftButton == ButtonState.Released && lastMouseState.LeftButton == ButtonState.Pressed;
                rightMouseButtonClicked  = currentMouseState.RightButton == ButtonState.Released && lastMouseState.RightButton == ButtonState.Pressed;
                middleMouseButtonClicked = currentMouseState.MiddleButton == ButtonState.Released && lastMouseState.MiddleButton == ButtonState.Pressed;

                leftMouseButtonJustPressed = currentMouseState.LeftButton == ButtonState.Pressed && lastMouseState.LeftButton == ButtonState.Released;
                dragging = currentMouseState.LeftButton == ButtonState.Pressed && lastMouseState.LeftButton == ButtonState.Pressed;

                mouseDelta = new Vector2(mouseX, mouseY) - new Vector2(lastMouseX, lastMouseY);

                lastMouseX     = mouseX;
                lastMouseY     = mouseY;
                lastMouseState = currentMouseState;
            }

            // Update tasks
            bool anyUpdatedTask = false;

            for (int i = 0; i < tasks.Count; i++)
            {
                if (!tasks[i].IsFinished)
                {
                    tasks[i].Update(gameTime);
                    anyUpdatedTask = true;
                }
            }

            // Remove finished tasks
            if (anyUpdatedTask)
            {
                tasks.RemoveAll(task => task.IsFinished);
            }

            // Update game components
            foreach (GameComponent component in gameComponents)
            {
                component.Update(gameTime);
            }

            // Remove game components
            foreach (GameComponent component in gameComponentsToRemove)
            {
                gameComponents.Remove(component);
            }
            gameComponentsToRemove.Clear();

            if (SosEngine.Core.Debug)
            {
                highlighedSprites.Clear();
                foreach (GameComponent component in gameComponents)
                {
                    if (component is SosEngine.Sprite)
                    {
                        if (((SosEngine.Sprite)component).BoundingBoxWithOffset.Contains(mouseX, mouseY))
                        {
                            highlighedSprites.Add((SosEngine.Sprite)component);
                        }
                    }
                }
                if (leftMouseButtonJustPressed && highlighedSprites.Count > 0)
                {
                    draggedObject = highlighedSprites[0];
                }
                else if (dragging && draggedObject != null)
                {
                    draggedObject.Position += mouseDelta;
                    if (currentKeyboardState.IsKeyDown(Keys.LeftControl))
                    {
                        int snappedX = (int)Math.Round(draggedObject.Position.X) / 8 * 8;
                        int snappedY = (int)Math.Round(draggedObject.Position.Y) / 8 * 8;
                        draggedObject.Position = new Vector2(snappedX, snappedY);
                    }
                    SosEngine.Core.Log(string.Format("Position of object is X: {0} Y: {1}", draggedObject.Position.X, draggedObject.Position.Y));
                }
                else
                {
                    draggedObject = null;
                }
            }

            base.Update(gameTime);
        }