void Update()
    {
        timestep += timer.GetElapsedSeconds();
        Clock();

        terraformingText.text = "Terraforming progression: " + globalTerraformingProgression.ToString() + " / 100";
        powerText.text        = power.ToString() + " J";

        Vector3 mousePos = gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1));

        for (int j = 0; j < tiles.GetLength(0); j++)
        {
            for (int i = 0; i < tiles.GetLength(1); i++)
            {
                if (!commandPanel.activeSelf && tiles[j, i].activeSelf && mousePos.x <= tiles[j, i].transform.position.x + 0.5f && mousePos.x >= tiles[j, i].transform.position.x - 0.5f && mousePos.y <= tiles[j, i].transform.position.y + 0.5f && mousePos.y >= tiles[j, i].transform.position.y - 0.5f)
                {
                    waterUIValue.textChange(mapTilesArray[j, i].water);
                    ironUIValue.textChange(mapTilesArray[j, i].iron);
                    break;
                }
                else if (!tiles[j, i].activeSelf)
                {
                    //  waterUIValue.textChange(0);
                    //ironUIValue.textChange(0);
                }
            }
        }
        if (Input.GetMouseButtonDown(0) && !commandPanel.activeSelf && !bedGhost.activeSelf && !wallGhost.activeSelf && !solarPanelGhost.activeSelf && !smokeGhost.activeSelf && !structPanel.activeSelf && Input.mousePosition.y > 20)
        {
            updateClickedPos();
            try
            {
                player = getCrew();
            }
            catch
            {
            }

            tilePositionsCheck();
        }

        else if (wallGhost.activeSelf)
        {
            for (int j = 0; j < mapTilesArray.GetLength(0); j++)
            {
                for (int i = 0; i < mapTilesArray.GetLength(1); i++)
                {
                    if ((gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x <= mapTilesArray[i, j].position.x + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x >= mapTilesArray[i, j].position.x - 0.5f &&
                         gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y <= mapTilesArray[i, j].position.y + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y >= mapTilesArray[i, j].position.y - 0.5f) && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].activeSelf)
                    {
                        wallGhost.transform.position = new Vector3(mapTilesArray[i, j].position.x, mapTilesArray[i, j].position.y, -0.03f);;
                        if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0) && tiles[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].activeSelf)
                        {
                            for (int k = 0; k < inventory.inventoryCount.Length; k++)
                            {
                                if (inventory.inventoryString[k] == "iron" && inventory.inventoryCount[k] >= 1)
                                {
                                    wall1.SetActive(true);
                                    Instantiate(wall1, mapTilesArray[i, j].position, Quaternion.identity);
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].walkable = false;
                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].SetActive(false);
                                    inventory.TakeItems("iron", 1);
                                    inventory.UpdateText(k);

                                    break;
                                }
                            }
                        }
                    }
                }
            }
            if (Input.GetMouseButtonDown(1))
            {
                wallGhost.SetActive(false);
            }
        }
        else if (solarPanelGhost.activeSelf)
        {
            for (int j = 0; j < mapTilesArray.GetLength(0); j++)
            {
                for (int i = 0; i < mapTilesArray.GetLength(1); i++)
                {
                    if (j != 0 && (gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x <= mapTilesArray[i, j].position.x + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x >= mapTilesArray[i, j].position.x - 0.5f &&
                                   gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y <= mapTilesArray[i, j].position.y + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y >= mapTilesArray[i, j].position.y - 0.5f) && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].activeSelf && tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y].activeSelf)
                    {
                        solarPanelGhost.transform.position = new Vector3(mapTilesArray[i, j].position.x, mapTilesArray[i, j].position.y - .5f, -0.03f);
                        if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0) && tiles[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].activeSelf)
                        {
                            for (int k = 0; k < inventory.inventoryCount.Length; k++)
                            {
                                if (inventory.inventoryString[k] == "iron" && inventory.inventoryCount[k] >= 2)
                                {
                                    solarPanel.SetActive(true);
                                    Instantiate(solarPanel, new Vector3(mapTilesArray[i, j].position.x, mapTilesArray[i, j].position.y - .5f, 0), Quaternion.identity);
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].walkable     = false;
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y - 1].walkable = false;

                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].SetActive(false);
                                    tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y].SetActive(false);

                                    inventory.TakeItems("iron", 2);
                                    inventory.UpdateText(k);
                                }
                            }
                        }
                    }
                }
            }
            if (Input.GetMouseButtonDown(1))
            {
                solarPanelGhost.SetActive(false);
            }
        }
        else if (bedGhost.activeSelf)
        {
            for (int j = 0; j < mapTilesArray.GetLength(0); j++)
            {
                for (int i = 0; i < mapTilesArray.GetLength(1); i++)
                {
                    if (j != 0 && (gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x <= mapTilesArray[i, j].position.x + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x >= mapTilesArray[i, j].position.x - 0.5f &&
                                   gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y <= mapTilesArray[i, j].position.y + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y >= mapTilesArray[i, j].position.y - 0.5f) && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].activeSelf && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y + 1].activeSelf)
                    {
                        bedGhost.transform.position = new Vector3(mapTilesArray[i, j].position.x + .5f, mapTilesArray[i, j].position.y, -0.03f);
                        if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0) && tiles[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].activeSelf)
                        {
                            for (int k = 0; k < inventory.inventoryCount.Length; k++)
                            {
                                if (inventory.inventoryString[k] == "iron" && inventory.inventoryCount[k] >= 2)
                                {
                                    bed.SetActive(true);
                                    GameObject hold = (GameObject)Instantiate(bed, new Vector3(mapTilesArray[i, j].position.x + .5f, mapTilesArray[i, j].position.y, 0), Quaternion.Euler(0, 0, 90));
                                    beds.Add(hold.GetComponent <BedScript>());
                                    //mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].walkable = false;
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x + 1, (int)mapTilesArray[i, j].position.y].walkable = false;

                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].SetActive(false);
                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y + 1].SetActive(false);

                                    inventory.TakeItems("iron", 2);;
                                    inventory.UpdateText(k);
                                }
                            }
                        }
                    }
                }
            }
            if (Input.GetMouseButtonDown(1))
            {
                bedGhost.SetActive(false);
            }
        }
        else if (smokeGhost.activeSelf)
        {
            for (int j = 0; j < mapTilesArray.GetLength(0); j++)
            {
                for (int i = 0; i < mapTilesArray.GetLength(1); i++)
                {
                    if (j != 0 && i != mapTilesArray.GetLength(1) - 1 && (gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x <= mapTilesArray[i, j].position.x + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).x >= mapTilesArray[i, j].position.x - 0.5f &&
                                                                          gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y <= mapTilesArray[i, j].position.y + 0.5f && gameCam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, gameCam.transform.position.z * -1)).y >= mapTilesArray[i, j].position.y - 0.5f) && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].activeSelf && tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y].activeSelf && tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y + 1].activeSelf && tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y + 1].activeSelf)
                    {
                        smokeGhost.transform.position = new Vector3(mapTilesArray[i, j].position.x + .5f, mapTilesArray[i, j].position.y - .5f, -0.03f);
                        if (Input.GetMouseButton(0) && tiles[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].activeSelf)
                        {
                            for (int k = 0; k < inventory.inventoryCount.Length; k++)
                            {
                                if (inventory.inventoryString[k] == "iron" && inventory.inventoryCount[k] >= 5)
                                {
                                    smokeProducer.SetActive(true);
                                    Instantiate(smokeProducer, new Vector3(mapTilesArray[i, j].position.x + .5f, mapTilesArray[i, j].position.y - .5f, 0), Quaternion.identity);
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y].walkable         = false;
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x + 1, (int)mapTilesArray[i, j].position.y].walkable     = false;
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x + 1, (int)mapTilesArray[i, j].position.y - 1].walkable = false;
                                    mapTilesArray[(int)mapTilesArray[i, j].position.x, (int)mapTilesArray[i, j].position.y - 1].walkable     = false;

                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y].SetActive(false);
                                    tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y].SetActive(false);
                                    tiles[(int)mapTilesArray[j, i].position.x - 1, (int)mapTilesArray[j, i].position.y + 1].SetActive(false);
                                    tiles[(int)mapTilesArray[j, i].position.x, (int)mapTilesArray[j, i].position.y + 1].SetActive(false);
                                    inventory.TakeItems("iron", 5);
                                    inventory.UpdateText(k);
                                }
                            }
                        }
                    }
                }
            }
            if (Input.GetMouseButtonDown(1))
            {
                smokeGhost.SetActive(false);
            }
        }
        bool allSleep = false;

        for (int i = 0; i < crewList.Count; i++)
        {
            if (crewList[i].actions.Count != 0)
            {
                if (crewList[i].actions[0] != "sleep")
                {
                    allSleep = false;
                    break;
                }
                else if (crewList[i].actions[0] == "sleep")
                {
                    allSleep = true;
                }
            }
        }
        int prevDayNo = 0;

        if (allSleep)
        {
            if (hours != 6)
            {
                prevDayNo = dayNo;
                timestep  = timestep * 8;
            }
            else if (dayNo != prevDayNo)
            {
                for (int i = 0; i < crewList.Count; i++)
                {
                    if (crewList[i].actions.Count != 0)
                    {
                        crewList[i].sleep = false;
                        crewList[i].RemoveAction();
                    }
                }
            }
        }
        if (player != null)
        {
            if (Input.GetMouseButtonDown(0) && !bedGhost.activeSelf)
            {
                for (int i = 0; i < beds.Count; i++)
                {
                    if (mousePos.x < beds[i].transform.position.x + 1 && mousePos.x > beds[i].transform.position.x - 1 && mousePos.y <beds[i].transform.position.y + .5f && mousePos.y> beds[i].transform.position.y - .5f && player.transform.position.x != beds[i].transform.position.x - .5f)
                    {
                        player.sleep = true;
                    }
                }
            }
            if (mineWater.clicked || mineIron.clicked || player.sleep == true)
            {
                setDestination();
                player.SetDestinationPlayer(destination);
                player.AddAction("moving");
            }
            if (player.mining)
            {
                crewPanelText.DisplayCancelButton();
            }
            else
            {
                crewPanelText.HideCancelButton();
            }
            if (player.sleep == true)
            {
                player.AddAction("sleep");
                player.sleep = false;
            }
            if (mining && mineWater.clicked)
            {
                mapGenerator.setMining(mining);
                for (int j = 0; j < tiles.GetLength(0); j++)
                {
                    for (int i = 0; i < tiles.GetLength(1); i++)
                    {
                        if (destination == new Vector2(tiles[i, j].transform.position.x, tiles[i, j].transform.position.y))
                        {
                            player.AddAction("water");
                            player.SetTileReference(i, j);
                            mineWater.SetClicked(false);
                            break;
                        }
                    }
                }
            }

            if (mining && mineIron.clicked)
            {
                mapGenerator.setMining(mining);
                for (int j = 0; j < tiles.GetLength(0); j++)
                {
                    for (int i = 0; i < tiles.GetLength(1); i++)
                    {
                        if (destination == new Vector2(tiles[i, j].transform.position.x, tiles[i, j].transform.position.y))
                        {
                            player.AddAction("iron");
                            player.SetTileReference(i, j);
                            mineIron.SetClicked(false);
                            break;
                        }
                    }
                }
            }

            crewUI.UpdatePanel();
            crewPanelText.UpdateText(player);
        }
    }