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