Example #1
0
        public IObservable <Unit> Run()
        {
            IDrawableTile drawableTile = _drawableTileRegistry.GetDrawableTileAtCoordinates(_data._drawableTileCoords);

            _spriteState = _texturePainter.SaveState(drawableTile.Sprite);
            _texturePainter.PaintPixel(drawableTile.Sprite, _data._pixelPosition, _data._paintParams);

            return(Observable.ReturnUnit());
        }
        public void Tick()
        {
//            _logger.Log(LoggedFeature.Assets, "{0}", _camera.ScreenToViewportPoint(UnityEngine.Input.mousePosition));
//
            if (!_isEnabled)
            {
                return;
            }

            // Are we inside the grid?
            IntVector2?tileAtMouse = _gridInputManager.TileAtMousePosition;

            if (tileAtMouse == null)
            {
                return;
            }

            // We we clicked?
            if (!UnityEngine.Input.GetMouseButtonDown(0) && !UnityEngine.Input.GetMouseButton(0))
            {
                return;
            }

            // Are we over a UI element?
            if (_eventSystem.IsPointerOverGameObject())
            {
                return;
            }

            // This may lazily instantiate the tile used to draw, so it is important that it happens before the raycast.
            IDrawableTile drawableTile    = _drawableTileRegistry.GetDrawableTileAtCoordinates(tileAtMouse.Value);
            Vector2       mouseWorldPoint = _camera.ScreenToWorldPoint(UnityEngine.Input.mousePosition);
            RaycastHit2D  raycastHit      =
                Physics2D.Raycast(mouseWorldPoint, Vector2.zero, LayerMask.NameToLayer(kDrawingLayerName));

            if (raycastHit.collider == null)
            {
                return;
            }

            Vector2?localPosition = _drawableTileRegistry.GetLocalPosition(raycastHit.point);

            if (localPosition == null)
            {
                _logger.LogError(LoggedFeature.Drawing,
                                 "Raycast hit point not found inside drawable tile. Point: {0}. Tile: {1}",
                                 raycastHit.point,
                                 drawableTile);
                return;
            }

            Vector2        pixelPosition  = GetLocalToPixelCoordinates(drawableTile.Sprite, localPosition.Value);
            PaintPixelData paintPixelData =
                new PaintPixelData(tileAtMouse.Value, IntVector2.Of(pixelPosition), _drawingViewController.PaintParams);

            _commandQueue.Enqueue <PaintPixelCommand, PaintPixelData>(paintPixelData, CommandSource.Game);
        }