public BattleGameMode(Entity battleWith, EventHandler clickEvent) : base(clickEvent) { var viewPort = StaticServiceLocator.GetService <BoxingViewportAdapter>(); Camera = new Camera2D(viewPort) { Zoom = 1.0f }; _content = ContentManagerFactory.RequestContentManager(); _backgroundTexture = _content.Load <Texture2D>($"TopDownRpg/hills"); var dialogFont = _content.Load <SpriteFont>("dialog"); var settings = StaticServiceLocator.GetService <IControllerSettings>(); DialogBox = new BattleStoryBoxDialog(ScreenSize.Size, dialogFont, settings.GamePadEnabled) { CompleteEvent = (sender, args) => Complete() }; GuiManager.AddGuiLayer(DialogBox); var rectangle = new Rectangle(new Point(), new Point(16, 16)); var enemyEntity = new BattleEntityRenderer(new Rectangle(new Point(600, 300), new Point(160, 160)), rectangle, battleWith, _content); var playerEntity = new BattleEntityRenderer(new Rectangle(new Point(50, 300), new Point(160, 160)), rectangle, PlayerEntity.Instance, _content); EntityList = new List <BattleEntityRenderer> { enemyEntity, playerEntity }; AddInteractionController(); var boundingRectangle = Camera.BoundingRectangle; var size = new Point((int)boundingRectangle.Size.Width, (int)boundingRectangle.Size.Height); _destinationRectangle = new Rectangle(boundingRectangle.Location.ToPoint(), size); }
public OpenWorldGameMode(ViewportAdapter viewPort, IPossibleMovements possibleMovements, string worldName, EntityManager entityManager, StoryEngine storyEngine, EventHandler clickEvent) : base(clickEvent) { _entityManager = entityManager; EntityRenderersDict = new Dictionary <Entity, AbstractEntityRenderer>(); _possibleMovements = possibleMovements; _content = ContentManagerFactory.RequestContentManager(); RenderList = new List <IRenderable>(); Map = _content.Load <TiledMap>($"TopDownRpg/{worldName}"); var graphics = StaticServiceLocator.GetService <GraphicsDevice>(); _mapRenderer = new FullMapRenderer(graphics); _mapRenderer.SwapMap(Map); _tileSize = new Vector2(Map.TileWidth, Map.TileHeight); _moverManager = new MoverManager(); var collisionSystem = new CompositeAbstractCollisionSystem(_possibleMovements); _expiringSpatialHash = new ExpiringSpatialHashCollisionSystem <Entity>(_possibleMovements); _spatialHashMover = new SpatialHashMoverManager <Entity>(collisionSystem, _expiringSpatialHash); AddPlayer(); var entityController = EntityControllerFactory.AddEntityController(PlayerEntity.Instance, _possibleMovements, _moverManager); var texture = _content.Load <Texture2D>("TopDownRpg/Path"); var endTexture = _content.Load <Texture2D>("TopDownRpg/BluePathEnd"); collisionSystem.AddCollisionSystem(new TiledCollisionSystem(_possibleMovements, Map, "Collision-Layer")); collisionSystem.AddCollisionSystem(_expiringSpatialHash); CollisionSystem = collisionSystem; AddClickController(PlayerEntity.Instance); PathRenderer = new PathRenderer(_moverManager, PlayerEntity.Instance, texture, endTexture, _tileSize.ToPoint(), Map.Width, Map.Height); UpdateList.Add(_expiringSpatialHash); UpdateList.Add(entityController); UpdateList.Add(_spatialHashMover); UpdateList.Add(_moverManager); CameraTracker = CameraTrackerFactory.CreateTracker(viewPort, EntityRenderersDict[PlayerEntity.Instance], Map); UpdateList.Add(CameraTracker); LoadEntities(); var dialogFont = _content.Load <SpriteFont>("dialog"); var settings = StaticServiceLocator.GetService <IControllerSettings>(); DialogBox = new EntityStoryBoxDialog(ScreenSize.Size, dialogFont, settings.GamePadEnabled); GuiManager.AddGuiLayer(DialogBox); storyEngine.LoadWorld(AddEntity, RemoveEntity, CollisionSystem.CheckMovementCollision, worldName); InteractEvent += (sender, args) => { var facingDirection = PlayerEntity.Instance.FacingDirection; var interactTarget = (PlayerEntity.Instance.Position + facingDirection).ToPoint(); Interact(interactTarget); }; AddInteractionController(); CameraController.AddCameraZoomController(CameraTracker, ClickController); CameraController.AddCameraMovementController(CameraTracker, ClickController); }
protected AbstractRpgGameMode(EventHandler clickEvent) { _backButtonClickEvent = clickEvent; GuiManager = new GuiManager(); var backButton = new BackButtonGuiLayer { ClickEvent = clickEvent }; GuiManager.AddGuiLayer(backButton); UpdateList = new List <IUpdate> { GuiManager }; ClickController = new ClickController { MouseControl = { OnPressedEvent = (state, mouseState) => { if (!GuiManager.Interact(mouseState.Position)) { ClickEvent?.Invoke(mouseState.Position); } } } }; var moveGesture = new SmartGesture(GestureType.Tap) { GestureEvent = gesture => { var position = gesture.Position.ToPoint(); if (!GuiManager.Interact(position)) { ClickEvent?.Invoke(position); } } }; ClickController.TouchScreenControl.AddSmartGesture(moveGesture); UpdateList.Add(ClickController); }