void Update() { // if currently over another panel // don't do anything if (MouseOverUIElement.MouseOverElement) { //_spriteRenderer.enabled = false; return; } // if spriteRenderer has been disabled // due to mouse over panel, re-enable // if(!_spriteRenderer.enabled) // _spriteRenderer.enabled = true; // setup example thing on _current from // selected type on game if (!CurrentType.HasValue && _currentToBuild != null) { _currentToBuild = null; } else if (CurrentType.HasValue && (_currentToBuild == null || _currentToBuild.TypeOfThing != CurrentType.Value)) { _currentToBuild = Assets.GetThingConfig(CurrentType.Value); } // update cursor position to mouse position var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); var position = new Vector3( Mathf.RoundToInt(mousePosition.x), Mathf.RoundToInt(mousePosition.y) ); if (_currentToBuild != null) { _fixCursorPosition = false; } // if cursor has moved to a different grid position if (_cursorPosition != position && !_fixCursorPosition) { _cursorPosition = position; _crosshairCursor.transform.position = position; var posVec2 = position.ToVector2IntFloor(); if (OnCursorMoved != null) { OnCursorMoved(posVec2); } if (_game.IsThingOnFloor(posVec2)) { _mouseOverThing = _game.GetThingOnFloor(posVec2); if (_actionPanel != null) { _actionPanel.Setup(_mouseOverThing); } } } // disable cursor mesh if no current selected // thing being constructed _cursorMeshObj.SetActive(_currentToBuild != null); // check for dragging if (Input.GetKeyDown(KeyCode.Mouse0)) { _mouseDown = true; _down = _crosshairCursor.transform.position; MouseDown(); } // update move position // check if current tile is rule based so we can setup // the correct max/min if (_mouseDown) { _move = _crosshairCursor.transform.position; if (_currentToBuild != null && _currentToBuild.Pipe) { if (_max.x - _min.x > _max.y - _min.y) { _move.y = _down.y; } else { _move.x = _down.x; } } // move mouse callback for drawing previews etc. } else { _down = _crosshairCursor.transform.position; _move = _down; } MouseMove(); // if player has finished interaction // call mouse up event if (Input.GetKeyUp(KeyCode.Mouse0)) { _mouseDown = false; MouseUp(); } // if right click cancel current // tile if (Input.GetKeyDown(KeyCode.Mouse1)) { CurrentType = null; _fixCursorPosition = false; _actionPanel.Clear(); } }