void Update()
    {
        // Slerp Camera towards TargetPos
        Camera.main.transform.position = Vector3.Slerp(Camera.main.transform.position, m_TargetCameraPosition, Time.deltaTime * 20.0f);

        // Detect Fingers, for mobile input
        DetectFingerInput();

#if UNITY_EDITOR || UNITY_STANDALONE
        DEBUG_MoveCameraInput();

        // Is Placement Brush Active?
        if (MapManager.GetInstance().GetPlacementBrushActive())
        {
            SetTemplateBuildingToGridPosition();   // Move Building with Camera

            RenderTemplateBuilding();
        }
        // Is Removal Brush Active?
        else if (MapManager.GetInstance().GetRemovalBrushActive())
        {
            // THIS ONLY WORKS ON PC
            if (Input.GetMouseButtonUp(0))
            {
                RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, 20.0f, 1 << 0);
                if (hit.collider == null)
                {
                    return;
                }
                // Debug.Log("Raycast2D hit: " + hit.transform.gameObject.name);

                // Should put buildings on seperate layer honestly...
                BaseBuildingsClass hitBuilding = hit.transform.parent.gameObject.GetComponent <BaseBuildingsClass>();
                if (hitBuilding == null)
                {
                    return;
                }
                // Can building be Removed?
                if (!hitBuilding.GetCanBeRemoved())
                {
                    return;
                }
                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                MapManager.GetInstance().AddBuildingToBeRemoved(hit.transform.parent.gameObject.GetComponent <BaseBuildingsClass>());
            }
            //else if (Input.GetKeyUp(KeyCode.E))
            //    MapManager.GetInstance().RemoveBuildingsFromMapUnderList();
        }
        // Is Movement Brush Active?
        else if (MapManager.GetInstance().GetMovementBrushActive())
        {
            if (MapManager.GetInstance().GetBuildingToMove() == null)
            {
                // THIS ONLY WORKS ON PC
                if (Input.GetMouseButtonUp(0))
                {
                    RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, 20.0f, 1 << 0);
                    if (hit.collider == null)
                    {
                        return;
                    }
                    // Debug.Log("Raycast2D hit: " + hit.transform.gameObject.name);

                    // Should put buildings on seperate layer honestly...
                    BaseBuildingsClass hitBuilding = hit.transform.parent.gameObject.GetComponent <BaseBuildingsClass>();
                    if (hitBuilding == null)
                    {
                        return;
                    }
                    // Can building be Moved?
                    if (!hitBuilding.GetCanBeMoved())
                    {
                        return;
                    }
                    // Attach it and calculate offset
                    MapManager.GetInstance().SetNewBuildingToMove(hitBuilding);
                    m_MovingPlacedBuildingOffset = hitBuilding.transform.position - Camera.main.transform.position;
                }
                return;
            }
            // Make building to move follow camera and grid position
            SetMovingBuildingToGridPosition();

            // PC INPUTS
            // Can place?
            if (MapManager.GetInstance().CanPlaceBuildingToMove())
            {
                MapManager.GetInstance().GetBuildingToMove().transform.GetChild(0).GetComponent <SpriteRenderer>().color = Color.cyan;
                //// Confirm
                //if (Input.GetKeyUp(KeyCode.O))
                //{
                //    MapManager.GetInstance().ConfirmRemovementOfBuilding();
                //}
            }
            else
            {
                MapManager.GetInstance().GetBuildingToMove().transform.GetChild(0).GetComponent <SpriteRenderer>().color = Color.gray;
            }
            // Cancel
            if (Input.GetKeyUp(KeyCode.P))
            {
                MapManager.GetInstance().CancelRemovementOfBuilding();
            }
        }

        // Saving and Loading
        //if (Input.GetKeyUp(KeyCode.Z))
        //    SaveSystem.SaveToFile();
        //else if (Input.GetKeyUp(KeyCode.X))
        //    SaveSystem.LoadFromFile();
#endif
    }