public void Update(GameTime gameTime, Entities entities, float factor)
        {
            float y = MathHelper.Max(50, entities.Player.Body.Torso.Position.Y.ToPixels() - 100f);
            Camera.Viewport.Center =
                new Vector2(
                    entities.Player.Body.Torso.Position.X.ToPixels() - (2f*factor - 1)*.4f*Camera.Viewport.Dimensions.X,
                    y);

            Camera.Viewport.Pivot = new Vector2(factor, .5f);

            Vector2 mousePosition = Camera.PositionOnWorld(Input.Mouse.Position);
            float rotationFactor = (Camera.Viewport.Center.X - mousePosition.X.ToPixels())/
                                   (2*Camera.Viewport.Dimensions.X);
            Camera.Viewport.Rotation = -rotationFactor*(MathHelper.PiOver4*.25f);

            float scaleFactor = 1 - Input.Mouse.Position.Y/(Camera.Viewport.Dimensions.Y*.5f);
            Camera.Viewport.Scale = new Vector2(1 + scaleFactor*4e-2f);
        }
Ejemplo n.º 2
0
        public Play(Game game)
            : base(game)
        {
            Cursor = new Cursor();
            Debug = new Debug(game, World, this);
            Entities = new Entities(World, this);
            Terrain = new Terrain(game.GraphicsDevice, World);
            CameraOperator = new CameraOperator(game.GraphicsDevice.Viewport.Bounds);
            HUD = new HUD();
            Background =
                new Background(new Vector2(game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height));

            Wait.Until(time => Tweening.Tween(
                start: 0f,
                end: 1f,
                progress: time.Alive/2f,
                step: value => Factor = value,
                scale: TweenScales.Quadratic));
        }
Ejemplo n.º 3
0
        public void Update(GameTime gameTime, CameraOperator cameraOperator, Entities entities, World world)
        {
            foreach (Coin coin in _coins)
            {
                coin.Update(gameTime);
            }

            _seconds += gameTime.ElapsedGameTime.Milliseconds*1e-3f;
            if (_seconds > 1f)
            {
                --_seconds;

                RotatableRectangleF cameraViewport = cameraOperator.Camera.Viewport;
                if (_coins.Count == _coins.Capacity)
                    Remove(_coins[0], world);

                //select a way to launch
                if (InfiniteIsland.Random.Next(2) == 0)
                {
                    //Launch from the left
                    _coins.Add(
                        new Coin(
                            position:
                                (cameraViewport.TopLeft +
                                 new Vector2(0,
                                     (float) InfiniteIsland.Random.NextDouble()*
                                     cameraViewport.Dimensions.Y*.75f)).ToMeters(),
                            linearVelocity:
                                entities.Player.Body.Wheel.LinearVelocity*
                                new Vector2(1.5f + (float) InfiniteIsland.Random.NextDouble()/2.5f,
                                    -2*(float) InfiniteIsland.Random.NextDouble()), world: world));
                }
                else
                {
                    //Launch from the right
                    _coins.Add(
                        new Coin(
                            position:
                                (cameraViewport.TopRight +
                                new Vector2(0, (float) InfiniteIsland.Random.NextDouble()*cameraViewport.Dimensions.Y*.75f)).ToMeters(),
                            linearVelocity:
                                entities.Player.Body.Wheel.LinearVelocity*
                                (new Vector2(
                                    x: 1.5f + (float) InfiniteIsland.Random.NextDouble()/2.5f,
                                    y:-2*(float) InfiniteIsland.Random.NextDouble()) - Vector2.UnitX),
                            world: world));
                }
            }
        }