void SerializeHookahMakers(BinaryFormatter formatter, FileStream stream)
    {
        formatter.Serialize(stream, player.workers.Count);
        foreach (HookahMaker worker in player.workers)
        {
            formatter.Serialize(stream, worker.prefabName);
            worker.Save(formatter, stream);

            HookahMakerData hookahMakerData = new HookahMakerData();

            if (worker.servedHookah == null)
            {
                hookahMakerData.hookahIndex = -1;
            }
            else
            {
                for (int i = 0; i < player.hookahs.Count; i++)
                {
                    if (worker.servedHookah == player.hookahs[i])
                    {
                        hookahMakerData.hookahIndex = i;
                    }
                }
            }

            if (worker.servedTable == null)
            {
                hookahMakerData.tableIndex = -1;
            }
            else
            {
                for (int i = 0; i < player.tables.Count; i++)
                {
                    if (worker.servedTable == player.tables[i])
                    {
                        hookahMakerData.tableIndex = i;
                    }
                }
            }

            formatter.Serialize(stream, hookahMakerData);
        }
    }
    public void Load(BinaryFormatter formatter, FileStream stream)
    {
        // NOTE: Loading clients
        foreach (Client client in player.clients)
        {
            Destroy(client.gameObject);
        }
        player.clients.Clear();
        int             clientsCount = (int)formatter.Deserialize(stream);
        ClientGenerator generator    = FindObjectOfType <ClientGenerator>();

        for (int i = 0; i < clientsCount; i++)
        {
            string prefabName   = (string)formatter.Deserialize(stream);
            Client clientPrefab = PrefabStorage.Instance.GetClientByName(prefabName);

            Client client = Instantiate(clientPrefab);
            client.Load(formatter, stream);
            client.prefabName = prefabName;
            player.AddClient(client);

            ClientData clientData = (ClientData)formatter.Deserialize(stream);

            client.clientData = clientData;
        }

        // NOTE: Loading tables
        foreach (Table table in player.tables)
        {
            Destroy(table.gameObject);
        }
        int tablesCount = (int)formatter.Deserialize(stream);

        player.tables.Clear();
        for (int i = 0; i < tablesCount; i++)
        {
            string prefabName  = (string)formatter.Deserialize(stream);
            Table  tablePrefab = PrefabStorage.Instance.GetTableByName(prefabName);

            Table table = Instantiate(tablePrefab);
            table.Load(formatter, stream);
            table.prefabName = prefabName;
            player.tables.Add(table);

            TableData tableData = (TableData)formatter.Deserialize(stream);

            table.tableData = tableData;
        }

        // NOTE: Loading hookahs
        foreach (Hookah hookah in player.hookahs)
        {
            Destroy(hookah.gameObject);
        }
        int hookahsCount = (int)formatter.Deserialize(stream);

        player.hookahs.Clear();
        for (int i = 0; i < hookahsCount; i++)
        {
            string prefabName   = (string)formatter.Deserialize(stream);
            Hookah hookahPrefab = PrefabStorage.Instance.GetHookahByName(prefabName);

            Hookah hookah = Instantiate(hookahPrefab);
            hookah.Load(formatter, stream);
            hookah.prefabName = prefabName;
            player.hookahs.Add(hookah);
        }

        // NOTE: Loading hookah makers
        foreach (HookahMaker worker in player.workers)
        {
            Destroy(worker.gameObject);
        }
        int workersCount = (int)formatter.Deserialize(stream);

        player.workers.Clear();
        for (int i = 0; i < workersCount; i++)
        {
            string      prefabName        = (string)formatter.Deserialize(stream);
            HookahMaker hookahMakerPrefab = PrefabStorage.Instance.GetHookahMakerByName(prefabName);

            HookahMaker worker = Instantiate(hookahMakerPrefab);
            worker.Load(formatter, stream);
            worker.prefabName = prefabName;
            player.workers.Add(worker);

            HookahMakerData hookahMakerData = (HookahMakerData)formatter.Deserialize(stream);

            worker.hookahMakerData = hookahMakerData;
        }


        RecreateClientLinks(formatter, stream);
        RecreateTableLinks(formatter, stream);
        RecreateHookahMakerLinks(formatter, stream);
    }