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); }
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 Undo() { IDrawableTile drawableTile = _drawableTileRegistry.GetDrawableTileAtCoordinates(_data._drawableTileCoords); _spriteState.RestoreState(drawableTile.Sprite); }