示例#1
0
        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);
        }
示例#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
        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);
        }