function updatePlayersGooInternal(address player) internal {
        uint224 gooGain = balanceOfUnclaimedGoo(player);
        
        UserBalance memory balance = balances[player];
        if (gooGain > 0) {
            totalGoo += gooGain;
            if (!supplyCapHit && totalGoo == MAX_SUPPLY) {
                supplyCapHit = true;
            }
            
            balance.goo += gooGain;
            emit Transfer(address(0), player, gooGain);
        }
        
        if (balance.lastGooSaveTime < block.timestamp) {
            balance.lastGooSaveTime = uint32(block.timestamp); 
            balances[player] = balance;
        }
    }