public static void AddCameraZoomController(AbstractCameraTracker camera, ClickController clickController) { if (TouchScreenEnabled) { var pinchGesture = new SmartGesture(GestureType.Pinch) { GestureEvent = gesture => { var dist = Vector2.Distance(gesture.Position, gesture.Position2); var aOld = gesture.Position - gesture.Delta; var bOld = gesture.Position2 - gesture.Delta2; var distOld = Vector2.Distance(aOld, bOld); var scale = (distOld - dist) / 500f; camera.Zoom(scale); } }; clickController.TouchScreenControl.AddSmartGesture(pinchGesture); } if (KeyboardMouseEnabled) { clickController.MouseControl.OnScrollEvent += zoomBy => { camera.Zoom((float)zoomBy / 1000); }; } }
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); }
public static void AddCameraMovementController(AbstractCameraTracker camera, ClickController clickController) { if (TouchScreenEnabled) { var dragGesture = new SmartGesture(GestureType.FreeDrag) { GestureEvent = gesture => { camera.Camera.Position -= gesture.Delta / camera.CameraZoom; } }; clickController.AddSmartGesture(dragGesture); var doubleTap = new SmartGesture(GestureType.DoubleTap) { GestureEvent = gesture => { camera.ReFocus(); } }; clickController.AddSmartGesture(doubleTap); } }