protected bool TouchesObject(VehicleRowModel row, Rectangle playerArea, out Rectangle rect)
        {
            foreach (var vehicle in row.Vehicles)
            {
                var rRect = new Rectangle(new Point((int)vehicle.Positon.X + (int)row.OffsetRight.X, (int)vehicle.Positon.Y), new Point(16, 16));

                if (rRect.Intersects(playerArea))
                {
                    var union = Rectangle.Union(rRect, playerArea);
                    if (union.Width < 30)
                    {
                        rect = rRect;
                        return(true);
                    }
                }

                if (row.Ghost == VehicleGhost.Ghost)
                {
                    var xl         = vehicle.Positon + row.OffsetLeft;
                    var posLeft    = new Point((int)xl.X, (int)xl.Y);
                    var rRectGhost = new Rectangle(new Point((int)posLeft.X, (int)vehicle.Positon.Y), new Point(16, 16));
                    if (rRectGhost.Intersects(playerArea))
                    {
                        rect = rRectGhost;
                        var union = Rectangle.Union(rRectGhost, playerArea);
                        if (union.Width < 30)
                        {
                            OnCollision(rRectGhost);
                            return(true);
                        }
                    }
                }
            }

            rect = Rectangle.Empty;
            return(false);
        }
예제 #2
0
        public override void Enter(params object[] args)
        {
            _screen      = new RenderTarget2D(StateMachine.Game.GraphicsDevice, 224, 256);
            _spriteBatch = new SpriteBatch(StateMachine.Game.GraphicsDevice);

            var resetForNewGame = true;

            if (args.Length > 0 && args[0] is bool)
            {
                resetForNewGame = (bool)args[0];
            }

            if (resetForNewGame)
            {
                _playerModel = new PlayerModel();
            }
            else
            {
                _playerModel.ResetAfterLevel();
            }

            var goals = new GoalContainerModel();

            _views.Add(new BackgroundView(StateMachine.Game.Content, _spriteBatch));
            _views.Add(new ScoreView(StateMachine.Game.Content, _spriteBatch, _playerModel));

            _views.Add(new FrogPositionView(StateMachine.Game.Content, _spriteBatch, _playerModel));
            _views.Add(new GoalView(StateMachine.Game.Content, _spriteBatch, goals));

            var playerController = new PlayerController(_playerModel);

            _controllers.Add(playerController);
            _controllers.Add(new GoalController(_playerModel, goals, playerController));
            _controllers.Add(new HomeAnimationController(goals));

            var bulldozerRowModel = new VehicleRowModel(BulldozerFactory.CreateFirstStage(), 32);
            var racingCarRowModel = new VehicleRowModel(RacingCarFactory.CreateFirstStage(), 0, 128, VehicleGhost.NoGhost, VehicleDirection.LeftToRight, 2);
            var sedanCarRowModel  = new VehicleRowModel(GenericCarFactory.CreateFirstStage(), 0, 32, VehicleGhost.Ghost, VehicleDirection.RightToLeft);
            var duneBuggyRowModel = new VehicleRowModel(GenericCarFactory.CreateFirstStage(y: 208, frame: 9), 0, 32, VehicleGhost.Ghost, VehicleDirection.RightToLeft);
            var trucksRowModel    = new VehicleRowModel(TruckFactory.CreateFirstStage(), 0, 36, VehicleGhost.Ghost, VehicleDirection.RightToLeft);
            var models            = new[] { bulldozerRowModel, racingCarRowModel, sedanCarRowModel, duneBuggyRowModel, trucksRowModel };

            var vehicleView = new VehicleView(StateMachine.Game.Content, _spriteBatch, models);

            _views.Add(vehicleView);

            var vehicleController = new VehicleController(_playerModel, playerController, models);

            _controllers.Add(vehicleController);

            var riverRow1   = new RiverRowModel(LogFactory.CreateRow1FirstStage(), 0, 36, VehicleDirection.LeftToRight, new Rectangle(0, 48, 216, 16));
            var riverRow2   = new RiverRowModel(LogFactory.CreateRow2FirstStage(), 0, 36, VehicleDirection.RightToLeft, new Rectangle(0, 64, 216, 16));
            var riverRow3   = new RiverRowModel(LogFactory.CreateRow3FirstStage(), 64, 36, VehicleDirection.LeftToRight, new Rectangle(0, 80, 216, 16));
            var riverRow4   = new RiverRowModel(LogFactory.CreateRow4FirstStage(), 0, 36, VehicleDirection.RightToLeft, new Rectangle(0, 96, 216, 16));
            var riverRow5   = new RiverRowModel(LogFactory.CreateRow5FirstStage(), 32, 36, VehicleDirection.LeftToRight, new Rectangle(0, 112, 216, 16));
            var riverModels = new[] { riverRow1, riverRow2, riverRow3, riverRow4, riverRow5 };

            var riverView = new VehicleView(StateMachine.Game.Content, _spriteBatch, riverModels);

            _views.Add(riverView);
            var riverController = new RiverObjectController(_playerModel, playerController, riverModels);

            _controllers.Add(riverController);

            _views.Add(new PlayerView(StateMachine.Game.Content, _spriteBatch, _playerModel));
        }