コード例 #1
0
        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);
                };
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 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);
     }
 }