예제 #1
0
        public void IsoMathService_MapTileToScreenPositionINT_ShouldEqualX32Y48()
        {
            var result = _isoMathService.MapTileToScreenPosition(2, 1);

            Assert.AreEqual(32, result.X);
            Assert.AreEqual(48, result.Y);
        }
예제 #2
0
        /// <inheritdoc />
        public override void Process(Entity entity)
        {
            Vector2   mousePosition = _inputService.GetMousePosition();
            Position  position      = entity.GetComponent <Position>();
            Paintable paintable     = entity.GetComponent <Paintable>();

            mousePosition.X += _camera.Position.X;
            mousePosition.Y += _camera.Position.Y;

            Vector2 tilePosition  = _isoMathService.ScreenPositionToMapTile(mousePosition);
            Vector2 worldPosition = _isoMathService.MapTileToScreenPosition(tilePosition);

            position.X = worldPosition.X;
            position.Y = worldPosition.Y;


            if (_inputService.IsLeftMouseDown())
            {
            }
        }
예제 #3
0
        /// <inheritdoc />
        public override void Process(Entity entity)
        {
            LoadEmptyTileset();

            Renderable renderable = entity.GetComponent <Renderable>();
            Map        map        = entity.GetComponent <Map>();

            int tileWidth  = _engineService.TileWidth;
            int tileHeight = _engineService.TileHeight;

            for (int x = 0; x < map.Width; x++)
            {
                for (int y = map.Height - 1; y >= 0; y--)
                {
                    Vector2 screenPosition = _isoMathService.MapTileToScreenPosition(x, y);

                    Vector2 position = new Vector2(
                        screenPosition.X,
                        screenPosition.Y);

                    Tile      tile          = map.Tiles[x, y];
                    int       sourceX       = 0;
                    int       sourceY       = 0;
                    Texture2D renderTexture = _emptyCell;

                    if (tile != null)
                    {
                        sourceX       = tileWidth * tile.SourceX;
                        sourceY       = tileHeight * tile.SourceY;
                        renderTexture = renderable.Texture;
                    }

                    Rectangle source = new Rectangle(
                        sourceX,
                        sourceY,
                        tileWidth,
                        tileHeight);

                    _spriteBatch.Draw(
                        renderTexture,
                        position,
                        source,
                        Color.White,
                        0.0f,
                        _origin,
                        1.0f,
                        SpriteEffects.None,
                        0.0f);
                }
            }

            // Move camera to focus more on the area for the first run time.
            if (!_renderedOnce)
            {
                _camera.Position = new Vector2(
                    _camera.Position.X - _camera.BoundingRectangle.Width / 2.0f,
                    _camera.Position.Y - 50
                    );
            }

            _renderedOnce = true;
        }