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); }
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)); }
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)); } } }